如何在我的测试方法中指定之前设置 dataProvider Name
How to set dataProvider Name before specifying in my test method
在我的测试方法中设置 dataProvider
名称之前,我正在尝试检查我将 运行 我的测试的环境。
public class AssignmentSOAPTest {
private static final String ctdataProvName=System.getProperty("env");
@BeforeClass
public void setUp() {
}
@Test(dataProvider = ctdataProvName, dataProviderClass CCCAssignmentSOAPDataProvider.class)
@Feature("FullCCCAssignment")
public void tc01FullCCCAssignment(int a,int b,int c) {
System.out.println("These are the number provided by Data Provider "+ a+"," +b+","+c);
}
}
在这种情况下,因为我的@Test 方法给我一个错误:属性值必须是常量。我发现这是因为我设置常量的方式不正确。在设置常量之前,我尝试了不同的方法来检查环境,但无法弄清楚。有办法吗?
我想在设置名称之前检查环境的原因是因为这样我的 testScript 中需要的 @Test
方法会更少。我有 4 个不同的环境以及 10 个不同的测试用例。不同环境的测试用例相同,但数据不同。
我的数据提供者 class 看起来像这样(没有添加所有环境,数据会有所不同):
@DataProvider (name = "ct-environment-data-provider")
public Object[][] ctDPMethod (Method m){
switch (m.getName()) {
case "tc01FullCCCAssignment":
return new Object[][] {{2, 3 , 5}};
case "minimumAssignment":
return new Object[][] {{2, 3, -1}};
case "updateAssignment":
return new Object[][] {{1, 3, -1}};
case "cancelAssignment":
return new Object[][] {{3, 3, -1}};
case "saveAssignment":
return new Object[][] {{8, 3, -1}};
case "openShopAssignment":
return new Object[][] {{5, 3, -1}};
case "casualtyAssignment":
return new Object[][] {{6, 3, -1}};
}
return null;
}
@DataProvider (name = "int-environment-data-provider")
public Object[][] intDPMethod (Method m){
switch (m.getName()) {
case "tc01FullCCCAssignment":
return new Object[][] {{1, 1 , 5}};
case "minimumAssignment":
return new Object[][] {{2, 3, -1}};
case "updateAssignment":
return new Object[][] {{1, 3, -1}};
case "cancelAssignment":
return new Object[][] {{3, 3, -1}};
case "saveAssignment":
return new Object[][] {{8, 3, -1}};
case "openShopAssignment":
return new Object[][] {{5, 3, -1}};
case "casualtyAssignment":
return new Object[][] {{6, 3, -1}};
}
}
您可以使用 IAnnotationTransformer
class 根据 System.getProperty
设置数据提供者名称。注释转换器可用于修改 @Test
注释,它将在任何测试 运行.
之前执行
public class CustomTransformer implements IAnnotationTransformer {
private static final String ctdataProvName = System.getProperty("env");
// include the name of all the test methods in the below list,
// for which you need to update the data provider name
private static final List<String> methods = Arrays.asList("tc01FullCCCAssignment");
@Override
public void transform(ITestAnnotation annotation,
Class testClass,
Constructor testConstructor,
Method testMethod) {
if(testMethod != null && methods.contains(testMethod.getName())) {
annotation.setDataProvider(ctdataProvName);
}
}
}
现在,您需要在 <suite>
标签下的套件 xml 文件中提及注释转换器:
<listeners>
<listener class-name="com.yourpackage.CustomTransformer" />
</listeners>
一些侦听器可以在测试 class 本身使用 @Listener
注释声明,但注释转换器 只能通过套件 xml[=24= 定义].这是因为需要在处理测试 classes 之前执行注释转换器,以便最终确定注释。
在我的测试方法中设置 dataProvider
名称之前,我正在尝试检查我将 运行 我的测试的环境。
public class AssignmentSOAPTest {
private static final String ctdataProvName=System.getProperty("env");
@BeforeClass
public void setUp() {
}
@Test(dataProvider = ctdataProvName, dataProviderClass CCCAssignmentSOAPDataProvider.class)
@Feature("FullCCCAssignment")
public void tc01FullCCCAssignment(int a,int b,int c) {
System.out.println("These are the number provided by Data Provider "+ a+"," +b+","+c);
}
}
在这种情况下,因为我的@Test 方法给我一个错误:属性值必须是常量。我发现这是因为我设置常量的方式不正确。在设置常量之前,我尝试了不同的方法来检查环境,但无法弄清楚。有办法吗?
我想在设置名称之前检查环境的原因是因为这样我的 testScript 中需要的 @Test
方法会更少。我有 4 个不同的环境以及 10 个不同的测试用例。不同环境的测试用例相同,但数据不同。
我的数据提供者 class 看起来像这样(没有添加所有环境,数据会有所不同):
@DataProvider (name = "ct-environment-data-provider")
public Object[][] ctDPMethod (Method m){
switch (m.getName()) {
case "tc01FullCCCAssignment":
return new Object[][] {{2, 3 , 5}};
case "minimumAssignment":
return new Object[][] {{2, 3, -1}};
case "updateAssignment":
return new Object[][] {{1, 3, -1}};
case "cancelAssignment":
return new Object[][] {{3, 3, -1}};
case "saveAssignment":
return new Object[][] {{8, 3, -1}};
case "openShopAssignment":
return new Object[][] {{5, 3, -1}};
case "casualtyAssignment":
return new Object[][] {{6, 3, -1}};
}
return null;
}
@DataProvider (name = "int-environment-data-provider")
public Object[][] intDPMethod (Method m){
switch (m.getName()) {
case "tc01FullCCCAssignment":
return new Object[][] {{1, 1 , 5}};
case "minimumAssignment":
return new Object[][] {{2, 3, -1}};
case "updateAssignment":
return new Object[][] {{1, 3, -1}};
case "cancelAssignment":
return new Object[][] {{3, 3, -1}};
case "saveAssignment":
return new Object[][] {{8, 3, -1}};
case "openShopAssignment":
return new Object[][] {{5, 3, -1}};
case "casualtyAssignment":
return new Object[][] {{6, 3, -1}};
}
}
您可以使用 IAnnotationTransformer
class 根据 System.getProperty
设置数据提供者名称。注释转换器可用于修改 @Test
注释,它将在任何测试 运行.
public class CustomTransformer implements IAnnotationTransformer {
private static final String ctdataProvName = System.getProperty("env");
// include the name of all the test methods in the below list,
// for which you need to update the data provider name
private static final List<String> methods = Arrays.asList("tc01FullCCCAssignment");
@Override
public void transform(ITestAnnotation annotation,
Class testClass,
Constructor testConstructor,
Method testMethod) {
if(testMethod != null && methods.contains(testMethod.getName())) {
annotation.setDataProvider(ctdataProvName);
}
}
}
现在,您需要在 <suite>
标签下的套件 xml 文件中提及注释转换器:
<listeners>
<listener class-name="com.yourpackage.CustomTransformer" />
</listeners>
一些侦听器可以在测试 class 本身使用 @Listener
注释声明,但注释转换器 只能通过套件 xml[=24= 定义].这是因为需要在处理测试 classes 之前执行注释转换器,以便最终确定注释。