性能测试工具 Testng 里面如何根据不同的结果调用不同的测试方法

azteker · 2018年06月09日 · 最后由 lofbat 回复于 2018年06月11日 · 1273 次阅读

就是比如这样,我有一个Test测试方法,根据他返回的结果再执行不同的测试方法,比如说Test返回结果1就接着执行Test1方法,返回结果2就执行Test2,我不能把它们都放在一个测试方法里,因为后续的方法需要用data-provider

共收到 11 条回复 时间 点赞

用反射

—— 来自TesterHome官方 安卓客户端

mrkuxx 回复

能不能说具体点?

testng本身似乎没有提供动态选择执行方法的功能(也可能是我孤陋寡闻了);你可以考虑把Test的执行结果传递给test1/2两个方法,内部再做具体处理逻辑;
另外为什么后续要用到dataprovider就不能放同一个方法

也不一定要用反射啊,根据不同的结果调用不同的方法有什么问题?在方法A中拿到结果,根据结果判断来调用b还是c有什么问题?

lofbat 回复

就是不知道testng里面测试用例的返回值怎么传给别的测试用例

carl 回复

但是testng里面用@Test标注的测试方法都会被执行,如何根据不同情况进行不同的运行

azteker 回复

说了半天是为了控制测试方法执行啊,同一个类的测试方法执行顺序控制用dependsOnMethods就行了,至于不同测试方法之间的参数传递,同一个类内用变量,不同类之间用文件,Redis读写都可以

azteker 回复

可以考虑构造一个上下文对象来进行信息传递,Test生成上下文对象,Test1/2用静态方法手动获取对象

azteker 回复

刚翻了一下,testng本身有提供了获取测试上下文的方式

@Test
public void a1(){
return;
}
@Test
public void a2(){
return;
}
@Test
public void b(ITestContext itc){
IResultMap irm=itc.getPassedTests();
Set<ITestResult> itr= irm.getAllResults();
for(ITestResult i:itr){
System.out.println(i.isSuccess());
}
}

图中获取了a1/a2两个用例的执行结果,你可以看下ITestContext内提供的方法是否满足你的需求


抹去的是公司信息

lofbat 回复

你这个例子中如果b函数还需要dataprovider提供的参数的话该怎么用?

azteker 回复

你的意思是要dataprovider动态提供不同参数?可以将ITestContext注入到dataprovider中来实现
testng中dataprovider是需要时才生成的;

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册