gpt4 book ai didi

java - 如何获取CucumberOptions当前执行的标签?

转载 作者:行者123 更新时间:2023-12-03 20:27:47 24 4
gpt4 key购买 nike

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

@SMOKE_P1 @REG_P3 场景:SC1_SMOKE_P1:系统管理员应登录 HRM 门户 登录到应用程序:用户“sysadmin”,密码:“sysadmin”

然后 - 点击登录按钮

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

@SMOKE_P2 @REG_P2 场景:SC1_SMOKE_P1:系统管理员应登录 HRM 门户 登录到应用程序:用户“sysadmin”,密码:“sysadmin”

然后 - 点击登录按钮

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

我执行干净的测试 -Dcucumber.options="--tags @SMOKE_P1,@SMOKE_P2"

在执行期间,我正在检索场景 ID 为:-ScenarioID = scenario.getName().substring(0, scenario.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 个。我想检索当前正在执行的标签。

最佳答案

可能有点晚了,但如果有人仍然想知道,我是如何做到这一点的:

  • 获取作为命令行 -D 参数传递的当前 Cucumberoptions 标签:
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);
}
  • 然后使用钩子(Hook),获取场景标签和选项标签之间的交集
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);
}

希望对您有所帮助,

干杯

关于java - 如何获取CucumberOptions当前执行的标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43229886/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com