当前位置: 首页 > 知识库问答 >
问题:

TestNG数据提供程序优先级

宇文和同
2023-03-14

我有一个TestNG Dataprovider测试,如下所示:

输入csv

id,priority,testData,...
T1,1,someData,...
T1,0,someData,...

读者

@DataProvider(name="abc")
public Object[][] readData(){
  // Logic to read csv file.
}

测验

@Test(dataprovider="abc")
public void test(){
  // Test code.
}

有许多输入文件,每个测试都包含一个优先级。我想单独运行优先级为1的测试。

在没有数据提供者的情况下,我可以使用下面的IMethodInterceptor过滤测试。

class interceptor implements IMethodInterceptor {

  @Override
  public List<IMethodInstance> intercept(List<IMethodInstance> instance, 
   ITestContext context){
     for(IMethodInstance method:instance){
        if(method.getMethod().getPriority()==1){
          // Add in new list and return it.
        }
     }
  }
}

样品测试:

@Test(priority=1)
public void testA(){
 print("A");
}

@Test(priority=2)
public void testB(){
 print("B");
}

Output: A

由于数据提供者的优先级是动态的,因此我无法根据优先级过滤测试。

不应执行其他测试,而应跳过其他测试。

共有1个答案

唐焕
2023-03-14

找到了!。TestNG提供类似于IMethodInterceptor的IDataProviderInterceptor来处理数据提供程序测试。

样品:

public class Interceptor implements IDataProviderInterceptor {
     
   @Override
   public Iterator<Object[]> intercept(Iterator<Object[]> original, 
                                       IDataProviderMethod dataproviderMethod,
                                       ITestNGMethod method,
                                       ITestContext context) {

      // Typecast original object and filter priority.
   }
}
 类似资料:
  • 我想在类中与数据提供者并行运行测试方法。我需要一个数据提供者,它每次在新测试方法开始为给定的测试运行生成部分动态数据之前都会被调用。让我用伪代码解释一下: 我怎样才能做到这一点?

  • 我已使用以下方法在应用程序中输入凭据。 其中EnterText定义如下: 在测试类中,我写了下面的代码 我得到以下错误: 失败:loginProxy(“11”,“Priya”)java.lang.NumberFormatException:java.lang.Integer处为空。parseInt(未知源)位于java.lang.Integer。parseInt(未知源) 请帮助解决同样的问题。据

  • 我正在尝试通过TestNG进行多线程测试为测试实例化WebDrivers<代码>@AfterMethod在测试后关闭WebDrivers

  • 有人知道TestNG如何根据为测试方法指定的数据提供者名称计算出数据提供者方法是什么吗? 我找到了这个解决方案:https://gist.github.com/ae6rt/3805639 但是,它没有考虑到数据提供者可能是: 在完全不同的类别中定义,或 在父类中定义,并且 该方法可以是静态的,也可以是非静态的 我试图自己破解一些东西,但后来我想我不可能是第一个试图解决这个问题的人,特别是因为显然T

  • 我是Spock的新手,目前正在使用它,但我继承了大量需要重复使用的测试配置文件。每个配置文件都是一个JSON,与Spec类同名。对于每种试验方法,都有一个带有参数的地图列表,例如: TestNG允许我在数据提供者方法中传递测试方法名称,因此我可以根据测试类名和测试方法名称返回映射列表。我的基类中只有一个数据提供者方法: 作为这种方法的结果,我得到了一组映射,用于每个测试迭代。然后我将这个方法指定为

  • 我有以下问题 我有一个带有随机名称的测试,我必须记录我从数据提供者提供的两个测试参数。 我实现了一种方法,通过将它们连接到名称中,将它们记录为自定义处理的测试参数。 然而,TestNG还添加了未处理的参数(它们看起来像是随机生成的代码,带有包/类的名称和其他内容,如下图所示)。 是否有任何方法可以删除TestNG记录的数据提供程序测试参数?或者我可以用自定义数据提供程序测试参数覆盖它们吗? 顺便说