簡體   English   中英

如何獲取當前正在執行的 CucumberOptions 標簽?

[英]How to get the currently executing tag of CucumberOptions?

我的功能文件如下:- 功能:以多個角色登錄到 HRM

@SMOKE_P1 @REG_P3 場景:SC1_SMOKE_P1:系統管理員應該登錄到 HRM 門戶給定登錄到應用程序:用戶“sysadmin”,密碼:“sysadmin”

並且 - 單擊登錄按鈕

然后 - 在標題中驗證消息:“歡迎配置管理員”

@SMOKE_P2 @REG_P2 場景:SC1_SMOKE_P1:系統管理員應該登錄到 HRM 門戶給定登錄到應用程序:用戶“sysadmin”,密碼:“sysadmin”

並且 - 單擊登錄按鈕

然后 - 在標題中驗證消息:“歡迎配置管理員”

我執行干凈測試 -Dcucumber.options="--tags @SMOKE_P1,@SMOKE_P2"

在執行期間,我將場景 ID 檢索為:- ScenarioID = 場景.getName().substring(0, 場景.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);
}
  • 然后使用鈎子,獲取場景標簽和選項標簽之間的交集
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); 
}

希望這可以幫助,

干杯

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM