将 JIRA 与 Cucumber 集成到失败测试用例中

问题描述

我在 github 中有一个代码示例,用于在自动化测试用例失败时创建 jira 票证。它收集 ITestResult 信息并使用它来创建票证。

我可以在每个测试场景中使用@After,但是重复的代码太多了。我想在最终测试执行中执行一次 - 钩子或侦听器中的某些内容

问题: 黄瓜中是否有类似的机制来模拟 ITestResult?是否可以使用 QAF 库?

@Override
    public void onTestFailure(ITestResult result) {
            JiraPolicy jiraPolicy = result.getmethod().getConstructorOrMethod().getmethod().getAnnotation(JiraPolicy.class);
            boolean isTicketReady = jiraPolicy.logTicketReady();
            if (isTicketReady) {
                // raise jira ticket:
                System.out.println("is ticket ready for JIRA: " + isTicketReady);
                JiraServiceProvider jiraSp = new JiraServiceProvider("https://naveenautomationlabs.atlassian.net","naveenanimation20@gmail.com","jaizMlfaUkTfffNOVPq29B29","TA");
                String issueSummary = result.getmethod().getConstructorOrMethod().getmethod().getName()
                        + "got Failed due to some assertion or exception";
                String issueDescription = result.getThrowable().getMessage() + "\n";
                issueDescription.concat(ExceptionUtils.getFullStackTrace(result.getThrowable()));
    
                jiraSp.createJiraTicket("Bug",issueSummary,issueDescription,"Naveen");
            }
    
        }

请帮帮我。谢谢。

解决方法

QAF 尝试提供无缝的用户体验和功能,无论使用何种测试创作方法。此案例是将 meta-data 与测试案例一起使用。

在 BDD 方法中编写测试用例时,BDD 语法具有可以使用的元数据语句。 BDD2 语法,元数据可以作为单独的键值对提供: 示例 BDD 语法:

Scenario: scenario in BDD syntax
Meta-data: {'logTicketReady':true,'groups':['smoke','p1']}
   Given ...
   When ...
End

示例 BDD2:

@smoke @p1
@logTicketReady:true
Scenario: scenario in BDD2 syntax
   Given ...
   When ...

在 Java 元数据中创作测试用例时,可以提供自定义注释(例如在您的情况下为 JiraPolicy)或 Metadata 注释。

Java 示例:

@MetaData("{'logTicketReady':true}")
@Test(groups={"smoke","p1"})
public void sampleJavaTest(){
  //implementation goes here
}

如果您创建了自定义注释,也可以使用它。

带有自定义注释的 Java 示例:

@JiraPolicy(logTicketReady=true)
@Test(groups={"smoke","p1"})
public void sampleJavaTest(){
  //implementation goes here

}

为了执行,在 xml configuration 中使用适当的工厂类。

您分享的方法可以修改如下,以同时使用编码和 BDD 方法。

@Override
public void onTestFailure(ITestResult result) {
        TestNGScenario scenario = (TestNGScenario) result.getMethod();
        Map<String,Object> metadata = scenario.getMetaData();
      
        boolean isTicketReady = (boolean)metadata.getOrDefault("logTicketReady",false);
        if (isTicketReady) {
            // raise jira ticket:
            System.out.println("is ticket ready for JIRA: " + isTicketReady);
            JiraServiceProvider jiraSp = new JiraServiceProvider("https://naveenautomationlabs.atlassian.net","naveenanimation20@gmail.com","jaizMlfaUkTfffNOVPq29B29","TA");
            String issueSummary = metadata.get("name")
                    + "got failed due to some assertion or exception";
            String issueDescription = result.getThrowable().getMessage() + "\n";
            issueDescription.concat(ExceptionUtils.getFullStackTrace(result.getThrowable()));

            jiraSp.createJiraTicket("Bug",issueSummary,issueDescription,"Naveen");
        }

    }

注意:使用 QAF 时,Cucumber 不是必需的。如果你想使用标准的 Cucumber runner 或者有 Cucumber-5 step 实现,你需要使用 qaf-cucumber。如果您在 Cucumber 1.x 中有步骤实现,请参阅 documentation