Cucumber 7 + TestNG - 测试 运行 开始前的动态标签操作
Cucumber 7 + TestNG - Dynamic tags manipulation before test run start
我在项目中使用 TestNG 和 Cucumber。
使用的版本:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.4.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>7.0.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.0.0</version>
</dependency>
一切正常,但我需要在测试 运行 开始之前进行一些动态标签操作。
更具体地说,我需要根据某些环境条件添加额外的过滤标签表达式。
当前的实现是 AbstractTestNGCucumberTests
class,带有 TestNGCucumberRunner
字段。
我需要change/add一些代码行的地方是在TestNGCucumberRunner
class的构造函数中,因为运行ner初始化并开始测试运行就在那儿。
问题是 cucumber-testng 依赖项中的几乎所有 class 都不是 public
和 final
。所以我无法扩展 classes 并覆盖某些逻辑。
我看到的唯一方法是复制所有依赖于我的源文件夹的 classes 这是一个奇怪而愚蠢的想法。
有什么技巧可以实现我的目标吗?
扩展 AbstractTestNGCucumberTests
时,您可以过滤 scenarios()
的输出
public class RunCucumberTest extends AbstractTestNGCucumberTests {
@DataProvider(parallel = true)
@Override
public Object[][] scenarios() {
Object[][] scenarios = super.scenarios();
// Do filtering here
return scenarios;
}
}
因为数据提供程序用于调用测试方法,您可以安全地将第一个数组元素转换为 PickleWrapper
并使用 pickleWrapper.getPickle().get tags()
访问标签。
我在项目中使用 TestNG 和 Cucumber。
使用的版本:
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>7.4.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-testng</artifactId>
<version>7.0.0</version>
</dependency>
<dependency>
<groupId>io.cucumber</groupId>
<artifactId>cucumber-java</artifactId>
<version>7.0.0</version>
</dependency>
一切正常,但我需要在测试 运行 开始之前进行一些动态标签操作。 更具体地说,我需要根据某些环境条件添加额外的过滤标签表达式。
当前的实现是 AbstractTestNGCucumberTests
class,带有 TestNGCucumberRunner
字段。
我需要change/add一些代码行的地方是在TestNGCucumberRunner
class的构造函数中,因为运行ner初始化并开始测试运行就在那儿。
问题是 cucumber-testng 依赖项中的几乎所有 class 都不是 public
和 final
。所以我无法扩展 classes 并覆盖某些逻辑。
我看到的唯一方法是复制所有依赖于我的源文件夹的 classes 这是一个奇怪而愚蠢的想法。
有什么技巧可以实现我的目标吗?
扩展 AbstractTestNGCucumberTests
时,您可以过滤 scenarios()
public class RunCucumberTest extends AbstractTestNGCucumberTests {
@DataProvider(parallel = true)
@Override
public Object[][] scenarios() {
Object[][] scenarios = super.scenarios();
// Do filtering here
return scenarios;
}
}
因为数据提供程序用于调用测试方法,您可以安全地将第一个数组元素转换为 PickleWrapper
并使用 pickleWrapper.getPickle().get tags()
访问标签。