TestRail
Duy Văn | 10/02/2024
TestRail về cơ bản là một tool sinh ra để điều hành hoạt động kiểm thử, quản lý kết quả kiểm thử và theo dõi tiến độ, nó có khá nhiều các công cụ để hỗ trợ việc viết test case, khởi tạo test run, quản lý test run,v.v…
Các hoạt động cơ bản nhất trên TestRail sẽ bao gồm:
- Team QA sẽ thiết lập project và các cài đặt cần thiết
- Tester sẽ viết các test case lên TestRail
- Team QA khởi tạo run test
- Tester sẽ thực hiện test (bao gồm cả manual và auto đều được) và log kết quả vào run test
- Team QA review lại kết quả test và đóng test run, tổng hợp kết quả và báo cáo
Ở đây, mình sẽ viết lại quá trình mình cố tích hợp công đoạn xuất kết quả test tự động đẩy lên TestRail
Thiết lập TestRail
Mình sẽ bắt đầu đi từ khâu thiết lập Project, đầu tiên, chúng ta sẽ tạo một project trên TestRail, sau đó tạo thử một vài test case

Tạo một project và đặt tên là Test
Sau khi đã tạo được một project, chúng ta cần tạo một trường (case field) cho test case tên là automation_id, nếu test case không có trường này thì sẽ không thể thực hiện automate test case và gửi kết quả lên testrail được

Tạo trường automation_id
Nó sẽ được tạo như sau:
- Label để hiển thị trên giao diện:
Automation ID - System Name:
automation_id - Type:
Text - Rồi để đơn giản thì apply cho tất cả template: tick vào
This field applies to all templates - Ở cuối chọn
Add Projects & Optionvà hoặc có thể chọn project Test mới tạo ở trên, hoặc chọn áp dụng cho tất cả project
Define Test Case
Để các test case và kết quả test đẩy lên nhìn đẹp nhất thì chúng ta sẽ define nó theo các steps và dùng format của testrail chứ không tự viết kiểu 1. 2. trong cùng một đoạn text

Giao diện Test Cases
Ở giao diện test cases trên TestRail chúng ta có thể thấy có khá nhiều chức năng đáng lưu ý:
- Import feature: import file feature BDD theo định dạng Gherkin
- Import từ CSV: import test case từ file CSV, cái này mình sẽ có một bài viết riêng
Nhưng chúng ta cứ tập trung vài việc viết test case trước
Với giao diện tạo test case

Giao diện tạo Test Case
Chúng ta sẽ quan sát được các trường thông tin cơ bản như:
- Section: chia nhóm test case, nếu bạn tạo Section ở giao diện ngoài thì ở đây có thể chọn Section để add test case vào
- Template: Ở đây chúng ta đang thấy là Test Case (Text), đây là kiểu viết TC đơn giản nhất, như đã thấy ở dưới chúng ta chỉ có 2 trường text là Steps và Expected Result, viết liền cả cục text
- Type: Có thể chọn test type tương ứng, ví dụ như Smoke, Regression, v.v…
- Priority: Độ ưu tiên của test case
Các trường này hoàn toàn có thể bổ sung hay thay đổi (bắt buộc hay không) ở phần Customizations của project
Quay trở lại vấn đề viết TC theo step, chúng ta sẽ chọn template và Test Case(Steps)

Test Case(Steps) template
Sau đó, chúng ta có thể add các step vào test case

Bổ sung step
Tại đây, mỗi step chúng ta sẽ có một phần text để điền nội dung step và phần điền expected result
Sau khi xong thì lưu lại, chúng ta sẽ có một test case như sau

Sample test case
Lưu ý các thông tin chúng ta cần quan tâm: test case id, chính là số ở trong biểu tượng cạnh tên test case: C16 - id là 16
Suite id: Ở URL của project, chúng ta có thể có dạng URL là https://esbtest.testrail.io/index.php?/suites/view/2&group_by=cases:section_id&group_order=asc&display_deleted_cases=0, ở đây suite id là 2
Hai thông tin này sẽ được sử dụng để gửi kết quả test lên TestRail
Gửi kết quả test lên TestRail
Khi áp dụng auto test với TestRail, chúng ta sẽ muốn đẩy thẳng kết quả test lên testrail, để làm thế chúng ta cần lưu ý 3 đầu endpoint của TestRail api:
/api/v2/add_run/{proj}: Tạo một test run mới với project id làproj, ví dụ như với project đầu tiên và duy nhất thì nó sẽ là 1/api/v2/add_results_for_cases/{run_id}/: Đẩy kết quả test lên test run với id làrun_id, lưu ý là chúng ta sẽ gửi kết quả test của một nhóm các test case, chứ không phải từng test case, cái này để đảm bảo rằng toàn bộ script hoạt động ổn định trước khi gửi kết quả lên/api/v2/get_case/{case_iden}: Lấy thông tin của một test case với id làcase_iden, ở đâycase_idenlà test case id, ví dụ nhưC16ở trên, case iden là 16
Để gửi kết quả test lên TestRail, chúng ta sẽ cần ứng dụng cơ chế để chuẩn bị đầy đủ payload cho 3 endpoint trên và gọi nó ở cuối các lần chạy test, xem thêm chi tiết doc của TestRail API tại đây: TestRail API
Với đầu API để tạo test run và lấy test case về, payload không có gì phức tạp mà chỉ cần truyền vào project id và suite id. Tuy nhiên đẩy kết quả test lên TestRail sẽ yêu cầu body như sau
{
"case_id": ,
"status_id": ,
"comment": "",
"elapsed": "",
"defects": "",
"version": "",
"custom_step_results": [
{
"content": "",
"expected": "",
"actual": "",
"status_id":
},
... Nếu có thêm step
]
}
Trong quá trình chạy test, chúng ta phải tổng hợp được nội dung các test case từ TestRail về và đẩy vào các phần content và expected của custom_step_results. Sau đó, khi chạy test, kết quả thực tế cần được tổng hợp vào actual và status_id tương ứng. Có rất nhiều cách và cơ chế để tổng hợp kết quả test, và nó cũng phụ thuộc cụ thể vào từng framework và language binding mà chúng ta sử dụng