首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何获取CucumberOptions当前正在执行的标记?

如何获取CucumberOptions当前正在执行的标记?
EN

Stack Overflow用户
提问于 2017-04-05 11:28:24
回答 1查看 2.3K关注 0票数 3

我的特性文件如下:- Feature:登录到具有多个角色的人力资源管理

@SMOKE_P1 @REG_P3场景: SC1_SMOKE_P1:系统管理员应该登录到人力资源管理门户,登录到应用程序:用户" sysadmin ",密码:"sysadmin“

点击登录按钮

然后-在标题中验证Msg:“欢迎ConfigAdmin”

@SMOKE_P2 @REG_P2场景: SC1_SMOKE_P1:系统管理员应该登录到人力资源管理门户,登录到应用程序:用户" sysadmin ",密码:"sysadmin“

点击登录按钮

然后-在标题中验证Msg:“欢迎ConfigAdmin”

我执行清洁测试-Dcucumber.options=“-标记@SMOKE_P1,@SMOKE_P2”

在执行过程中,我检索场景id为:- ScenarioID = scenario.getName().substring(0,scenario.getName().length());// +/“-”;

代码语言:javascript
运行
复制
    if (ScenarioID.contains(":")) {
        ScenarioID = ScenarioID.substring(0, ScenarioID.indexOf(":"));
        // ScenarioID.indexOf("\"") + 1,
    }

    StepDefinitionLogger.info("===============================");
    StepDefinitionLogger.info("My Scenario ID:" + ScenarioID);
    StepDefinitionLogger.info("Scenario Tags are: "+scenario.getSourceTagNames().toString());
    StepDefinitionLogger.info("===============================");

因为我的场景有两个标记,在执行时只有一个被考虑。我想检索当前正在执行的标记。

EN

回答 1

Stack Overflow用户

发布于 2020-02-09 17:36:28

可能有点晚了,但如果有人还在想,我是如何做到这一点的:

  • 获取作为命令行-D参数传递的当前Cucumberoptions标记:
代码语言:javascript
运行
复制
private String[] getTagsFromCmdParams() {
    String proptag = System.getProperty("cucumber.options");
    if(proptag != null && proptag.length() > 0) {
        Pattern p = Pattern.compile("--tags (@[^ ]+(,@[^ ]+)*)");
        Matcher m = p.matcher(proptag);
        boolean b = m.matches();
        if(b && m.groupCount() >= 2 ) {
            String test = m.group(1);
            if(test != null && test.length() > 0) {
                String[] bits = test.split(",");
                if(bits.length > 0) {
                    return bits;
                }
            }
        }
    }

    return  new String[]{};
}
  • 从注释中获取当前的Cucumberoptions标记(clazz是带@CucumberOptions注释的类)
代码语言:javascript
运行
复制
private String[] getTagsFromAnnotations(Class<?> clazz) {
    CucumberOptions co = clazz.getAnnotation(CucumberOptions.class);
    String[] tags = co.tags();

    if(tags.length == 1 && tags[0].contains(",")) {
        return tags[0].split(",");
    }

    return  new String[]{};
}
  • 请按此顺序使用。
代码语言:javascript
运行
复制
public String[] getTags(Class<?> clazz) {
    String[] tags = this.getTagsFromCmdParams();
    if(tags.length > 0) {
        return tags;
    }

    return getTagsFromAnnotations(clazz);
}
  • 然后使用钩子,获取场景标记和选项标记之间的交集。
代码语言:javascript
运行
复制
public static String[] getStringIntersection(String[] array1, String[] array2) {
    Set<String> s1 = new HashSet<>(Arrays.asList(array1));
    Set<String> s2 = new HashSet<>(Arrays.asList(array2));
    s1.retainAll(s2);

    return s1.toArray(new String[0]);
}

@Before
public void before(final Scenario scenario) {
    String[] scenarioTags = scenario.getSourceTagNames().toArray(new String[]{});
    String[] optionsTags = getTags(TestRunner.class); // TestRunner has the "@CucumberOptions" annotation
    String[] runningTag = getStringIntersection(scenarioTags, optionsTags);
    System.out.print("scenarioTags: ");
    printArray(scenarioTags);
    System.out.print("optionsTags: ");
    printArray(optionsTags);
    System.out.print("runningTag: ");
    printArray(runningTag); 
}

希望这能帮上忙

干杯

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43229886

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档