我正在使用Java + TestNG + Allure。我需要在Allure报告中获得所有测试失败的信息,不仅是测试的第一个失败,而且还包括所有测试的失败,尽管步骤失败,测试也应从头到尾进行。
答案 0 :(得分:0)
要在“魅力”报告中报告测试失败,我们只需对“魅力类”进行少量修改。在这里,我们要报告任何子步骤为失败,执行其余步骤,然后将主要测试步骤标记为失败测试。为此,我们可以使用SoftAssertions的概念。我创建了一个名为AllureLogger的类。在课程内,我们将有5种方法。
1)starttest()2)endtest()3)markStepAsPassed(字符串消息)4)marstepAsFailed(字符串消息)5)logStep()。
public class AllureLogger {
public static Logger log = Logger.getLogger("devpinoylog");
private static StepResult result_fail;
private static StepResult result_pass;
private static String uuid;
private static SoftAssert softAssertion;
public static void startTest() {
softAssertion = new SoftAssert();
}
public static void logStep(String discription) {
log.info(discription);
uuid = UUID.randomUUID().toString();
result_fail = new StepResult().withName(discription).withStatus(Status.FAILED);
result_pass = new StepResult().withName(discription).withStatus(Status.PASSED);
}
public static void markStepAsFailed(WebDriver driver, String errorMessage) {
log.fatal(errorMessage);
Allure.getLifecycle().startStep(uuid, result_fail);
Allure.getLifecycle().addAttachment(errorMessage, "image", "JPEG", ((TakesScreenshot) driver).getScreenshotAs(OutputType.BYTES));
Allure.getLifecycle().stopStep(uuid);
softAssertion.fail(errorMessage);
}
public static void markStepAsPassed(WebDriver driver, String message) {
log.info(message);
Allure.getLifecycle().startStep(uuid, result_pass);
Allure.getLifecycle().stopStep(uuid);
}
public static void endTest() {
softAssertion.assertAll();
softAssertion = null;
startTest();
softAssertion = new SoftAssert();
}
}
在上面的类中,我们使用的是与allureClass不同的方法,并且我们做了一些修改以添加软断言。
每次我们在testClass中启动一个TestMethod时,我们可以调用starttest()和end testmethod()。在测试方法中,如果我们有一些子步骤,可以使用try catch块将这些子步骤标记为通过或失败。请以下面的测试方法为例
@Test(description = "Login to application and navigate to Applications tab ")
public void testLogin()
{
AllureLogger.startTest();
userLogin();
navigatetoapplicationsTab();
AllureLogger.endTest();
}
上面是一种测试方法,它将登录到一个应用程序,然后导航到应用程序选项卡。在内部,我们有两种方法将作为子步骤进行报告:1)login()-用于登录应用程序2)navigationtoapplicationsTab()-导航到应用程序选项卡。如果任何子步骤失败,则将主步骤和子步骤标记为失败,并执行其余步骤。
我们将定义在测试方法中定义的上述函数的主体,如下所示:
userLogin()
{
AllureLogger.logStep("Login to the application");
try
{
/*
Write the logic here
*/
AllureLogger.MarStepAsPassed(driver,"Login successful");
}
catch(Exception e)
{
AllureLogger.MarStepAsFailed(driver,"Login not successful");
}
}
navigatetoapplicationsTab()
{
AllureLogger.logStep("Navigate to application Tab");
try
{
/*
Write the logic here
*/
AllureLogger.MarStepAsPassed(driver,"Navigate to application Tab successful");
}
catch(Exception e)
{
e.printStackTrace();
AllureLogger.MarStepAsFailed(driver,"Navigate to application Tab failed");
}
}
每次抛出任何异常时,它们都会被捕获在catch块中,并在“魅力报告”中进行报告。软断言使我们能够成功执行其余所有步骤。
附件是使用上述技术生成的Allure报告的屏幕快照。主要步骤标记为Failed,其余测试用例已执行。
此处随附的报告并非来自上述示例。这只是报告外观的一个示例。