问题描述
我在 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