如何在黄瓜步骤实现java文件中获取功能文件名/路径

时间:2016-05-11 15:19:07

标签: cucumber cucumber-java

在黄瓜框架中,有没有办法可以获得当前正在执行的要素文件的名称,甚至更好的是它在步骤定义文件中的文件夹路径?

我的项目是用java实现的,我正在使用intelliJ的想法。我已经尝试过使用钩子之前帮助我获取场景实例。但是,我找不到获取功能文件信息的方法。

2 个答案:

答案 0 :(得分:0)

我能想出的唯一解决方案是在功能文件Title中提及功能文件的名称,然后在@Before钩子中使用scenario.getId()获取此标题.Split(" ;")[0]

然后解析此标题以获取要素文件名并将其存储在变量中,我稍后可以在@After挂钩中使用该变量将其传递给自定义格式化程序以解析我的要素文件并保存它。数据库中的数据。

答案 1 :(得分:0)

不应该吗? 您想要它的原因是可追溯性和可解释性。 对调试也很有帮助。 特别是当您有20个以上的小黄瓜文件(最多200个步骤)和20个以上的步骤定义文件时。
我将其中一个放在每个Java步骤定义文件的顶部:

@Before 
public void printScenarioName(Scenario scenario) {
    this.scenario = scenario;
    this.featureName = CukeUtils.getFeatureName(scenario);
    String result = "@Before:\n*************Setting Feature: " + this.featureName + 
            "\n*************Setting Scenario: " + this.scenario.getName();
    log.info(result);
}

我在CukeUtils中定义的位置:

public static String getFeatureName(Scenario scenario) {
        String featureName = "";
        System.out.println("scenario.getId(): " + scenario.getId());  
        // Usually the scenario Id is doctored version of the lines following 
        // the Feature: and the Scenario: keywords.
        // Eg.: scenario.getId(): a-long-(20-minute)-non-invasive-smoke-test-that-
        //comfirms-that-i-can-login-to-area51-via-the-nasa-portal;as-a-superuser-i-
        //must-be-able-to-login-to-area51-via-the-nasa-portal-so-that-i-can-access-
        //all-the-secret-files
        String rawFeatureName = scenario.getId().split(";")[0]
                         .replace("-i-", "-I-").replace("-"," ");
        featureName = featureName + rawFeatureName.substring(0, 1).toUpperCase() + 
                rawFeatureName.substring(1).replace("nasa", "NASA");
        return featureName;
    }