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

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

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

共收到 11 条回复 时间 点赞

用反射

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

Tony #2 · 2018年06月09日 Author
workhard 回复

能不能说具体点?

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

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

Tony #5 · 2018年06月11日 Author
lofbat 回复

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

Tony #6 · 2018年06月11日 Author
bauul 回复

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

Tony 回复

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

Tony 回复

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

Tony 回复

刚翻了一下,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 内提供的方法是否满足你的需求


抹去的是公司信息

Tony #10 · 2018年06月11日 Author
lofbat 回复

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

Tony 回复

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

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