TestNG Framework: Tổng Quan, Ứng Dụng và Các Phương Pháp Chạy Test Hiệu Quả

Bài viết này thuộc series về TestNG Framework, một công cụ đã quen thuộc với nhiều người, nhưng có thể vẫn còn những khía cạnh chưa được hiểu rõ hoặc kiến thức còn rời rạc. Mục tiêu của series này là xây dựng nền tảng kiến thức vững chắc về TestNG, giúp bạn tự tin hơn khi thảo luận hoặc phỏng vấn về chủ đề này.

Với những ai mới bắt đầu làm quen với TestNG:

TestNG là một framework kiểm thử mạnh mẽ, hỗ trợ quản lý việc tạo test suite/test case, thứ tự thực thi test và tạo báo cáo sau khi hoàn thành.

I. Những Kiến Thức Cơ Bản Về TestNG

TestNG được xây dựng dựa trên cảm hứng từ hai framework xUnit nổi tiếng là JUnit (Java) và NUnit (C#). “NG” trong TestNG là viết tắt của “Next Generation” (Thế hệ tiếp theo).

TestNG có thể được áp dụng cho nhiều loại kiểm thử khác nhau như Unit test, Integration test và End-to-end test. Nó được phát triển bởi Cedric Beust. TestNG được gọi là “Next Generation” nhờ những ưu điểm vượt trội so với JUnit:

  • Cung cấp nhiều loại annotation After và Before để quản lý các giai đoạn khác nhau của quá trình kiểm thử.
  • Hỗ trợ tính năng chạy test phụ thuộc, cho phép xác định thứ tự thực thi test (ví dụ: test B chỉ chạy khi test A thành công).
  • Cho phép nhóm các test method lại với nhau để dễ dàng quản lý và thực thi.
  • Hỗ trợ chạy đa luồng (Multithread) để tăng tốc độ thực thi test.
  • Tạo báo cáo kết quả kiểm thử chi tiết bằng định dạng HTML.

II. Những Điều Có Thể Bạn Chưa Biết Về TestNG

TestNG được viết bằng ngôn ngữ Java và có thể sử dụng với Java và các ngôn ngữ “họ hàng” với Java như Groovy. Điều này mang lại sự linh hoạt cao cho các dự án phát triển phần mềm sử dụng nhiều ngôn ngữ khác nhau.

TestNG sử dụng file XML để cấu hình suites và tests. Tên file XML thường là testng.xml, nhưng bạn hoàn toàn có thể sử dụng bất kỳ tên nào khác tùy theo sở thích và quy ước của dự án. File XML này đóng vai trò trung tâm trong việc định nghĩa cấu trúc và cách thức thực thi các test.

TestNG cho phép bạn cấu hình để chọn lọc các packages, classes hoặc methods bạn muốn hoặc không muốn chạy. Ngoài ra, nó còn cho phép bạn nhóm các test methods từ các classes khác nhau thành một group, và group này có thể được chạy hoặc không chạy tùy thuộc vào cấu hình.

TestNG hỗ trợ truyền tham số vào các test methods, giúp bạn linh hoạt hơn trong việc kiểm thử với nhiều bộ dữ liệu khác nhau mà không cần phải sửa đổi code trực tiếp. Điều này đặc biệt hữu ích trong kiểm thử dữ liệu (data-driven testing).

TestNG cung cấp public API cho phép bạn thêm các chức năng hoặc extensions, mở rộng khả năng của framework để đáp ứng các nhu cầu kiểm thử đặc biệt của dự án.

III. Các Cách Chạy Test Với TestNG

TestNG cung cấp hai cách chạy test cơ bản:

  • Chạy từ command line (sẽ được trình bày chi tiết trong một bài viết khác).
  • Chạy từ IDE Eclipse.

Khi chạy từ Eclipse, bạn có một vài lựa chọn:

  • Chạy theo class.
  • Chạy theo file cấu hình XML.
  • Chạy sử dụng chức năng Run Configuration của Eclipse.

1. Chạy Test Theo Class

Đây là cách đơn giản và phổ biến nhất để chạy test trong quá trình phát triển.

  1. Mở class test bạn muốn chạy.
  2. Click chuột phải và chọn “Run As”.
  3. Chọn “TestNG Test”.

Với cách này, bạn chỉ có thể chạy các methods trong class đó, không thể chạy thêm các methods ở class khác. Nó phù hợp khi bạn muốn kiểm tra nhanh một class cụ thể sau khi viết xong.

Sau khi chạy, kết quả sẽ hiển thị trong khung “Result TestNG”:

Ở đây, bạn sẽ thấy có hai chỗ có chữ “Default suite” và “Default test” vì:

  • Bạn đang chạy với cấu hình mặc định của TestNG.
  • TestNG là một framework kiểm thử, nên nó tập trung vào hai khái niệm chính: suite và test. Các khái niệm khác như Group, Package, Class chỉ là đối tượng để thực hiện test.

2. Chạy Test Theo File XML

Đây là cách chạy test dựa trên một file cấu hình XML. Ví dụ, một file TestNG có dạng như sau:

Bạn chạy file XML này tương tự như cách chạy theo class, nhưng đối tượng chạy là file XML chứ không phải class. Các bài viết sau trong series này sẽ tập trung vào cách chạy test theo file XML, vì nó cung cấp nhiều tùy chọn cấu hình hơn.

3. Chạy Test Sử Dụng Chức Năng Run Configuration Của Eclipse

Thực tế, việc chạy theo Class cũng là một dạng của Run Configuration, nhưng ở chế độ mặc định. Run Configuration cho phép bạn chạy theo file XML, nhưng thay vì chỉnh sửa trực tiếp file XML, bạn sẽ nhập thông tin cấu hình vào một form.

Những lần chạy tiếp theo, bạn chỉ cần chọn nhanh cấu hình đã lưu:

IV. Kết Luận

Tóm lại, ba cách chạy test trên thực chất chỉ là một, với ba hình thức thực hiện khác nhau. Bạn có thể sử dụng cách nào tùy thích, nhưng nên sử dụng chúng một cách linh hoạt:

  • Sử dụng cách 1 khi bạn muốn chạy nhanh một class (và chỉ một class) để kiểm tra xem script đã viết đúng chưa.
  • Sử dụng cách 2 để cấu hình toàn bộ project, chia thành từng loại theo kiểu test (ví dụ: một file cho smoke test, bao gồm nhiều test case từ nhiều class).
  • Sử dụng cách 3 để cấu hình nhanh thay cho cách 2, khi bạn muốn chạy ngay trên Eclipse và muốn có giao diện trực quan để cấu hình. Cách này khác cách 1 ở chỗ, nó có thể cấu hình nhiều loại hơn.