使用数据提供程序时如何动态命名测试用例

Ben*_*olf 5 java testng selenium dataprovider

使用数据提供者时我们如何动态命名测试用例,例如:

如果我有一个登录测试用例,并且我想对不同的用户名和密码使用数据提供程序,其中每个用户代表一个国家,我将如何使测试的输出失败或通过但具有不同的测试用例名称,例如我应该有像这样:

loginTestUSusername pass
loginTestINusername pass
loginTestJPuserName pass
Run Code Online (Sandbox Code Playgroud)

注意方法名是loginTest,后面USusername,INusername,JPusername是data provider的测试数据

opt*_*per 3

请按照以下步骤操作:

步骤1:

在单独的文件中创建自定义注释(即:SetTestName.java

@Retention(RetentionPolicy.RUNTIME)
public @interface SetTestName {
    int idx() default 0;
}
Run Code Online (Sandbox Code Playgroud)

第2步:

创建一个实现TestNG的ITest接口的基类( TestNameSetter.java )。

public class TestNameSetter implements ITest{
    private String newTestName = "";

    private void setTestName(String newTestName){
        this.newTestName = newTestName;
    }

    public String getTestName() {

        return newTestName;
    }


    @BeforeMethod(alwaysRun=true)
    public void getTheNameFromParemeters(Method method, Object [] parameters){
        SetTestName setTestName = method.getAnnotation(SetTestName.class);
        String testCaseName = (String) parameters[setTestName.idx()];
        setTestName(testCaseName);
    }
}
Run Code Online (Sandbox Code Playgroud)

步骤#3:

像代码片段中一样使用您的 DataProvider:

@DataProvider(name="userData")
 public Object[][] sampleDataProvider()
 {
  Object[][] data = {
    {"loginTestUS_Username","loginTestUSPass"}, 
    {"loginTestIN_Username","loginTestINPass"},
    {"loginTestJP_UserName","loginTestJPPass"}
  };

  return data;
 }



 @SetTestName(idx=0)
 @Test(dataProvider="userData")
 public void test1(String userName, String pass)
 {
     System.out.println("Testcase 1");
 }

 @SetTestName(idx=1)
 @Test(dataProvider="userData")
 public void test2(String userName, String pass)
 {
     System.out.println("Testcase 2");
 } 
Run Code Online (Sandbox Code Playgroud)

就这样。现在,您将在控制台中看到您的测试名称相应更改。

请点击下面的链接进行查询。我希望,您可以在这里得到您想要的答案:

http://biggerwrench.blogspot.com/2014/02/testng-dynamically-naming-tests-from.html