2010-04-30 31 views
5

Tôi đang sử dụng TestNG để chạy các thử nghiệm dựa trên Selenium trong Java. Tôi có một loạt các bài kiểm tra lặp đi lặp lại. Nói chung, họ làm tất cả như nhau ngoại trừ tên thử nghiệm và một tham số.Làm thế nào để tạo các thử nghiệm với các tên khác nhau trong TestNG?

Tôi muốn tự động hóa thế hệ của nó. Tôi đã suy nghĩ về việc sử dụng nhà máy. Có cách nào để tạo thử nghiệm với tên khác không? Cách tiếp cận tốt nhất cho điều này là gì?

Đối với tôi bây giờ có một cái gì đó như dưới đây và tôi muốn tạo 10 thử nghiệm như LinkOfInterestIsActiveAfterClick

@Test(dependsOnGroups="loggedin") 
public class SmokeTest extends BrowserStartingStoping{ 

public void LinkOfInterestIsActiveAfterClick(){ 
     String link = "link_of_interest"; 
     browser.click("*",link); 
     Assert.assertTrue(browser.isLinkActive(link)); 
    } 

} 
  • bộ XML của tôi là tự động tạo ra từ mã Java.
  • Tên thử nghiệm rất quan trọng để ghi nhật ký hoạt động của liên kết nào và liên kết nào không hoạt động.
+0

thể trùng lặp của [tên cho các bài kiểm tra TestNG tạo động trong plugin Eclipse] (http://stackoverflow.com/questions/12257387/names-for-dynamically- create-testng-tests-in-eclipse-plugin) – Nathan

Trả lời

2

Vì vậy, tôi đã kết nối Nhà máy với DataProvider và các thuộc tính được sử dụng của ngữ cảnh.

@DataProvider(name = "DP1") 
public Object[][] createData() { 
    Object[][] retObjArr={ 
    {"Link1","link_to_page"}, 
    {"Link2","link_to_page"}, 
    return retObjArr; 
} 

@Test (dataProvider = "DP1") 
public void isActive(String name, String link){ 
    this.context.setAttribute("name", name); 
    browser.click(link); 
    Assert.assertTrue(browser.isLinkActive(link)); 
} 

Và trong Listener

public class MyListener extends TestListenerAdapter{ 
    @Override 
    public void onTestSuccess(ITestResult tr){ 
    log("+",tr); 
    } 
    //and similar 

    private void log(String string, ITestResult tr){ 
    List<ITestContext> k = this.getTestContexts(); 
    String testName = tr.getTestClass().getName();  
    for (ITestContext i: k) 
    { 
     if (i.getAttribute("name") != null) 
     logger.info(testName+"."+i.getAttribute("name")); 
    } 
    } 

} 
+0

Bạn có thể trình bày ở đây cách bạn sử dụng lớp Factory không? – djangofan

+0

@djangofan Xin lỗi, nhưng tôi không còn mã nữa. (đã trả lời hơn 4 năm trước) –

+0

Ok, tôi cũng có thể cho bạn biết rằng giải pháp bạn đăng là câu trả lời ở đây không thực sự hiệu quả. Bây giờ, nếu bạn thực sự cho thấy một Nhà máy tạo ra các lớp riêng biệt, thì tôi tin rằng nó sẽ hoạt động. Đặt tên thử nghiệm trên các thử nghiệm được tạo ra từ một DataProvider không hoạt động vì cá thể lớp chia sẻ tên thử nghiệm giữa nhiều cuộc gọi tham số của lớp. – djangofan

8

Yêu cầu lớp thử nghiệm của bạn triển khai org.testng.ITest và ghi đè getTestName() để trả lại tên bạn muốn.

Các vấn đề liên quan