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一些代码行的地方是在TestNGCucumberRunnerclass的构造函数中,因为运行ner初始化并开始测试运行就在那儿。

问题是 cucumber-testng 依赖项中的几乎所有 class 都不是 publicfinal。所以我无法扩展 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() 访问标签。