Gần đây, tôi gặp sự cố về ứng dụng trực tiếp. Tôi nhận ra rằng tôi đã có nhiều trường hợp ngoại lệ đồng thời hơn và khóa bằng cơ sở dữ liệu.Làm thế nào để kiểm tra đơn vị đồng thời đọc/ghi với PHPUnit?
Về cơ bản, tôi bắt đầu giao dịch yêu cầu SELECT
và INSERT
trên cùng một bảng để cam kết. Nhưng vì tải trọng thực sự nặng, nên mỗi giao dịch sẽ khóa bảng, trong hầu hết các trường hợp nó quá nhanh, nó không gây ra bất kỳ vấn đề nào nhưng có một điểm mà ổ khóa bắt đầu chờ đợi ngày càng nhiều.
Tôi đã có thể khắc phục được vấn đề này bằng cách tinh chỉnh các truy vấn.
Mặc dù, bây giờ, tôi muốn viết một số thử nghiệm với PHPUnit để xác thực sửa lỗi của tôi và tránh bất kỳ hồi quy nào.
Tôi không thể tìm thấy bất kỳ tài liệu nào về cách thực hiện việc này.
Vì PHP không phải là đa luồng, tôi không có ý tưởng làm cách nào để có thể chạy các truy vấn đồng thời trong một thử nghiệm để xác thực.
Về cơ bản, tôi muốn có thể chạy nhiều cuộc gọi trong một lần kiểm tra để đảm bảo mọi thứ đều ổn.
Tôi biết mình có thể thử một số bài kiểm tra cấp cao bằng cách truy vấn trực tiếp máy chủ http và tải toàn bộ ứng dụng, nhưng vì vấn đề của tôi xuất phát từ một thư viện độc lập, tôi muốn thử nghiệm nó hơn.
Bất kỳ ý tưởng nào?
Có cùng câu hỏi – XuDing
Bạn không thể kiểm tra cách thông thường đồng thời. Những điều duy nhất bạn có thể làm là a) kiểm tra căng thẳng và b) thi hành các điều kiện mà tại đó bạn cho rằng sự bất thường sẽ xảy ra (nếu điều này là có thể). Về cơ bản, bạn không nên kiểm tra cơ sở dữ liệu, bạn nên đảm bảo rằng các giấy trắng nói rằng thuật toán của bạn an toàn và nếu bạn muốn cực kỳ chắc chắn, hãy thêm các bài kiểm tra căng thẳng cụ thể ở cấp độ kiểm tra cao nhất (ngoài ứng dụng). Để trả lời câu hỏi cụ thể, bạn luôn có thể sử dụng nhiều quy trình để thực hiện các hoạt động đồng thời, do đó việc sử dụng thủ công hoặc thư viện như kirsswallsmith/spork sẽ giúp ích. – Etki