java—有没有办法获取要在jvm的@beforeclass注解中运行的场景列表

d4so4syb  于 2021-06-30  发布在  Java
关注(0)|答案(1)|浏览(291)

我需要根据我在cucumber test runner中提供的标记获取要执行的所有场景的列表。但是,我必须在测试开始执行之前得到这个列表。
我知道有一个名为“@beforeclass”的标签,但我不确定是否可以使用它来获取将要运行的所有场景的列表。比如像这样的事情

@BeforeClass
public void intialize(Scenario[] scenario) throws Exception { }

下面是我的代码测试运行类

package com.automation.cucumber;

import com.automation.Utils;
import io.cucumber.java.Scenario;
import io.cucumber.testng.*;
import org.testng.annotations.BeforeClass;
import org.testng.annotations.DataProvider;

import java.io.File;

@CucumberOptions(features = "features/amazon"
        ,glue="com.automation.cucumber"
        ,tags = "@tt"
        ,dryRun = true
        , plugin = {"json:target/cucumber-reports/cucumber.json"})

public class CucumberTestRunner extends AbstractTestNGCucumberTests {

    static String resultFolder;
    @DataProvider(parallel = true)
    public Object[][] scenarios() {
        return super.scenarios();
    }

    @BeforeClass
    public void intialize() throws Exception {
        resultFolder =  Utils.createTestReportFolder();
        if(resultFolder==null)
        {
            throw new Exception("Unable to create a result folder");
        }

        System.out.println();

    }

}
wko9yo5t

wko9yo5t1#

您可能需要实现eventlistener类来获取该信息并执行以下操作 dryRun = true 在你的 Runner 上课时间 @CucumberOptions 引用一个能帮助你实现你需要的问题

public class DryRunPlugin implements EventListener {

    @Override
    public void setEventPublisher(EventPublisher publisher) {
        publisher.registerHandlerFor(TestCaseStarted.class, this::handleCaseStarted);
    }

    private void handleCaseStarted(TestCaseStarted event) {
        System.out.println(event.getTestCase().getUri());
        System.out.println(event.getTestCase().getName());
        System.out.println(event.getTestCase().getScenarioDesignation());
        event.getTestCase().getTags().stream().forEach(t -> 
        System.out.println(t.getName()));
    }

}

相关问题