Top 50 TestNG Câu hỏi và trả lời phỏng vấn (2026)

Chuẩn bị cho một TestNG Phỏng vấn? Đã đến lúc xem xét những câu hỏi thể hiện điểm mạnh của bạn. Một lời hứa hẹn vững chắc. TestNG Kỹ năng phỏng vấn cho thấy chiều sâu tư duy, sự tự tin và sự sẵn sàng mà các nhóm tuyển dụng đánh giá cao.
Cơ hội trong lĩnh vực này bao gồm sự phát triển của tự động hóa, các khung công nghệ đang phát triển và các ứng dụng kiểm thử thực tiễn đòi hỏi kinh nghiệm kỹ thuật và chuyên môn. Làm việc trong lĩnh vực này đòi hỏi kiến thức chuyên môn, kỹ năng phân tích và bộ kỹ năng linh hoạt giúp người mới ra trường, chuyên gia trung cấp và chuyên gia cao cấp giải đáp các câu hỏi thường gặp ở các cấp độ kỹ thuật, cơ bản và nâng cao. Đọc thêm ...
👉 Tải xuống bản PDF miễn phí: TestNG Câu hỏi & câu trả lời phỏng vấn
Áo sơ mi TestNG Câu hỏi và trả lời phỏng vấn
1) là gì TestNG Vậy tại sao nó lại được sử dụng trong kiểm thử tự động?
TestNG (Test Next Generation) là một khung kiểm thử được lấy cảm hứng từ JUnit và NUnit nhưng được nâng cấp với các khả năng tiên tiến như nhóm, sắp xếp trình tự, tham số hóa và quản lý phụ thuộc. Nó chủ yếu được sử dụng trong kiểm thử tự động để tối ưu hóa việc thực thi kiểm thử, cải thiện tổ chức kiểm thử và tạo báo cáo HTML và XML chi tiết.
Lợi ích chính của TestNG bao gồm:
- Hỗ trợ thực thi kiểm thử song song, giúp giảm tổng thời gian chạy.
- Cung cấp chú thích giúp kiểm soát quy trình kiểm thử một cách hiệu quả.
- Khuyến Mãi thử nghiệm dựa trên dữ liệu thông qua
@DataProviderchú thích. - Tạo báo cáo có thể tùy chỉnh Để gỡ lỗi tốt hơn.
Ví dụ, TestNG Cho phép bạn thực hiện các nhóm kiểm thử khói, hồi quy và tích hợp một cách độc lập mà không cần sửa đổi mã kiểm thử, mang lại tính linh hoạt và khả năng mở rộng trong các bộ tự động hóa quy mô lớn.
2) Giải thích TestNG Vòng đời với các chú thích và thứ tự thực thi của chúng.
TestNG Vòng đời xác định cách các bài kiểm tra được khởi tạo, thực thi và kết thúc. Nó được kiểm soát thông qua các chú thích cung cấp cấu trúc và sự rõ ràng cho luồng kiểm thử.
| Chú thích | Mô tả Chi tiết | Lệnh thực hiện |
|---|---|---|
@BeforeSuite |
Chạy trước tất cả các bài kiểm tra trong bộ kiểm thử. | 1 |
@BeforeTest |
Thực thi trước <test> thẻ trong XML |
2 |
@BeforeClass |
Được thực thi trước phương thức đầu tiên trong lớp hiện tại. | 3 |
@BeforeMethod |
Thực thi trước mỗi phương pháp thử nghiệm | 4 |
@Test |
Chứa logic kiểm thử thực tế | 5 |
@AfterMethod |
Chạy sau mỗi phương pháp kiểm thử | 6 |
@AfterClass |
Chạy sau tất cả các phương thức trong lớp. | 7 |
@AfterTest |
Chạy theo <test> thẻ trong XML |
8 |
@AfterSuite |
Thực thi sau tất cả các thử nghiệm trong bộ phần mềm | 9 |
Trình tự có cấu trúc này đảm bảo việc thiết lập và gỡ bỏ thử nghiệm có thể dự đoán được, điều rất quan trọng để duy trì tính độc lập của thử nghiệm.
3) Thế nào rồi TestNG khác nhau từ JUnit?
Mặc dù cả hai framework đều được sử dụng để kiểm thử đơn vị, TestNG Cung cấp khả năng cấu hình mạnh mẽ hơn và khả năng thực thi song song.
| Tính năng | JUnit | TestNG |
|---|---|---|
| Thực hiện song song | Hỗ trợ hạn chế | Hỗ trợ đầy đủ |
| Chú thích | Ít hơn (@Before, @After) |
Giàu hơn (@BeforeSuite, @DataProvider) |
| Quản lý phụ thuộc | Không có | Có thể sử dụng dependsOnMethods |
| Nhóm | Không được hỗ trợ | Được hỗ trợ bằng cách sử dụng groups |
| Tham số hóa | Thông qua các nhà cung cấp bên ngoài | Được tích hợp sẵn thông qua XML hoặc @DataProvider |
Tóm tắt, TestNG được ưu tiên cho kiểm thử tự động hóa cấp doanh nghiệp và tích hợp với các công cụ như Selenium, trong khi JUnit Đây là lựa chọn lý tưởng cho các bài kiểm tra đơn vị đơn giản.
4) là gì TestNG Các chú thích có ích như thế nào?
Chú thích trong TestNG định nghĩa cấu trúc và hành vi của các phương pháp thử nghiệmChúng loại bỏ nhu cầu cấu hình XML phức tạp bằng cách cung cấp khả năng kiểm soát kiểm thử khai báo trực tiếp trong mã nguồn.
Các chú thích thường dùng bao gồm:
@BeforeSuite,@BeforeTest,@BeforeClass,@BeforeMethod@Test@AfterMethod,@AfterClass,@AfterTest,@AfterSuite
Ví dụ:
@BeforeMethod
public void setup() {
System.out.println("Initializing browser...");
}
@Test
public void verifyLogin() {
System.out.println("Executing login test...");
}
Điều này giúp các nhà phát triển tổ chức việc thực thi kiểm thử một cách hợp lý, đảm bảo rằng quá trình thiết lập, thực thi kiểm thử và dọn dẹp diễn ra theo một trình tự xác định.
5) Giải thích khái niệm nhóm trong TestNG.
Phân nhóm trong TestNG Cho phép phân loại các bài kiểm tra một cách hợp lý thành các nhóm nhỏ hơn, dễ quản lý hơn, chẳng hạn như "Kiểm tra nhanh", "Kiểm tra hồi quy" hoặc "Kiểm tra cơ bản".
Ví dụ:
@Test(groups = {"Smoke"})
public void loginTest() { ... }
@Test(groups = {"Regression"})
public void paymentTest() { ... }
Bạn có thể cấu hình bộ kiểm thử XML của mình để chạy trên các nhóm cụ thể:
<groups>
<run>
<include name="Smoke"/>
</run>
</groups>
Lợi ích:
- Hỗ trợ việc thực thi có chọn lọc các trường hợp kiểm thử.
- Tăng cường tính linh hoạt trong các quy trình CI/CD.
- Giúp tiết kiệm thời gian thực thi trong quá trình biên dịch từng bước.
6) Làm thế nào có thể đạt được tham số hóa trong TestNG?
Việc tham số hóa cho phép kiểm thử dựa trên dữ liệu, cho phép chạy các bài kiểm thử với nhiều bộ dữ liệu đầu vào khác nhau. TestNG Hỗ trợ hai phương pháp chính:
- Sử dụng
@ParametersChú thích bằng XML: - Sử dụng
@DataProvider:
<parameter name="browser" value="chrome"/>
@Test
@Parameters("browser")
public void launchBrowser(String browser) { ... }
@DataProvider(name="loginData")
public Object[][] getData() {
return new Object[][] {{"user1","pass1"}, {"user2","pass2"}};
}
@Test(dataProvider="loginData")
public void loginTest(String user, String pass) { ... }
Tính linh hoạt này giúp việc duy trì và thực hiện các bộ kiểm thử lớn trên nhiều môi trường hoặc cấu hình trở nên dễ dàng hơn.
7) Các mối quan hệ phụ thuộc trong TestNG Và chúng được quản lý như thế nào?
Sự phụ thuộc trong TestNG Kiểm soát thứ tự thực hiện kiểm thử dựa trên kết quả kiểm thử khác bằng cách sử dụng dependsOnMethods or dependsOnGroups thuộc tính.
Ví dụ:
@Test
public void loginTest() { ... }
@Test(dependsOnMethods = {"loginTest"})
public void verifyDashboard() { ... }
Nếu phương thức phụ thuộc thất bại, bài kiểm tra tiếp theo sẽ tự động bị bỏ qua.
Cơ chế này ngăn chặn việc thực thi kiểm thử không hợp lệ và giúp duy trì tính ổn định. kiểm tra tính toàn vẹn logicNó đặc biệt hữu ích cho các quy trình chức năng nhiều bước như đăng nhập → thực hiện hành động → xác minh kết quả.
8) Có những cách thực hiện nào khác nhau? TestNG các bài kiểm tra?
TestNG Các bài kiểm tra có thể được thực hiện theo nhiều cách linh hoạt tùy thuộc vào thiết lập kiểm thử:
- Từ IDE (Eclipse(IntelliJ): Nhấp chuột phải vào lớp học hoặc
XML file→Run as→TestNG Test. - Từ dòng lệnh:
java -cp "path\testng.jar;bin" org.testng.TestNG testng.xml - Sử dụng các công cụ xây dựng:
- Maven: Thiết lập
surefire-plugininpom.xml. - Gradle: Sử dụng
testngCấu hình phụ thuộc và tác vụ.
- Maven: Thiết lập
- Thông qua các quy trình CI/CD: Tích hợp với Jenkins hoặc GitHub Actions để thực thi tự động.
Sự đa dạng này đảm bảo khả năng tương thích giữa các môi trường phát triển, thử nghiệm và sản xuất.
9) là gì TestNG Người nghe là ai và tại sao họ lại quan trọng?
Người nghe ở TestNG Cung cấp các điểm kết nối để tùy chỉnh hành vi kiểm thử bằng cách giám sát các sự kiện thực thi kiểm thử như bắt đầu, thành công, thất bại hoặc bỏ qua.
Người nghe phổ biến:
ITestListener: Theo dõi các sự kiện ở cấp độ phương pháp kiểm thử.ISuiteListener: Quan sát các sự kiện ở cấp độ phòng.IReporterTạo báo cáo tùy chỉnh.
Ví dụ:
public class CustomListener implements ITestListener {
public void onTestFailure(ITestResult result) {
System.out.println("Test Failed: " + result.getName());
}
}
Máy nghe thường được dùng để nghe. ảnh chụp màn hình khi thất bại, tạo ra nhật ký tùy chỉnh, hoặc là tích hợp với các công cụ báo cáo Giống như Allure hoặc ExtentReports.
10) Ưu điểm và nhược điểm của việc sử dụng là gì? TestNG?
| Yếu tố | Ưu điểm | Nhược điểm |
|---|---|---|
| Linh hoạt | Hỗ trợ nhóm, phụ thuộc và thực thi song song. | Thiết lập XML phức tạp cho các bộ ứng dụng lớn. |
| Báo cáo | Cung cấp báo cáo HTML và XML chi tiết. | Khả năng tùy chỉnh hạn chế nếu không có người nghe. |
| Tích hợp | Hoạt động liền mạch với Selenium và các công cụ CI/CD | Đường cong học tập cao hơn một chút |
| Tham số hóa | Hỗ trợ tích hợp cho kiểm thử dựa trên dữ liệu | Cần bảo trì đối với các tập dữ liệu lớn. |
Nhìn chung, TestNG Đây là một khung phần mềm mạnh mẽ và linh hoạt, phù hợp với môi trường kiểm thử tự động hiện đại mặc dù yêu cầu cấu hình ban đầu không cao.
11) Làm thế nào bạn có thể ưu tiên các trường hợp kiểm thử trong TestNG?
TestNG cung cấp priority thuộc tính trong @Test Chú thích này được sử dụng để xác định thứ tự thực thi của các phương thức kiểm thử. Các bài kiểm thử có giá trị ưu tiên thấp hơn sẽ chạy trước.
Ví dụ:
@Test(priority = 1)
public void loginTest() { ... }
@Test(priority = 2)
public void dashboardTest() { ... }
Nếu không chỉ định mức độ ưu tiên, giá trị mặc định là 0và các phương thức được thực thi theo thứ tự bảng chữ cái.
Thực hành tốt nhất: Hãy sử dụng giá trị ưu tiên một cách tiết kiệm. Lạm dụng chúng có thể khiến thứ tự kiểm thử trở nên cứng nhắc. Đối với các luồng phức tạp, cần quản lý sự phụ thuộc (dependsOnMethodsPhương pháp này dễ duy trì hơn so với việc ưu tiên nghiêm ngặt.
12) Giải thích khái niệm và cách sử dụng thực thi song song trong TestNG.
Thực hiện song song trong TestNG Cho phép nhiều bài kiểm tra, lớp hoặc phương thức chạy đồng thời, giúp giảm đáng kể thời gian thực thi tổng thể.
Bạn có thể bật tính năng này trong... testng.xml tập tin:
<suite name="ParallelSuite" parallel="tests" thread-count="3"> <test name="Test1">...</test> <test name="Test2">...</test> </suite>
Các chế độ song song được hỗ trợ:
testsclassesmethodsinstances
Ưu điểm:
- Chu kỳ phản hồi nhanh hơn.
- Tận dụng hiệu quả bộ xử lý đa lõi.
- Khả năng mở rộng cho các bộ phần mềm tự động hóa quy mô lớn.
Tuy nhiên, hãy đảm bảo chủ đề an toàn khi sử dụng các tài nguyên dùng chung như WebDriver hoặc kết nối cơ sở dữ liệu.
13) Các nhà cung cấp dữ liệu là gì? TestNGChúng khác với các tham số như thế nào?
@DataProvider cho phép thử nghiệm dựa trên dữ liệu bằng cách cung cấp các phương pháp thử nghiệm với nhiều bộ dữ liệu khác nhau.
Ví dụ:
@DataProvider(name="credentials")
public Object[][] data() {
return new Object[][] {{"user1", "pass1"}, {"user2", "pass2"}};
}
@Test(dataProvider="credentials")
public void login(String username, String password) { ... }
Sự khác biệt giữa @Parameters và @DataProvider:
| Tính năng | @Parameters |
@DataProvider |
|---|---|---|
| Nguồn dữ liệu | Tệp XML | Java phương pháp |
| Loại dữ liệu | Bộ dữ liệu đơn lẻ | Nhiều tập dữ liệu |
| Linh hoạt | Less | Cao |
| Trường hợp sử dụng | Biến môi trường | Các bài kiểm tra dựa trên dữ liệu được lặp đi lặp lại |
Vì thế, @DataProvider Phương pháp này được ưu tiên sử dụng khi thực hiện một bài kiểm tra duy nhất với nhiều tập dữ liệu, chẳng hạn như xác minh đăng nhập bằng nhiều thông tin đăng nhập khác nhau.
14) Làm thế nào để vô hiệu hóa hoặc bỏ qua một bài kiểm tra? TestNG?
Bạn có thể vô hiệu hóa một bài kiểm tra trong TestNG bằng cách sử dụng enabled thuộc tính hoặc bằng cách bỏ qua nó theo chương trình.
1. Sử dụng enabled = false:
@Test(enabled = false)
public void skipTest() {
System.out.println("This test will not run.");
}
2. Bỏ qua trong quá trình chạy bằng cách sử dụng SkipException:
@Test
public void conditionalSkip() {
throw new SkipException("Skipping this test due to condition.");
}
Việc vô hiệu hóa rất hữu ích cho tạm thời vô hiệu hóa Các bài kiểm tra không ổn định hoặc không đầy đủ mà không cần xóa chúng. Việc bỏ qua rất hữu ích cho điều kiện thời gian chạyVí dụ như bỏ qua các bài kiểm tra đối với các trình duyệt không được hỗ trợ.
15) Tệp testng.xml có vai trò gì và các thành phần chính của nó là gì?
testng.xml Tệp này là xương sống cấu hình của TestNGNó định nghĩa các bộ kiểm thử, nhóm kiểm thử, tham số và thiết lập thực thi song song.
Ví dụ về cấu trúc:
<suite name="AutomationSuite">
<parameter name="browser" value="chrome"/>
<test name="RegressionTests">
<classes>
<class name="com.test.LoginTest"/>
<class name="com.test.PaymentTest"/>
</classes>
</test>
</suite>
Thành phần chính:
<suite>– Xác định toàn bộ bộ sản phẩm.<test>– Biểu thị một khối kiểm thử.<classes>– Liệt kê các lớp kiểm tra.<methods>– Lọc các phương pháp thử nghiệm cụ thể.<parameter>– Cung cấp các tham số ở cấp độ toàn cục hoặc cấp độ kiểm thử.
Tệp XML cung cấp kiểm soát tập trung Thực thi quá mức mà không thay đổi mã.
16) Làm thế nào bạn có thể tạo báo cáo trong TestNG?
TestNG tự động tạo hai loại báo cáo:
- Báo cáo HTML (
test-output/index.html) – Tóm tắt các bài kiểm tra đã vượt qua, thất bại và bỏ qua. - Báo cáo XML – Được sử dụng để tích hợp với các công cụ CI/CD.
Để có báo cáo nâng cao, TestNG tích hợp với:
- Mức độ báo cáo – Cung cấp bảng điều khiển đồ họa và nhật ký chi tiết.
- Báo cáo của Allure – Cung cấp phân tích trực quan với các bước kiểm thử, ảnh chụp màn hình và nhật ký.
Ví dụ tích hợp:
ExtentReports extent = new ExtentReports();
ExtentTest test = extent.createTest("Login Test");
test.pass("Test Passed Successfully");
extent.flush();
Những báo cáo này rất cần thiết để theo dõi xu hướng và xác định những điểm yếu trong phạm vi kiểm thử.
17) Nhà máy ở đâu? TestNG, và chúng hoạt động như thế nào?
Các nhà máy trong TestNG được sử dụng để tạo ra các thể hiện động của các lớp kiểm thửChúng cho phép khởi tạo các lớp có tham số trước khi chạy thử nghiệm.
Ví dụ:
public class FactoryExample {
private String browser;
public FactoryExample(String browser) {
this.browser = browser;
}
@Factory
public static Object[] factoryMethod() {
return new Object[] { new FactoryExample("Chrome"), new FactoryExample("Firefox") };
}
@Test
public void testBrowser() {
System.out.println("Running test on: " + browser);
}
}
Ưu điểm:
- cho phép tạo đối tượng tham số hóa.
- Lý tưởng cho thử nghiệm trên nhiều trình duyệt và thực thi đa môi trường.
Factory bổ trợ cho DataProvider khi bạn cần các cấu hình đối tượng khác nhau chứ không chỉ là sự thay đổi dữ liệu ở cấp độ phương thức.
18) Bạn có thể sử dụng các khẳng định như thế nào trong TestNG?
Các khẳng định được sử dụng để xác thực kết quả mong đợi so với kết quả thực tế trong các phương pháp kiểm thử.
Các loại khẳng định:
- Khẳng định cứng (lớp Asert):
Dừng quá trình thực thi kiểm thử ngay lập tức khi xảy ra lỗi. - Khẳng định mềm (lớp SoftAssert):
Tiếp tục thực thi ngay cả sau khi xảy ra lỗi, báo cáo tất cả các sự cố vào cuối quá trình. - Khi nào sử dụng:
- Hãy sử dụng những khẳng định chắc chắn cho xác thực quan trọng Đăng nhập thành công.
- Sử dụng các khẳng định mềm cho nhiều lần xác minh trong một phương pháp thử nghiệm duy nhất.
Assert.assertEquals(actual, expected); Assert.assertTrue(condition);
SoftAssert soft = new SoftAssert();
soft.assertEquals(actual, expected);
soft.assertAll();
19) Giải thích sự khác biệt giữa @BeforeMethod và @BeforeClass trong TestNG.
| Yếu tố | @BeforeMethod |
@BeforeClass |
|---|---|---|
| Thực hiện | Chạy trước mỗi phương pháp kiểm tra | Chạy một lân trươc đây bất kỳ phương thức nào trong lớp |
| Phạm vi | Theo phương pháp thử nghiệm | Mỗi lớp kiểm tra |
| Sử dụng phổ biến | Khởi tạo trình duyệt trước mỗi lần kiểm tra | Đang tải cấu hình hoặc thiết lập trình duyệt một lần |
Ví dụ:
@BeforeClass
public void setupClass() {
System.out.println("Executed once per class");
}
@BeforeMethod
public void setupMethod() {
System.out.println("Executed before each method");
}
Sử dụng @BeforeMethod khi mỗi bài kiểm tra cần một môi trường sạch sẽ, và @BeforeClass Dành cho các tác vụ khởi tạo phức tạp có thể tái sử dụng.
20) Làm thế nào TestNG Hỗ trợ phương pháp tiêm phụ thuộc (dependency injection) và các trường hợp sử dụng của nó là gì?
TestNG hỗ trợ tiêm phụ thuộc thông qua việc tích hợp sẵn việc chèn các đối tượng ngữ cảnh và cấu hình như ITestContext, XmlTest, hoặc là Method.
Ví dụ:
@Test
public void testContextExample(ITestContext context) {
System.out.println("Suite Name: " + context.getSuite().getName());
}
Trường hợp sử dụng:
- Lấy các tham số kiểm thử một cách động.
- Truy cập thông tin cấu hình như tên bộ lệnh hoặc cài đặt thực thi song song.
- Tăng cường tính linh hoạt của việc kiểm thử mà không cần mã hóa cứng các phụ thuộc.
Phương pháp tiêm phụ thuộc cho phép các nhà phát triển Viết các bài kiểm tra theo mô-đun và có khả năng nhận biết ngữ cảnh. Có khả năng thích ứng linh hoạt với những thay đổi của môi trường.
21) Sự khác biệt giữa @Factory và @DataProvider là gì? TestNG?
Cả hai @Factory và @DataProvider hỗ trợ việc tham số hóa, nhưng chúng hoạt động ở mức độ nhất định. các cấp độ khác nhau trong kiến trúc thử nghiệm.
| Tính năng | @Factory |
@DataProvider |
|---|---|---|
| Phạm vi | Cấp lớp | Mức độ phương pháp |
| Mục đích | Tạo nhiều thể hiện của một lớp với dữ liệu khác nhau. | Cung cấp dữ liệu cho một phương pháp thử nghiệm duy nhất. |
| Thực hiện | Thực thi toàn bộ lớp cho mỗi trường hợp. | Thực thi một phương thức nhiều lần. |
| Trường hợp sử dụng lý tưởng | Kiểm tra khả năng tương thích trình duyệt hoặc môi trường | Kiểm thử chức năng dựa trên dữ liệu |
Ví dụ:
- Nhà máy: Chạy toàn bộ lớp cho mỗi loại trình duyệt.
- Nhà cung cấp dữ liệu: Thực hiện một phương pháp kiểm thử với nhiều bộ dữ liệu khác nhau.
Sử dụng @Factory khi việc khởi tạo đối tượng tự nó thay đổi, và @DataProvider để thay đổi đầu vào chức năng trong cùng một thể hiện đối tượng.
22) Làm thế nào bạn có thể tự động thử lại các trường hợp kiểm thử thất bại trong TestNG?
TestNG cung cấp một cơ chế để chạy lại các trường hợp kiểm thử thất bại bằng cách sử dụng IRetryAnalyzer diệnngười dùng.
Ví dụ về cách triển khai:
public class RetryAnalyzer implements IRetryAnalyzer {
int count = 0;
int maxTry = 2;
public boolean retry(ITestResult result) {
if (count < maxTry) {
count++;
return true;
}
return false;
}
}
Cách sử dụng:
@Test(retryAnalyzer = RetryAnalyzer.class)
public void testLogin() {
Assert.fail("Intentional Failure");
}
Lợi ích:
- Giảm thiểu tình trạng không ổn định trong các quy trình CI.
- Xử lý các sự cố tạm thời về mạng hoặc môi trường.
Thực hành tốt nhất: Kết hợp logic thử lại với việc ghi nhật ký và chụp ảnh màn hình đầy đủ để gỡ lỗi các sự cố không thường xuyên.
23) ITestContext có công dụng gì trong TestNG?
ITestContext cung cấp thông tin theo ngữ cảnh Thông tin chi tiết về lần chạy thử nghiệm, bao gồm tên bộ kiểm thử, tên bài kiểm thử, thư mục đầu ra và các tham số.
Ví dụ:
@Test
public void contextExample(ITestContext context) {
System.out.println("Suite: " + context.getSuite().getName());
}
Các phương pháp chính:
getSuite()– Truy xuất thông tin cấp phòng.getName()– Trả về tên bài kiểm tra.setAttribute()/getAttribute()– Chia sẻ dữ liệu giữa các bài kiểm tra.
Nó cho phép chia sẻ dữ liệu giữa các phương pháp hoặc lớp kiểm thử và tạo điều kiện thuận lợi cho việc báo cáo và ghi nhật ký động.
24) Làm thế nào bạn có thể tạo ra sự phụ thuộc giữa các nhóm thử nghiệm trong TestNG?
Bạn có thể định nghĩa các mối quan hệ phụ thuộc giữa các nhóm bằng cách sử dụng dependsOnGroups thuộc tính trong @Test chú thích.
Ví dụ:
@Test(groups = "Login")
public void login() { ... }
@Test(dependsOnGroups = "Login")
public void verifyProfile() { ... }
Điều này đảm bảo rằng verifyProfile Nhóm chỉ chạy nếu tất cả các bài kiểm tra trong Login Nhóm đã vượt qua thành công.
Nó đặc biệt hữu ích trong Thử nghiệm hội nhập, trong đó các mô-đun phụ thuộc vào việc thực thi thành công của các mô-đun khác (ví dụ: quy trình đăng nhập → hồ sơ → đăng xuất).
25) Làm thế nào bạn có thể bỏ qua một số phương pháp kiểm thử nhất định trong một TestNG Tệp XML?
Bạn có thể rõ ràng loại trừ các phương pháp bên trong một lớp trong tệp bộ XML bằng cách sử dụng <exclude> thẻ.
Ví dụ:
<class name="com.test.LoginTests">
<methods>
<exclude name="verifyLogout"/>
</methods>
</class>
Điều này cho phép người kiểm thử tạm thời vô hiệu hóa các phương pháp cụ thể mà không sửa đổi Java Mã nguồn — hữu ích trong các bộ ứng dụng lớn, nơi cần tích hợp hoặc loại trừ linh hoạt dựa trên chu kỳ phát hành hoặc ưu tiên sprint.
26) Làm thế nào có thể TestNG được tích hợp với Selenium Trình điều khiển Web?
TestNG và Selenium Tạo nên một sự kết hợp mạnh mẽ cho việc tự động hóa giao diện người dùng.
Một thiết lập tích hợp điển hình bao gồm việc tổ chức các bài kiểm tra bằng cách sử dụng chú thích, quản lý thiết lập/gỡ bỏ và chạy các bài kiểm tra thông qua XML hoặc các công cụ CI.
Ví dụ:
@BeforeMethod
public void setup() {
driver = new ChromeDriver();
}
@Test
public void verifyTitle() {
driver.get("https://example.com");
Assert.assertEquals(driver.getTitle(), "Example Domain");
}
@AfterMethod
public void teardown() {
driver.quit();
}
Lợi ích tích hợp:
- cho phép kiểm thử trình duyệt song song.
- Đơn giản hóa phân nhóm và báo cáo thử nghiệm.
- Hoạt động liền mạch với Đường ống CI / CD Tương tự như Jenkins hoặc GitHub Actions.
27) Một số cách thực hành tốt nhất khi sử dụng là gì? TestNG trong các khuôn khổ tự động hóa quy mô lớn?
Thực hành tốt nhất:
- Sử dụng DescriptĐặt tên: Đặt tên các bài kiểm tra dựa trên hành vi, chứ không phải dựa trên cách triển khai.
- Tận dụng nhóm đòn bẩy: Tạo các nhóm kiểm thử logic (Kiểm thử khói, Kiểm thử hồi quy).
- Tránh mã hóa cứng: Sử dụng các tham số hoặc tệp thuộc tính cho dữ liệu kiểm thử.
- Giảm thiểu sự phụ thuộc: Hãy cố gắng giữ cho các trường hợp kiểm thử độc lập với nhau bất cứ khi nào có thể.
- Tập trung cấu hình: Sử dụng
testng.xmlđể thiết lập phòng. - Tích hợp báo cáo: Sử dụng trình lắng nghe hoặc các công cụ của bên thứ ba như ExtentReports.
- Hãy sử dụng logic thử lại một cách thận trọng: Tránh che giấu những khuyết điểm thực sự.
Tuân thủ những điều này đảm bảo khả năng mở rộng, khả năng bảo trì và khả năng đọc hiểu trong tự động hóa cấp doanh nghiệp.
28) Sự khác biệt giữa @BeforeTest và @BeforeSuite là gì? TestNG?
| Tính năng | @BeforeTest |
@BeforeSuite |
|---|---|---|
| Phạm vi | Chạy trước mỗi <test> thẻ trong XML |
Chạy một lần trước khi toàn bộ bộ phim được phát. |
| Tần số | Nhiều lần (nếu có) <test> khối) |
Chỉ được sử dụng một lần cho mỗi phòng. |
| Sử dụng phổ biến | Khởi tạo cấu hình cấp độ kiểm thử | Thiết lập các nguồn lực toàn cầu |
Ví dụ:
@BeforeSuite
public void setupSuite() {
System.out.println("Global setup for suite.");
}
@BeforeTest
public void setupTest() {
System.out.println("Setup for each <test> tag.");
}
Sử dụng @BeforeSuite cho cấu hình toàn cầu (ví dụ: kết nối cơ sở dữ liệu) và @BeforeTest cho Khởi tạo dành riêng cho bài kiểm tra.
29) Có thể TestNG Có thể dùng để kiểm thử API không? Bằng cách nào?
Vâng. TestNG có thể được sử dụng hiệu quả cho Thử nghiệm API bằng cách tích hợp với các thư viện máy khách HTTP như Hãy yên tâm or HttpClient.
Ví dụ:
@Test
public void verifyApiResponse() {
Response response = RestAssured.get("https://api.example.com/users");
Assert.assertEquals(response.getStatusCode(), 200);
}
Ưu điểm:
- cho phép xác thực dựa trên khẳng định các phản hồi.
- Hỗ trợ tham số hóa và thử nghiệm dựa trên dữ liệu cho nhiều điểm cuối.
- Tạo báo cáo có cấu trúc Dùng để xác thực API REST.
Bằng cách phối hợp TestNG Với RestAssured, người kiểm thử có thể duy trì một khung tự động hóa thống nhất cho cả kiểm thử giao diện người dùng (UI) và API.
30) Làm thế nào để truyền tham số từ dòng lệnh? TestNG?
Bạn có thể ghi đè các tham số XML trong thời gian chạy bằng cách truyền các thuộc tính hệ thống bằng cách sử dụng -D cờ.
Ví dụ lệnh:
mvn test -Dbrowser=chrome -Denv=staging
Ví dụ về mã:
@Parameters("browser")
@Test
public void launch(@Optional("firefox") String browser) {
System.out.println("Running on: " + browser);
}
Điều này cho phép lựa chọn môi trường năng động Trong các quy trình CI/CD mà không cần thay đổi tệp cấu hình, giúp tăng tính linh hoạt khi kiểm thử.
31) Làm thế nào bạn có thể kiểm soát thứ tự thực thi kiểm thử trong TestNG mà không cần sử dụng thứ tự ưu tiên?
Thay vì sử dụng priority, TestNG cho phép kiểm soát thông qua phụ thuộc và Thứ tự phương thức XML.
Phương pháp:
- Sử dụng
dependsOnMethods: - Sử dụng chuỗi phương thức XML:
@Test
public void login() { ... }
@Test(dependsOnMethods = "login")
public void verifyDashboard() { ... }
<classes>
<class name="com.test.LoginTests">
<methods>
<include name="login"/>
<include name="verifyDashboard"/>
</methods>
</class>
</classes>
Thực hành tốt nhất: Nên ưu tiên các mối quan hệ phụ thuộc logic cho các luồng phức tạp thay vì các mức độ ưu tiên tĩnh, đảm bảo bộ kiểm thử mạnh mẽ và dễ bảo trì.
32) Làm thế nào bạn có thể thực thi các phương pháp kiểm thử cụ thể từ dòng lệnh trong TestNG?
TestNG cho phép thực thi kiểm thử ở cấp phương thức Trực tiếp từ dòng lệnh bằng cách sử dụng cấu hình XML hoặc Maven Surefire.
Phương án 1: Sử dụng tệp XML
<class name="com.test.LoginTests">
<methods>
<include name="verifyLogin"/>
</methods>
</class>
Phương án 2: Lệnh Maven
mvn test -Dtest=com.test.LoginTests#verifyLogin
Cách tiếp cận này cho phép thực thi có chọn lọc, hữu ích cho việc gỡ lỗi các phương thức riêng lẻ hoặc xác thực các chức năng quan trọng trong quá trình biên dịch nhanh.
33) Làm thế nào để tham số hóa các bài kiểm tra bằng cách sử dụng tệp Excel bên ngoài? TestNG?
Việc tham số hóa bằng Excel rất phổ biến trong các framework hướng dữ liệu, nơi dữ liệu kiểm thử thay đổi thường xuyên.
Các bước thực hiện:
- Sử dụng POI của Apache or JExcel Đọc dữ liệu Excel.
- Đưa nó vào
@DataProviderphương pháp.
Ví dụ:
@DataProvider(name = "excelData")
public Object[][] readExcel() throws Exception {
FileInputStream fis = new FileInputStream("data.xlsx");
XSSFWorkbook wb = new XSSFWorkbook(fis);
XSSFSheet sheet = wb.getSheetAt(0);
Object[][] data = new Object[sheet.getLastRowNum()][2];
for (int i = 0; i < sheet.getLastRowNum(); i++) {
data[i][0] = sheet.getRow(i + 1).getCell(0).getStringCellValue();
data[i][1] = sheet.getRow(i + 1).getCell(1).getStringCellValue();
}
return data;
}
Điều này cho phép chạy cùng một phương pháp kiểm thử với nhiều bộ dữ liệu thực tế khác nhau từ Excel, tăng tính linh hoạt và phạm vi bao phủ.
34) Làm thế nào bạn có thể chạy TestNG Kiểm thử trong Jenkins hay các pipeline CI/CD?
TestNG tích hợp liền mạch với Jenkins, CI GitLab, hoặc là Tác vụ GitHub thông qua Maven hoặc Gradle xây dựng.
Các bước trong Jenkins:
- đặt Plugin tích hợp Maven.
- Tạo ra một Công việc tự do hoặc theo dây chuyền.
- Thêm
mvn clean testnhư một bước xây dựng. - Sau khi biên dịch xong, hãy cấu hình báo cáo HTML:
- Thư mục báo cáo:
test-output - Tệp chỉ mục:
index.html
- Thư mục báo cáo:
Lợi ích:
- Cho phép thực hiện kiểm thử hồi quy tự động.
- Cung cấp các lần chạy thử nghiệm theo lịch trình và theo dõi xu hướng.
- Đảm bảo việc thực thi kiểm thử nhất quán trên các môi trường khác nhau.
35) Mục đích của @Parameters là gì và nó khác với @Optional như thế nào?
Cả hai loại chú thích đều liên quan đến việc tham số hóa nhưng phục vụ các mục đích khác nhau.
| Tính năng | @Parameters |
@Optional |
|---|---|---|
| Mục đích | Truyền các tham số từ tệp XML | Cung cấp giá trị mặc định nếu tham số bị thiếu. |
| Tờ khai | Được sử dụng với XML <parameter> |
Được sử dụng bên trong phương pháp thử nghiệm |
| Hành vi | Báo lỗi nếu giá trị bị thiếu. | Sử dụng giá trị dự phòng |
Ví dụ:
@Test
@Parameters("browser")
public void runTest(@Optional("chrome") String browser) {
System.out.println("Running on: " + browser);
}
Sử dụng @Optional đảm bảo kiểm tra độ ổn định khi cấu hình XML không đầy đủ.
36) Bạn xử lý các phụ thuộc kiểm thử giữa các lớp khác nhau như thế nào? TestNG?
Để tạo ra các mối quan hệ phụ thuộc giữa các lớp, TestNG cho phép sử dụng dependsOnGroups thuộc tính.
Ví dụ:
@Test(groups = "Login")
public void loginTest() { ... }
@Test(groups = "Dashboard", dependsOnGroups = "Login")
public void dashboardTest() { ... }
Cách tiếp cận này giúp quản lý phụ thuộc đa mô-đun trong đó mỗi lớp đại diện cho một mô-đun (Đăng nhập, Bảng điều khiển, Thanh toán, v.v.).
Nó đảm bảo rằng các mô-đun phụ thuộc chỉ được thực thi nếu các bài kiểm tra điều kiện tiên quyết thành công, duy trì tính toàn vẹn của bài kiểm tra.
37) Lỗi cấu hình là gì trong TestNGVà chúng ta có thể xử lý chúng như thế nào?
Lỗi cấu hình xảy ra khi các phương thức thiết lập hoặc gỡ bỏ được chú thích bằng @Before* or @After* Thất bại.
Họ có thể gây ra các bài kiểm tra phụ thuộc cần bỏ qua, ngay cả khi các xét nghiệm đó cho kết quả chính xác.
Nguyên nhân phổ biến:
- Khởi tạo WebDriver không chính xác.
- Các vấn đề về thiết lập cơ sở dữ liệu hoặc môi trường.
- Lỗi cấu hình tham số.
Giải pháp:
- Sử dụng cố gắng bắt các khối trong phương thức thiết lập.
- Rắc bột
alwaysRun = trueĐể đảm bảo quá trình dọn dẹp vẫn tiếp tục diễn ra bất chấp các sự cố.
Ví dụ:
@BeforeMethod(alwaysRun = true)
public void setup() {
// Setup logic
}
Điều này đảm bảo các phương pháp gỡ bỏ của bạn vẫn được thực thi, duy trì sự ổn định của môi trường thử nghiệm.
38) Thuộc tính invocationCount và threadPoolSize có công dụng gì trong TestNG?
Những thuộc tính này cho phép thực thi kiểm thử lặp đi lặp lại và song song bằng cùng một phương pháp.
Ví dụ:
@Test(invocationCount = 5, threadPoolSize = 2)
public void loadTest() {
System.out.println("Running load test...");
}
| đặc tính | Mô tả Chi tiết |
|---|---|
invocationCount |
Số lần một phương thức được thực thi |
threadPoolSize |
Số lượng luồng đồng thời |
Ca sử dụng: Kiểm tra hiệu năng, xác minh tính ổn định hoặc tái hiện hành vi không ổn định trong nhiều lần chạy.
39) Làm thế nào để chỉ chạy các trường hợp kiểm thử thất bại? TestNG?
Sau khi chạy hết dãy phòng, TestNG tạo ra một tệp có tên testng-failed.xml trong test-output thư mục.
Bạn chỉ có thể chạy lại các bài kiểm tra thất bại bằng cách thực hiện lệnh sau:
java -cp testng.jar org.testng.TestNG test-output/testng-failed.xml
Ưu điểm:
- Tiết kiệm thời gian bằng cách bỏ qua các bài kiểm tra thành công.
- Hỗ trợ gỡ lỗi trong các bộ phần mềm lớn.
- Thường được sử dụng trong các quy trình CI để kiểm tra lại nhanh chóng.
Bạn cũng có thể tích hợp điều này với Jenkins bằng cách sử dụng một tập lệnh sau khi xây dựng để chạy lại.
40) Một số hạn chế của là gì? TestNG và làm sao để giảm thiểu chúng?
Mặc dù có độ bền cao, TestNG Có một vài hạn chế.
| Giới hạn | Chiến lược giảm thiểu |
|---|---|
| Độ phức tạp của cấu hình XML | Sử dụng cấu hình và trình tạo dựa trên chú thích |
| Báo cáo gốc hạn chế | Tích hợp ExtentReports hoặc Allure |
| Không có chức năng kiểm soát việc thử lại tích hợp sẵn. | Thực hiện IRetryAnalyzer |
| Các vấn đề về an toàn luồng trong các lần chạy song song | Sử dụng các phiên bản WebDriver cục bộ theo luồng. |
| Đường cong học tập cho người mới bắt đầu | Duy trì cấu trúc dự án dựa trên mẫu. |
Với thiết kế khung phần mềm phù hợp và các phương pháp thực hành tốt nhất, những hạn chế này có thể được giảm thiểu, đảm bảo các giải pháp tự động hóa ổn định và dễ bảo trì.
41) Bạn sử dụng trình lắng nghe như thế nào để ghi nhật ký và chụp ảnh màn hình? Selenium-TestNG?
Người nghe ở TestNG Giúp giám sát quá trình thực thi kiểm thử và thực hiện các thao tác như ghi nhật ký, chụp ảnh màn hình hoặc báo cáo kết quả một cách linh hoạt.
Ví dụ về cách triển khai:
public class ScreenshotListener implements ITestListener {
@Override
public void onTestFailure(ITestResult result) {
WebDriver driver = ((BaseTest) result.getInstance()).getDriver();
File src = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
FileUtils.copyFile(src, new File("screenshots/" + result.getName() + ".png"));
}
}
Cách sử dụng:
@Listeners(ScreenshotListener.class)
public class LoginTests extends BaseTest { ... }
Lợi ích:
- Tự động ghi nhận các lỗi.
- Cải thiện khả năng gỡ lỗi thông qua bằng chứng trực quan.
- Giảm thiểu công sức thủ công trong việc duy trì nhật ký.
Kỹ thuật này rất quan trọng trong các quy trình tự động hóa CI/CD, đặc biệt là khi chẩn đoán các bản dựng thất bại từ xa.
42) Sự khác biệt giữa IReporter và ITestListener là gì? TestNG?
| Tính năng | IReporter |
ITestListener |
|---|---|---|
| Mục đích | Tạo báo cáo tùy chỉnh sau khi thực thi kiểm thử. | Theo dõi và phản hồi các sự kiện kiểm thử trong quá trình thực thi. |
| sự thỉnh nguyện | Sau khi hoàn tất tất cả các bài kiểm tra | Trong suốt vòng đời kiểm thử (bắt đầu, thành công, thất bại) |
| Đầu ra | Báo cáo HTML/XML/JSON | Tệp nhật ký, ảnh chụp màn hình, bảng điều khiển trực tiếp |
| Sử dụng phổ biến | Tích hợp ExtentReports và Allure | Ghi nhật ký, xử lý lỗi, cơ chế thử lại |
Ví dụ:
- Sử dụng
IReporterđể xây dựng báo cáo toàn diện sau khi hoàn thành bài kiểm tra. - Sử dụng
ITestListenercho ghi nhật ký thời gian thực hoặc chụp ảnh màn hình.
Họ cũng có thể kết hợp Xây dựng các hệ thống phân tích tự động hóa từ đầu đến cuối.
43) Làm thế nào để thực hiện kiểm thử tương thích trình duyệt? TestNG Cấu hình XML?
Kiểm thử tương thích đa trình duyệt đảm bảo rằng cùng một chức năng hoạt động trên các trình duyệt khác nhau.
Cấu hình ví dụ:
<suite name="CrossBrowserSuite" parallel="tests">
<test name="ChromeTest">
<parameter name="browser" value="chrome"/>
<classes><class name="com.test.LoginTest"/></classes>
</test>
<test name="FirefoxTest">
<parameter name="browser" value="firefox"/>
<classes><class name="com.test.LoginTest"/></classes>
</test>
</suite>
Java Mã Code:
@Parameters("browser")
@BeforeClass
public void setup(String browser) {
if(browser.equalsIgnoreCase("chrome"))
driver = new ChromeDriver();
else if(browser.equalsIgnoreCase("firefox"))
driver = new FirefoxDriver();
}
Cách tiếp cận này cho phép thực thi song song, đa trình duyệt, đẩy nhanh phạm vi kiểm thử trên nhiều nền tảng.
44) Bạn tích hợp như thế nào? TestNG với Docker hoặc Selenium Lưới?
TestNG tích hợp liền mạch với Đóng gói bằng Docker Selenium lưới để cho phép kiểm thử song song phân tán.
Bước sau:
- Thiết lập Selenium Grid trong Docker sử dụng chính thức Selenium hình ảnh:
docker run -d -p 4444:4444 --name selenium-grid selenium/standalone-chrome
- Cập nhật TestNG thiết lập:
- Chạy bộ kiểm thử của bạn thông qua Jenkins hoặc pipeline CI.
DesiredCapabilities caps = new DesiredCapabilities();
caps.setBrowserName("chrome");
driver = new RemoteWebDriver(new URL("http://localhost:4444/wd/hub"), caps);
Lợi ích:
- cho phép kiểm thử song song có khả năng mở rộng.
- Giảm thiểu chi phí thiết lập môi trường.
- Cung cấp thực thi kiểm thử nhất quán trên các container phân tán.
45) Sự khác biệt giữa việc thực thi song song ở cấp độ bộ kiểm thử, kiểm thử và phương thức là gì? TestNG?
| Cấp | Thuộc tính song song | Hành vi thực thi |
|---|---|---|
| Suite | parallel="suites" |
Thực thi nhiều bộ kiểm thử đồng thời. |
| Thử nghiệm | parallel="tests" |
Chạy <test> các khối đồng thời |
| Lớp | parallel="classes" |
Chạy song song các lớp kiểm thử. |
| Phương pháp | parallel="methods" |
Thực thi song song các phương pháp kiểm thử riêng lẻ. |
Ví dụ:
<suite name="ParallelTests" parallel="methods" thread-count="3">
<test name="SampleTest">
<classes><class name="com.test.ParallelExample"/></classes>
</test>
</suite>
Thực hành tốt nhất:Sử dụng parallel="classes" để đảm bảo sự ổn định trong Selenium các bài kiểm tra để tránh xung đột trình điều khiển dùng chung.
46) Làm thế nào bạn có thể chia sẻ dữ liệu giữa các bài kiểm tra mà không sử dụng biến toàn cục? TestNG?
TestNG cung cấp ITestContext và tiêm phụ thuộc Chia sẻ dữ liệu một cách linh hoạt.
Ví dụ:
@Test
public void storeData(ITestContext context) {
context.setAttribute("token", "abc123");
}
@Test(dependsOnMethods = "storeData")
public void useData(ITestContext context) {
String token = (String) context.getAttribute("token");
System.out.println("Using token: " + token);
}
Điều này giúp tránh sử dụng các biến tĩnh, duy trì tính an toàn của luồng và đảm bảo... cách ly dữ liệu giữa các bài kiểm tra.
47) Làm thế nào để bạn ghi nhận và lưu nhật ký các bài kiểm tra bị bỏ qua? TestNG?
Bạn có thể ghi lại các bài kiểm tra bị bỏ qua bằng cách sử dụng onTestSkipped() trong ITestListener diệnngười dùng.
Ví dụ:
@Override
public void onTestSkipped(ITestResult result) {
System.out.println("Skipped Test: " + result.getName());
}
Lý do bỏ qua:
- Lỗi kiểm thử phụ thuộc.
- Bỏ qua có điều kiện thông qua
SkipException. - Môi trường không khả dụng.
Thực hành tốt nhất:
Ghi lại lý do bỏ qua và dấu vết ngăn xếp để dễ dàng truy vết trong báo cáo hoặc bảng điều khiển CI.
48) Giải thích cách tham số hóa các bài kiểm tra API REST bằng cách sử dụng TestNG và Hãy Yên Tâm.
TestNG'S @DataProvider tích hợp một cách trang nhã với Hãy yên tâm để tham số hóa API.
Ví dụ:
@DataProvider(name = "apiData")
public Object[][] apiData() {
return new Object[][] {
{"https://api.example.com/users/1"},
{"https://api.example.com/users/2"}
};
}
@Test(dataProvider = "apiData")
public void testApi(String url) {
Response response = RestAssured.get(url);
Assert.assertEquals(response.getStatusCode(), 200);
}
Ưu điểm:
- Thực thi cùng một lệnh gọi API cho nhiều điểm cuối hoặc dữ liệu đầu vào khác nhau.
- Giúp đơn giản hóa việc kiểm thử hồi quy cho các API có tập dữ liệu đầu vào khác nhau.
- Tích hợp liền mạch với các công cụ và báo cáo CI.
49) Làm thế nào để tạo chú thích tùy chỉnh trong TestNG Để có các mẫu kiểm thử có thể tái sử dụng?
Các chú thích tùy chỉnh có thể chuẩn hóa cấu hình kiểm thử hoặc xác thực lặp đi lặp lại.
Ví dụ:
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface SmokeTest {
String description() default "Smoke Test";
}
Cách sử dụng:
@SmokeTest(description="Validating Login Functionality")
@Test
public void loginTest() { ... }
Kết hợp với cơ chế phản chiếu, bạn có thể đọc động các chú thích này để nhóm các bài kiểm tra hoặc điều khiển việc thực thi có điều kiện.
Kỹ thuật này được sử dụng rộng rãi trong lập trình siêu khung Xây dựng các bài kiểm thử tự ghi lại tài liệu.
50) Bạn có thể kết hợp như thế nào? Cucumber và TestNG Đối với các khung kiểm thử lai?
TestNG có thể hoạt động như người chạy thử nghiệm cho Cucumber Các kịch bản BDD, cung cấp khả năng báo cáo và xử lý song song mạnh mẽ.
Ví dụ về người chạy:
@CucumberOptions(
features = "src/test/resources/features",
glue = "stepDefinitions",
plugin = {"pretty", "html:target/cucumber-report.html"}
)
public class RunCucumberTest extends AbstractTestNGCucumberTests { }
Ưu điểm:
- Đòn bẩy TestNG'S chú thích, người nghe và báo cáo.
- Hỗ trợ thực thi tính năng song song.
- Tích hợp với Dân dụ và Mức độ báo cáo dễ dàng.
Phương pháp kết hợp này kết hợp Khả năng đọc hiểu BDD với TestNG linh hoạtLý tưởng cho các hệ thống cấp doanh nghiệp.
🔍 Đầu trang TestNG Câu hỏi phỏng vấn với các tình huống thực tế và phản hồi chiến lược
Dưới đây là 10 ví dụ thực tế, có liên quan đến lĩnh vực này. TestNG Các câu hỏi phỏng vấn cùng với những kỳ vọng rõ ràng và các ví dụ câu trả lời thuyết phục.
1) Bạn có thể giải thích những ưu điểm chính của việc sử dụng... TestNG so với JUnit?
Mong đợi từ ứng viên: Thể hiện sự hiểu biết về TestNGCác tính năng nâng cao của nó và lý do tại sao nó thường được ưa chuộng cho tự động hóa doanh nghiệp.
Câu trả lời ví dụ: "TestNG Cung cấp một số ưu điểm như cấu hình kiểm thử linh hoạt, hỗ trợ thực thi song song, phương pháp kiểm thử phụ thuộc, kiểm thử dựa trên dữ liệu với DataProviders và báo cáo tích hợp. Những khả năng này làm cho TestNG Mạnh mẽ hơn cho các khung tự động hóa phức tạp đòi hỏi khả năng mở rộng.”
2) Bạn sử dụng như thế nào TestNG Sử dụng chú thích để kiểm soát luồng thực thi kiểm thử?
Mong đợi từ ứng viên: Hiểu biết về mục đích và thứ tự chú thích.
Câu trả lời ví dụ: "TestNG Cung cấp các chú thích như `@BeforeSuite`, `@BeforeClass`, `@BeforeMethod`, `@Test` và các chú thích dọn dẹp tương ứng. Chúng cho phép tổ chức có cấu trúc việc thiết lập và dọn dẹp kiểm thử. Ví dụ, `@BeforeMethod` được thực thi trước mỗi phương thức kiểm thử, điều này hữu ích cho việc khởi tạo trạng thái trình duyệt.
3) Mô tả một dự án tự động hóa đầy thách thức trong đó TestNG đã đóng một vai trò quan trọng.
Mong đợi từ ứng viên: Kinh nghiệm thực tế trong các dự án và khả năng trình bày rõ ràng các giải pháp vấn đề.
Câu trả lời ví dụ: “Trong vai trò trước đây, tôi đã làm việc trong một dự án yêu cầu kiểm thử hồi quy chuyên sâu trên nhiều môi trường khác nhau. TestNGCác tính năng thực thi song song và nhóm của phần mềm cho phép nhóm chạy các bộ kiểm thử quan trọng cùng lúc, giảm đáng kể thời gian thực thi trong khi vẫn duy trì độ tin cậy.”
4) Làm thế nào TestNG Làm việc nhóm giúp tổ chức và thực hiện các bài kiểm tra một cách hiệu quả hơn?
Mong đợi từ ứng viên: Hiểu biết về việc phân nhóm, bao gồm cả các cơ chế bao gồm/loại trừ.
Câu trả lời ví dụ: “Các nhóm trong TestNG Cho phép phân loại các trường hợp kiểm thử như kiểm thử nhanh, kiểm thử hồi quy và kiểm thử tích hợp. Bằng cách sử dụng testng.xml, tôi có thể chọn lọc chạy các nhóm, loại trừ các bài kiểm thử không ổn định và quản lý các bộ kiểm thử khác nhau mà không cần sửa đổi mã nguồn.”
5) Mô tả một tình huống mà bạn phải gỡ lỗi khi gặp sự cố. TestNG kiểm tra. Phương pháp của bạn là gì?
Mong đợi từ ứng viên: Kỹ năng tư duy phản biện và giải quyết vấn đề.
Câu trả lời ví dụ: “Ở vị trí trước đây, tôi đã gặp phải một loạt các vấn đề phát sinh. TestNG Các bài kiểm tra dường như vượt qua trên máy cục bộ nhưng lại thất bại trên hệ thống CI. Tôi đã bật tính năng ghi nhật ký chi tiết, xem xét thứ tự thực thi và phát hiện ra rằng một tài nguyên dùng chung không được thiết lập lại giữa các lần kiểm tra. Sau đó, tôi đã triển khai các bước dọn dẹp thích hợp bằng cách sử dụng `@AfterMethod` để đảm bảo sự cô lập của các bài kiểm tra.”
6) Bạn triển khai kiểm thử dựa trên dữ liệu như thế nào bằng cách sử dụng TestNG?
Mong đợi từ ứng viên: Hiểu biết về các nhà cung cấp dữ liệu và các trường hợp sử dụng.
Câu trả lời ví dụ: “Tôi tạo một phương thức `@DataProvider` trả về dữ liệu dưới dạng mảng đối tượng, sau đó liên kết nó với một phương thức `@Test` bằng thuộc tính `dataProvider`. Điều này cho phép thực hiện nhiều lần cùng một bài kiểm tra với các bộ dữ liệu đầu vào khác nhau, rất hữu ích cho việc xác thực các biểu mẫu đã gửi hoặc các biến thể của dữ liệu API.”
7) Bạn quản lý các phụ thuộc kiểm thử như thế nào trong TestNG?
Mong đợi từ ứng viên: Sử dụng đúng cách `dependsOnMethods` hoặc `dependsOnGroups`.
Câu trả lời ví dụ: "TestNG Cho phép kiểm thử các phụ thuộc thông qua thuộc tính `dependsOnMethods` và `dependsOnGroups`. Tôi sử dụng các phụ thuộc khi một bài kiểm thử chỉ được thực thi sau khi một bài kiểm thử khác hoàn thành thành công, chẳng hạn như xác minh đơn hàng chỉ sau khi đã tạo đơn hàng đó.”
8) Hãy mô tả cách bạn đã sử dụng TestNG với các công cụ tích hợp liên tục.
Mong đợi từ ứng viên: Kinh nghiệm thực tế về quy trình tự động hóa.
Câu trả lời ví dụ: “Ở công việc trước đây, tôi đã tích hợp TestNG Sử dụng Jenkins bằng cách cấu hình bản dựng Maven để tạo ra TestNG Các báo cáo định dạng HTML và XML. Sau đó, Jenkins lưu trữ các báo cáo và hiển thị kết quả sau mỗi chu kỳ xây dựng. Sự tích hợp này giúp nhóm nhanh chóng theo dõi các lỗi và duy trì tính ổn định của bản phát hành.”
9) Hãy kể về một lần bạn phải làm việc dưới áp lực thời gian gấp rút trong khi quản lý nhiều tác vụ tự động hóa cùng lúc.
Mong đợi từ ứng viên: Kỹ năng quản lý thời gian và khả năng ưu tiên công việc.
Câu trả lời ví dụ: “Trong công việc trước đây, tôi cần cập nhật những thứ hiện có.” TestNG Tôi đã sử dụng các bộ kiểm thử hiện có, đồng thời tạo ra các bộ kiểm thử mới cho bản phát hành sắp tới. Tôi ưu tiên các nhiệm vụ dựa trên tác động đến hoạt động kinh doanh, tự động hóa các khu vực có rủi ro cao nhất trước tiên và sử dụng... TestNG Việc nhóm các phần đã hoàn thành lại để dễ dàng xem xét sớm hơn đảm bảo giao hàng đúng thời hạn mà không ảnh hưởng đến chất lượng.”
10) Bạn sẽ thiết kế một hệ thống có khả năng mở rộng như thế nào? TestNG Khung sườn cho một ứng dụng quy mô lớn?
Mong đợi từ ứng viên: ArchiHiểu biết về kiến trúc, các mô hình và các phương pháp tốt nhất.
Câu trả lời ví dụ: “Tôi sẽ thiết kế một khung cấu trúc mô-đun sử dụng Page Object Model, tích hợp TestNG Tôi sẽ sử dụng DataProviders cho việc quản lý thực thi và các kịch bản dựa trên dữ liệu. Tôi cũng sẽ cấu hình thực thi song song, tập trung hóa các tiện ích và tách biệt các thiết lập cấu hình để khung phần mềm vẫn có khả năng mở rộng và dễ bảo trì khi ứng dụng phát triển.”
