我们如何在使用数据提供者时动态命名测试用例
How we can name the test case dynamically when using data provider
我们如何在使用数据提供程序时动态命名测试用例,例如:
如果我有一个登录测试用例,我想为不同的用户名和密码使用数据提供程序,其中每个用户代表一个国家,我将如何获得测试失败或通过但测试用例名称不同的输出例如我应该这样:
loginTestUSusername pass
loginTestINusername pass
loginTestJPuserName pass
注意方法名是loginTest,后面的USusername,INusername,JPusername
是数据提供者的测试数据
供参考。
- 在您的数据提供程序中使用
"USusername"
等字符串(例如示例中的 "TestName1"
和 "TestName2"
)以及其他一些测试数据(例如示例中的那些数字) .将此名称作为参数传递给您的 @Factory
注释方法。
- 进行测试 class 实施
ITest
。在 return 语句中使用测试名称变量。
- 您可以按照示例中的方式拆分它。
按照以下步骤操作:
步骤# 1:
在单独的文件中创建自定义注释(即:SetTestName.java)
@Retention(RetentionPolicy.RUNTIME)
public @interface SetTestName {
int idx() default 0;
}
步骤 # 2:
创建基础 class 实现 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);
}
}
步骤# 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");
}
就是这样。现在,您将在控制台中看到相应更改的测试名称。
按照下面的 link 进行查询。我希望,你可能会在这里得到你想要的答案:
http://biggerwrench.blogspot.com/2014/02/testng-dynamically-naming-tests-from.html
我们如何在使用数据提供程序时动态命名测试用例,例如:
如果我有一个登录测试用例,我想为不同的用户名和密码使用数据提供程序,其中每个用户代表一个国家,我将如何获得测试失败或通过但测试用例名称不同的输出例如我应该这样:
loginTestUSusername pass
loginTestINusername pass
loginTestJPuserName pass
注意方法名是loginTest,后面的USusername,INusername,JPusername
是数据提供者的测试数据
- 在您的数据提供程序中使用
"USusername"
等字符串(例如示例中的"TestName1"
和"TestName2"
)以及其他一些测试数据(例如示例中的那些数字) .将此名称作为参数传递给您的@Factory
注释方法。 - 进行测试 class 实施
ITest
。在 return 语句中使用测试名称变量。 - 您可以按照示例中的方式拆分它。
按照以下步骤操作:
步骤# 1:
在单独的文件中创建自定义注释(即:SetTestName.java)
@Retention(RetentionPolicy.RUNTIME)
public @interface SetTestName {
int idx() default 0;
}
步骤 # 2:
创建基础 class 实现 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);
}
}
步骤# 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");
}
就是这样。现在,您将在控制台中看到相应更改的测试名称。
按照下面的 link 进行查询。我希望,你可能会在这里得到你想要的答案:
http://biggerwrench.blogspot.com/2014/02/testng-dynamically-naming-tests-from.html