根据测试注释加载属性

时间:2019-09-04 13:34:19

标签: java spring testng web-api-testing

有一种方法可以告诉Test带有批注或类似内容的方法,以基于自定义批注加载属性,并根据测试所具有的参数数量相等地运行测试。

例如: 我想运行测试A,该测试的值注入了Spring @value 3次,对于运行1,我希望测试从属性文件X获取值,对于运行2从属性文件Y获取,从属性文件3运行文件Z。

@Value("${person.name}")
private String person.name;

@RunTestWithProperties(properties = {X,Y,Z})
@Test
public void testA() {(System.out.println(person.name); }

  

在第一次运行时,此测试将打印X中的person.name   属性文件,在第二次运行时测试将打印   来自Y的person.name等等。

会发生什么:

testA从文件X,Y和Z运行3次(每次运行都具有不同的属性);

我可以使用数据提供程序或类似的方法,使用系统变量加载属性,但这不是我想要的解决方案。

我使用的技术是Java,TestNG和Spring。任何解决方案都值得欢迎。

先谢谢大家!

1 个答案:

答案 0 :(得分:0)

您可以使用参数化测试。您需要创建一个带有@Parameterized.Parameters注释的方法,您可以在其中加载集合中的所有数据(基本上是每次运行都需要传递的参数)。

然后创建一个构造函数以传递参数,并且每次运行时将从该集合传递该构造函数参数

例如

 @RunWith(Parameterized.class)
 public class RepeatableTests {

 private String name;

 public RepeatableTests(String name) {
    this.name = name;
 }

 @Parameterized.Parameters
 public static List<String> data() {
    return Arrays.asList(new String[]{"Jon","Johny","Rob"});
 }

 @Test
 public void runTest() {
    System.out.println("run --> "+ name);
 }
}

或者如果您不想使用构造函数注入,则可以使用@Parameter批注来绑定值

@RunWith(Parameterized.class)
public class RepeatableTests {

@Parameter
public String name;

@Parameterized.Parameters(name="name")
public static List<String> data() {
    return Arrays.asList(new String[]{"Jon","Johny","Rob"});
}

@Test
public void runTest() {
    System.out.println("run --> "+ name);
}
}