如何获得CucumberOptions当前执行的标签?

问题描述 投票:3回答:1

我的特征文件如下:-功能:使用多个角色登录到HRM

@ SMOKE_P1@ REG_P3方案:SC1_SMOKE_P1:系统管理员应登录到HRM Portal给应用程序登录:用户“ sysadmin”,密码:“ sysadmin”

并且-单击登录按钮

然后-验证标题中的消息:“ Welcome ConfigAdmin”

@ SMOKE_P2@ REG_P2方案:SC1_SMOKE_P1:系统管理员应登录到HRM Portal给应用程序登录:用户“ sysadmin”,密码:“ sysadmin”

并且-单击登录按钮

然后-验证标题中的消息:“ Welcome ConfigAdmin”

我作为干净测试执行-Dcucumber.options =“-tags @ SMOKE_P1,@ SMOKE_P2”

执行期间,我将方案ID检索为:-ScenarioID = cenario.getName()。substring(0,cenario.getName()。length()); // +//“ ---:” ;;

    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("===============================");

由于我的方案有2个标记,因此在执行时仅考虑其中的1个。我想检索当前正在执行的标签。

java maven cucumber cucumber-jvm
1个回答
0
投票
可能有点晚了,但是如果有人仍然想知道,这就是我实现这一目标的方法:

    获取作为命令行传递的当前Cucumberoptions标签-D参数:
  • 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注释的类)
  • 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[]{}; }
      以这两个顺序使用
  • public String[] getTags(Class<?> clazz) { String[] tags = this.getTagsFromCmdParams(); if(tags.length > 0) { return tags; } return getTagsFromAnnotations(clazz); }
      然后使用钩子,获得场景标签和选项标签之间的交集
  • 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); }
    希望这会有所帮助,

    欢呼声

  • © www.soinside.com 2019 - 2024. All rights reserved.