Bài toán test chạy song song bị conflict là một vấn đề rất phổ biến khi mở rộng automation để chạy nhanh hơn bằng parallel execution.
Về bản chất, đây là tình huống nhiều test chạy cùng lúc nhưng lại cùng truy cập, cùng sử dụng hoặc cùng thay đổi một tập tài nguyên chung, dẫn đến xung đột dữ liệu hoặc trạng thái hệ thống, làm cho test fail ngẫu nhiên.
Nguyên nhân thường gặp nhất là nhiều test dùng chung một bộ dữ liệu, chẳng hạn như cùng một tài khoản đăng nhập, cùng một đơn hàng, cùng một bản ghi trong hệ thống hoặc cùng một môi trường không được cô lập. Khi một test thay đổi trạng thái của dữ liệu, các test còn lại đang chạy song song sẽ bị ảnh hưởng ngay lập tức. Ví dụ, một test đang đổi mật khẩu cho cùng một tài khoản mà một test khác cũng đang dùng để đăng nhập, thì một trong hai test sẽ bị fail.
Ngoài dữ liệu, xung đột còn có thể xảy ra ở mức tài nguyên hạ tầng, chẳng hạn như cùng dùng một trình duyệt profile, cùng một thư mục download, cùng file log hoặc cùng cổng mạng. Những tài nguyên dùng chung này cũng có thể gây ra lỗi không ổn định khi nhiều test chạy đồng thời.
Một nguyên nhân khác là môi trường kiểm thử không được thiết kế để hỗ trợ chạy song song, ví dụ backend không cho phép cùng lúc cập nhật một bản ghi, hoặc có các cơ chế lock, queue, hoặc xử lý chậm khiến các request song song ảnh hưởng lẫn nhau.
Hướng xử lý quan trọng nhất là tách dữ liệu cho từng test hoặc từng luồng chạy. Mỗi test nên có dữ liệu riêng, hoặc ít nhất là mỗi thread, mỗi worker phải có bộ dữ liệu riêng biệt, ví dụ như tài khoản riêng, bản ghi riêng hoặc tenant riêng. Đây là điều kiện gần như bắt buộc nếu muốn chạy song song ổn định.
Bên cạnh đó, cần tách các tài nguyên dùng trong quá trình chạy test, chẳng hạn như thư mục output, thư mục download, report, video recording hoặc browser profile. Mỗi instance chạy test nên có không gian riêng để tránh ghi đè và tranh chấp tài nguyên.
Với các test có thao tác thay đổi dữ liệu hoặc trạng thái quan trọng, nên cân nhắc gắn nhãn và loại trừ chúng khỏi nhóm chạy song song. Những test này có thể được gom vào một nhóm chạy tuần tự để đảm bảo an toàn và ổn định.
Ngoài ra, việc chuẩn bị và dọn dẹp dữ liệu trước và sau test cũng rất quan trọng. Nếu mỗi test đều chủ động tạo dữ liệu riêng và tự dọn dữ liệu của mình, khả năng xung đột khi chạy song song sẽ giảm đi rất nhiều.
Kết luận: Khi test chạy song song bị conflict, nguyên nhân không nằm ở công cụ automation, mà nằm ở cách thiết kế dữ liệu và tài nguyên dùng chung. Muốn chạy song song ổn định, test phải được thiết kế theo hướng độc lập dữ liệu, độc lập tài nguyên và có phân loại rõ ràng những test nào phù hợp để chạy parallel, những test nào cần chạy tuần tự.