下面分享一篇关于自动化测试报告的文章。
之前用过testNG自带的测试报告、优化过reportNG的测试报告、extentreport、ZReport(大飞总原创),这些是我之前都用过的,也是在去年雯姐和我说过Allure2这个报告不错,一直没时间,正巧最近有用到,接触下发现确实是个神器。
Allure(已经有allure2了,小编用的就是allure2),生成的测试报告与上述对比,简直堪称完美!先上个测试报告的图表,给大家直观感受下:
下面让我们一起走进Allure的世界,跟上步伐,相信我这一切并不难
1<?xml version="1.0" encoding="UTF-8"?>
2<project xmlns="http://maven.apache.org/POM/4.0.0"
3 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
4 xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
5 <modelVersion>4.0.0</modelVersion>
6
7 <groupId>allure-demo</groupId>
8 <artifactId>allure-demo</artifactId>
9 <version>1.0-SNAPSHOT</version>
10
11 <properties>
12 <allure.version>2.10.0</allure.version>
13 <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
14 <java.version>1.8</java.version>
15 <aspectj.version>1.9.2</aspectj.version>
16 <suiteXmlFile>src/test/resources/suite/test-moudle/testng.xml</suiteXmlFile>
17 </properties>
18
19 <dependencies>
20
21 <dependency>
22 <groupId>selenium-server-standalone</groupId>
23 <artifactId>selenium-server-standalone</artifactId>
24 <version>3.9.1</version>
25 </dependency>
26
27 <dependency>
28 <groupId>io.qameta.allure</groupId>
29 <artifactId>allure-testng</artifactId>
30 <version>${allure.version}</version>
31 <scope>test</scope>
32 </dependency>
33
34 <dependency>
35 <groupId>org.hamcrest</groupId>
36 <artifactId>hamcrest-all</artifactId>
37 <version>1.3</version>
38 <scope>test</scope>
39 </dependency>
40
41 <dependency>
42 <groupId>org.testng</groupId>
43 <artifactId>testng</artifactId>
44 <version>6.14.3</version>
45 </dependency>
46
47 <dependency>
48 <groupId>io.qameta.allure</groupId>
49 <artifactId>allure-java-commons</artifactId>
50 <version>2.10.0</version>
51 </dependency>
52 </dependencies>
53 <build>
54 <plugins>
55 <plugin>
56 <groupId>org.apache.maven.plugins</groupId>
57 <artifactId>maven-compiler-plugin</artifactId>
58 <version>3.3</version>
59 <configuration>
60 <source>1.8</source>
61 <target>1.8</target>
62 <encoding>UTF-8</encoding>
63 </configuration>
64 </plugin>
65 <plugin>
66 <groupId>org.apache.maven.plugins</groupId>
67 <artifactId>maven-surefire-plugin</artifactId>
68 <version>2.22.1</version>
69 <configuration>
70 <argLine>
71 -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
72 </argLine>
73 <suiteXmlFiles>
74 <!--该文件位于工程根目录时,直接填写名字,其它位置要加上路径-->
75 <suiteXmlFile>src/test/resources/testng.xml</suiteXmlFile>
76 </suiteXmlFiles>
77 </configuration>
78 <dependencies>
79 <dependency>
80 <groupId>org.aspectj</groupId>
81 <artifactId>aspectjweaver</artifactId>
82 <version>${aspectj.version}</version>
83 </dependency>
84 </dependencies>
85 </plugin>
86 </plugins>
87 </build>
88 <reporting>
89 <excludeDefaults>true</excludeDefaults>
90 <plugins>
91 <plugin>
92 <groupId>io.qameta.allure</groupId>
93 <artifactId>allure-maven</artifactId>
94 <version>2.10.0</version>
95 <configuration>
96 <reportVersion>${allure.version}</reportVersion>
97 </configuration>
98 </plugin>
99 </plugins>
100 </reporting>
101</project>
安装完allure插件后,进入系统管理-->全局工具配置,安装Allure Commandline
保存即可
此时再通过Jenkins构建并执行测试代码后,就可以看到Allure的测试报告了。以上,完成了Allure的基本配置。
1、注解:
我只列举一些常用的注解,其他的可以自行去官网查阅
//用例编号
@TmsLink("562")
//bug编号
@Issue("4042")
//bug严重等级,优先级,包含blocker, critical, normal, minor, trivial 几个不同的等级
@Severity(SeverityLevel.TRIVIAL)
//用例描述
@Description("测试一个流程,用作回归冒烟测试")
添加@TmsLink, @Issue注解后,在allure report中会生成相应的链接,但是它是如何访问我们的缺陷管理系统以及用例管理系统给的呢,在官网文档有说明。
查看文档发现,需要有一个配置文件,将我们系统域名预先设置好,再将{}的内容使用注解进行替换,这样就能访问到我们想范文的连接了。但是官方并没有说明这个配置文件的具体配置,好在官方有一些简单的小demo可供产考;
这是官方的testng的demo地址:
https://github.com/allure-examples/allure-testng-example/tree/master/src/test/resources,可以看到它有一个文件名叫做allure.properties
这是文件的内容
allure.results.directory=target/allure-results
allure.link.issue.pattern=https://example.org/issue/{}
allure.link.tms.pattern=https://example.org/tms/{}
第一个应该是默认的输出路径,暂时未用到先不研究,将你需要访问的url替换就可以,比如:
allure.link.issue.pattern=http://jira.XXX.com/browse/{}
allure.link.tms.pattern=http://testlink.XXX.com/{}
这里需要注意一点,allure.properties的位置必须是跟你路径下的test同级否则会找不到这个文件;
我用的是idea创建的maven项目
最终效果如下:
allure最吸引我的地方是,不用存到本地,它能将selenium的截图放到report中
第一步:写一个监听类,当执行失败自动截图
package com.allure.demo;
import io.qameta.allure.Attachment;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
public class TestFailListener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result) {
screenshot();
}
@Attachment(value = "screen shot",type = "image/png")
public byte[] screenshot(){
byte[] screenshotAs = ((TakesScreenshot)GetDriver.driver).getScreenshotAs(OutputType.BYTES);
return screenshotAs;
}
}
第二步:在测试类上,添加Listeners的注解
package com.allure.demo;
import io.qameta.allure.*;
import org.openqa.selenium.By;
import org.openqa.selenium.Keys;
import org.openqa.selenium.WebDriver;
import org.testng.Assert;
import org.testng.annotations.*;
import java.util.concurrent.TimeUnit;
@Epic("百度查询功能测试")
@Feature("百度查询功能")
@Listeners(TestFailListener.class)
public class AllureDemo {
static WebDriver driver;
static final int MAX_TIMEOUT_IN_SECONDS = 5;
@BeforeClass
public static void beforeClass() throws Exception {
driver = new GetDriver().getDriver();
String url = "https://www.baidu.com/";
driver.manage().window().maximize();
driver.manage().timeouts().implicitlyWait(MAX_TIMEOUT_IN_SECONDS, TimeUnit.SECONDS);
driver.get(url);
}
//用例编号
@TmsLink("562")
//bug编号
@Issue("4042")
//bug严重等级,优先级,包含blocker, critical, normal, minor, trivial 几个不同的等级
@Severity(SeverityLevel.TRIVIAL)
//用例描述
@Description("测试一个流程,用作回归冒烟测试")
/**
*功能块,具有相同feature或astory的用例将规整到相同模块下,执行时可用于筛选
*/
@Story("查询场景-正向查询功能")
@Test(description = "验证百度查询功能", dataProvider = "testDemo")
public void testDemo(String key) throws Exception {
driver.findElement(By.id("kw")).clear();
driver.findElement(By.id("kw")).sendKeys(key, Keys.ENTER);
Thread.sleep(3000);
Assert.assertEquals(driver.getTitle(), key + "_百度搜索");
if (key.equals("java")){
Assert.assertEquals(driver.getTitle(),"断言失败!");
}
}
@AfterClass
public static void tearDownAfterClass() {
if (driver != null) {
System.out.println("运行结束!");
driver.quit();
}
}
@DataProvider(name = "testDemo")
public Object[][] testDemo() {
return new Object[][]{
{"软件测试君"},
{"refain 博客园"},
{"java"},
};
}
}
截图效如下图:
是不是很nice,还不动手试一试········