2

在黄瓜框架中,有没有办法可以获取当前正在执行的功能文件的名称,或者更好的是它在步骤定义文件中的文件夹路径?

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

4

3 回答 3

1

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

然后解析这个 Title 以获取特征文件名并将其存储在一个变量中,稍后我可以在 @After 挂钩中使用该变量将其传递给自定义格式化程序以解析我的特征文件并将其数据保存在数据库中。

于 2016-05-17T17:28:18.747 回答
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;
    }
于 2020-07-15T13:04:36.637 回答
0

长话短说:你不应该这样做。问问自己,你真正想要达到的目标是什么,为什么你首先需要这条道路。是因为一些外部文件吗?您真的需要一个外部文件,还是内容可以在您的功能文件中充分体现?如果你真的需要一个外部文件,为什么不把它作为资源呢?等等。

于 2016-05-12T11:54:20.090 回答