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

时间:2017-05-02 22:13:47

标签: java selenium testng dataprovider

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

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

loginTestUSusername pass
loginTestINusername pass
loginTestJPuserName pass

请注意,方法的名称是loginTest,附加的USusername,INusername,JPusername是来自数据提供者的测试数据

2 个答案:

答案 0 :(得分:3)

请按照以下步骤操作:

第1步:

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

@Retention(RetentionPolicy.RUNTIME)
public @interface SetTestName {
    int idx() default 0;
}

第2步:

创建一个实现 TestNG TestNameSetter.java )的 ITest 界面的基类。

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);
    }
}

第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");
 } 

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

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

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

答案 1 :(得分:0)

Example供参考。

  1. 在数据提供程序中使用"USusername"等字符串(例如示例中的"TestName1""TestName2")以及其他一些测试数据(例如示例中的数字)。将此名称作为参数传递给@Factory带注释的方法。
  2. 使测试类实现ITest。在return语句中使用test name变量。
  3. 您可以按照示例中的方式将其拆分。