有没有办法拦截数据提供者调用并更改其返回值?

时间:2019-07-10 13:41:55

标签: testng testng-dataprovider

我有一组测试,这些测试总共需要很长时间才能执行。我想通过更改所有数据提供程序以仅返回一组参数来缩短一些测试运行时间。

我已经阅读了TestNG文档和javadoc,但似乎没有IDataProviderListener之类的东西。 IMethodInterceptor可能适用于未设置依赖项的测试,但这将是一个不完整的解决方案。

我也知道可能还有其他方法可以减少测试时间,但是我的选择有限,因为我的测试夹具物理,缓慢且昂贵(因此无法进行并行化)。

作为一个具体示例,可以说我有3个测试:TestA,TestB,TestC以及Test B和C使用唯一的数据提供程序。 TestB的数据提供程序通常返回5组参数,导致执行10次TestB。与TestC类似,但它的dataprovider通常返回1个参数集,从而导致一次TestC运行。正常执行为:

  • TestA
  • TestB
  • TestB
  • TestB
  • TestB
  • TestB
  • TestC

我想要的是一种无需修改数据提供程序或测试代码源即可获得以下内容的方法:

  • TestA
  • TestB
  • TestC

1 个答案:

答案 0 :(得分:1)

在作为TestNG扩展的QAF中,通过提供data provider intercepter在TestNG外部实现了这种用例。它还提供了filter test-data的功能。以下是QAFDataProviderIntercepter实现的示例:

public class MyDataProviderIntercepter implements QAFDataProviderIntercepter{

 public void beforeFech(TestNGScenario scenario, ITestContext context){

 }
 public void List<Object[]> intercept(TestNGScenario scenario, ITestContext context, List<Object[]> testdata){

  //provide logic here
 }

}

您需要将此类注册为qaf侦听器。

相关问题