我正在创建一个使用带有 TestNG 的 POM 结构的 Selenium 框架。我正在使用@DataProvider
注释将值传递给@Test
.
我的问题是,如果@Test
需要在以后的@Test
方法中使用一种方法的输出,那么我将如何做到这一点,因为使用数据提供者我只能传递它包含的值。
OP 没有提到语言或需要并行执行,因此可以使用静态变量轻松解决。在 Java 中,下面应该打印 pass:
public static int outputOfMethodA=0;
@Test
methodA(){
outputOfMethodA=outputOfMethodA+1;
}
@Test
methodB(){
if(outputOfMethodA=1){
System.out.println("pass!");
}
else{system.out.println("fail!")
}
}
他的意思是 POM 是为他的 WebElements 映射的页面对象模型类型。
松散地耦合您的测试方法始终是一个好习惯(因此一个@Test 的结果不应依赖于另一个@Test)。
如果您想实现它:@DataProvider 可以用于您在测试类中拥有的任意数量的@Test 方法。只需定义一个类级别的 Map 并在您的测试中使用它。
样本:
TestingClass{
// define global variable
Map<String,String> resultMap=new HashMap<String, String>();
@DataProvider
public Object{
// some logic for dataProvider
}
@Test(dataProvider="dp")
method1(){
// your logic
// then put your final result to be used by method2 into appropriate obj
resultMap.put("key","value");// assign result to defined global variable
}
@Test(dataProvider="dp")
method2(){
// use the resultMap to take results from previous method.
}
}