Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何在使用数据提供程序时动态命名测试用例_Java_Selenium_Testng_Dataprovider - Fatal编程技术网

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

Java 如何在使用数据提供程序时动态命名测试用例,java,selenium,testng,dataprovider,Java,Selenium,Testng,Dataprovider,如何在使用数据提供程序时动态命名测试用例,例如: 如果我有一个登录测试用例,并且我希望为不同的用户名和密码使用数据提供程序,其中每个用户代表一个国家,我将如何使测试输出失败或通过,但使用不同的测试用例名称,例如,我应该这样做: loginTestUSusername pass loginTestINusername pass loginTestJPuserName pass 请注意,该方法的名称为loginTest,附加的USusername、INusername、JPusername是来自数

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

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

loginTestUSusername pass
loginTestINusername pass
loginTestJPuserName pass
请注意,该方法的名称为loginTest,附加的
USusername、INusername、JPusername
是来自数据提供程序的测试数据,以供参考

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

  • 按照以下步骤操作:

    第1步:

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

    第2步:

    创建一个基类,实现TestNGTestNameSetter.java)的ITest接口

    第三步:

    使用数据提供程序,如代码段中所示:

    @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");
     } 
    
    就这些。现在,您将在控制台中看到相应的测试名称更改

    请按照下面的链接进行查询。我希望你能在这里得到你想要的答案:


    非常感谢,它的工作和在我的html报告中显示为不同的测试用例
    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);
        }
    }
    
    @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");
     }