开源测试工具 allure--开源 report 框架阶段性总结介绍

孙高飞 · August 20, 2016 · Last by 朱zhu replied at October 22, 2019 · 14869 hits

前言

大家好,没错,又是我这个罗里吧嗦的唐僧。今天唐僧不废话了。给大家介绍一个我正在用的开源report框架,希望能解决大家对于生成美观实用可分类的report的难题。

allure

allure 是一个轻量级的,灵活的,支持多语言,多平台的report框架。是的,它是支持多语言并在很多开源框架中做了适配集成的。我这次终于不是只介绍java的项目了。其目的就是使用简单方便的方式构建一个完善的report体系。 我们直接上效果图吧。
首先看看国外牛人做的report吧。allure report 传送门

再来看看我最近在新项目中做UI自动化的时候的report,我只列出几个重要的。
首先是overview页面

再来看看每个详细页面。先是defects页面,它会汇总所有失败的脚本,我们点击进去都能看到详细的错误信息

再来看看按feature和story组织case的report页面

统计页面

每个case的详细信息页面

可以看到了我们关联了bug的id,case的id,定制了测试所属的feature,story。测试的title,description。甚至上传的附件(截图),当我们想要看截图的时候,点击图片就会是下面的样子

配置

看过效果图以后我们来定制自己的report吧。首先说一下allure已经集成到各种框架和平台上,也支持多语言。我们看一下它支持的列表。由于本人对java最熟悉,所以例子还是用java的了。

步骤

详细的配置信息请看git上或者官网上的文档吧。我大概说一下步骤和截图。

以下为pom.xml 中Allure 框架与maven集成的必要配置

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>ru.yandex.qatools.allure</groupId>
<artifactId>allure-examples-parent</artifactId>
<version>1.0</version>
</parent>
<artifactId>allure-testng-example</artifactId>
<version>1.0-SNAPSHOT</version>
<properties>
<allure.version>1.4.16</allure.version>
<aspectj.version>1.8.5</aspectj.version>
</properties>
<name>Allure TestNG Report</name>
<description>Allure TestNG and WebDriver Usage Example</description>
<dependencies>
<dependency>
<groupId>ru.yandex.qatools.allure</groupId>
<artifactId>allure-testng-adaptor</artifactId>
<version>${allure.version}</version>
<exclusions>
<exclusion>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
</exclusion>
</exclusions>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<version>2.18.1</version>
<configuration>
<testFailureIgnore>true</testFailureIgnore>
<argLine>
-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
</argLine>
</configuration>
<dependencies>
<dependency>
<groupId>org.aspectj</groupId>
<artifactId>aspectjweaver</artifactId>
<version>${aspectj.version}</version>
</dependency>
</dependencies>
</plugin>
<!--Needed only to show reports locally. Run jetty:run and
open localhost:8080 to show the report-->
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.10.v20150310</version>
<configuration>
<webAppSourceDirectory>${project.build.directory}/site/allure-maven-plugin</webAppSourceDirectory>
<stopKey>stop</stopKey>
<stopPort>1234</stopPort>
</configuration>
</plugin>
</plugins>
</build>
<reporting>
<excludeDefaults>true</excludeDefaults>
<plugins>
<plugin>
<groupId>ru.yandex.qatools.allure</groupId>
<artifactId>allure-maven-plugin</artifactId>
<version>2.2</version>
</plugin>
</plugins>
</reporting>
</project>

本机调试执行以下命令后浏览器里打开 http://localhost:8080 查看结果


$ mvn clean test
$ mvn site
$ mvn jetty:run

与Jenkins集成

Jenkins 插件管理页面,可选插件里 搜索 Allure Jenkins Plugin 安装
系统设置页面里 安装 Allure Commandline,安装完成效果如下:

打开自动化测试job 配置页面里 添加 “增加构建后操作步骤” 选择 “Allure Report” 效果如下:

OK,这样大家就配置好自己的服务了,在本机运行命令或者配置到jenkins上就可以看到默认的report了。 如果在本机运行的话,它其实是开启了一个web 服务的,大家要使用jetty来运行

定制report

我们上面看到了如何将allure引入到我们项目中来,现在我们说说怎么定制我们的report吧。因为进过上面的配置我们看到的是默认的report。如果我们希望测试脚本能够显示一些特性信息或者按特定的结构组织在report里的话。是需要使用一些allure自己提供的机制的。我以java为例说明一下。
其实很简单,因为我使用的是testng,所以在maven中引入的是allure-testng-adaptor。这样我可以配合allure自己的标注完成这些事情。如下:

    @Issue("AG-2759823")
@TestCaseId("AG-450234")
@Features(Feature.SMOKE)
@Stories("DAG图所有算子的运行测试")
@Title("冒烟测试_所有算子运行_正常测试")
@Description("测试一个流程,用作回归冒烟测试")
@Test(dataProvider="unitDataProvider",dataProviderClass=UnitDataProvider.class,groups={"AG","smoke"})
@DataFile(filePath="data/agTest/workFlow.xml")
public void workFlow(String sql, String schema,String pyscript){

这是一个标准的测试方法的签名其中Test标注是testng自己的我们不去管,DataFile是我为数据驱动封装的标签我们也不管。 那么其他的就是allure给我们提供的标注。

  1. Features:将case分类到某个feature中
  2. Stories:属于feature之下的结构,说明此用例是某个feature中的某个story下的用例
  3. Title: 测试用例的标题
  4. Description: 测试用例的描述
  5. Issue: 跟测试用例相关的bug Id(这是一个链接,可以配置bug管理系统的URL,直接跳转到bug管理系统中)
  6. TestCaseId:测试用例的id(这是一个连接,可以配置用例管理系统的URL,直接跳转到用例管理系统中)

其实还有@Step@parameters@environment等标注可以使用,我在这里不细说了。大家可以去看官方文档。通过上面的一系列标注其实我们就可以按照自己喜欢的方式去管理case在report中的结构和信息。如下面的效果图

附件

下面说说怎么上传附件到report中把。其实大家最关心的就是UI自动化中失败后的截图吧。 做到这点同样很简单,我们看下面的例子。

public class AllureReporterListener implements IHookable {

@Override
public void run(IHookCallBack callBack, ITestResult testResult) {

callBack.runTestMethod(testResult);
if (testResult.getThrowable() != null) {
try {
takeScreenShot(testResult.getMethod().getMethodName());
} catch (IOException e) {
e.printStackTrace();
}
}
}


@Attachment(value = "Failure in method {0}", type = "image/png")
private byte[] takeScreenShot(String methodName) throws IOException {

return ((TakesScreenshot)WebDriverRunner.getWebDriver()).getScreenshotAs(OutputType.BYTES);
}
}

注意到下面的那个takeScreenShot方法么? 上面有个一个@Attachment标注,这就是allure为附件预留的,只要你执行了带有这个标注的方法,这个附件就会在report中显示出来,上面的例子我是写了一个监听器,如果测试失败就截图。

踩过的坑

一开始使用的时候踩过一些坑,有些我已经忘了,现在趁我还记得几个就在这里记录下来,如果大家也碰见了可以借鉴一下。

testng无法上传附件的问题

这已经被标记为一个bug提交到git上并且开发团队已经计划在修复,原因是allure跟testng的监听器的兼容问题。解决方法其实就是我上面例子中使用的,自己实现一个IHookable 监听器并显示的在测试类中标注。如下:

@Listeners({ AllureReporterListener.class })
@DataManage(recoveryStrategy=RecoveryStrategy.METHOD)
public class WorkFlowTest extends BaseTestCase {
jenkins的allure插件在slave机上的jdk问题

如果你的测试是在slave机器上执行的而且恰巧你的JAVA_HOME环境变量跟jenkins master机不一样的话。可能就会碰到report无法生成的错误。会提示你JAVA_HOME指向的目录不存在或者找不到jdk。这是因为不知道什么原因它在使用master机上的JAVA_HOME。 解决方案是我们要修改slave机上的一个文件。jenkins会在salve机中安装allure上的工具,里面有一个文件叫allure.bat。编辑这个文件,如下:

可以看到这里原来应该是JAVA_HOME,而我直接改成了salve机的JAVA_HOME路径

maven依赖有问题

我曾经碰见过在运行的时候maven的包没有下载下来的情况。当时百思不得其解。于是我的一个同事比较聪明,它在git上下载了一个allure report的demo项目。运行这个demo项目就自动把包都下载下来了。大家如果也碰见了的话可以到git上下载相应的demo项目。例如我的testng的项目就是:allure-testng-example

尾声

好了今天就说到这里吧,还在使用老的report体系的同学们赶紧把它扔了吧。这个report的效果十分酷炫

如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
共收到 41 条回复 时间 点赞

就是缺这些框架用

—— 来自TesterHome官方 安卓客户端

还有个ExtentReports也不错,只生成单个HTML页面,界面也漂亮

好好学习一下

能比较一下和extentReport的区别及长处吗

@ycwdaaaa 我用allure report框架, 执行mvn test site 的时候在allure-results会产生针对一个class重复的俩条记录, 在allure report 也是重复的。 但是用testNG的report,report 里的用例数量是正常的,没有重复。 有什么办法解决吗?

#5楼 @sakura 这个我没有碰到过啊~~

执行mvn site的时候是失败的报错
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-site-plugin:3.3:si
te (default-site) on project allure-testng-example: Error during page generation
: Error rendering Maven report: Can't generate allure report data: java.lang.ref
lect.InvocationTargetException: Could not find any allure results -> [Help 1]
这是什么错啊 大神遇到过吗@ycwdaaaa

jenkins 中 allure-report 都是生成在每次 build 的结果里面的, 怎么汇总查看呢?

问题解决了, 加上中间的参数后, 可以直接打开了

java -Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';" -jar /Applications/Jenkins/jenkins.war 8080

在 jenkins 中构建完后, allure-report 生成成功了. 但是在结果页面点击 "Allure Report" 打开页面是空白的, 这个需要怎么设置呢?
点击 "Allure Report" 后链接地址是:
http://localhost:8080/job/AppBrowse/18/allure/ 或者 http://localhost:8080/job/AppBrowse/allure/

[workspace] $ /Users/smzdm/allure-commandline/bin/allure generate "/Users/smzdm/git/AppBrowse/screenshots" "/Users/smzdm/.jenkins/workspace/allure5286825203718325115.tmp/environment" -o "/Users/smzdm/.jenkins/workspace/allure5286825203718325115.tmp/allure-report"
Report successfully generated to the directory </Users/smzdm/.jenkins/workspace/allure5286825203718325115.tmp/allure-report>. Use `allure report open` command to show the report.
Finished: SUCCESS

请问在系统设置页面里 如何安装 Allure Commandline 啊 ?? 新手诚心求教,感谢

在 jenkins中Allure Report已经安装成功。报告路径已配置,项目路径也配置,就是怎么关联项目运行起来,现在运行没有报告

Michael_Wang 回复

你的问题解决了吗,我和你遇到了同样的问题,页面空白 一直显示loading

Michael_Wang 回复

java -Dhudson.model.DirectoryBrowserSupport.CSP="default-src 'self'; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline';" -jar /Applications/Jenkins/jenkins.war 8080 这些配置代码 加到什么地方呢》?

不错的report框架

请教一下,jenkins配置了自动安装Allure commandline,构建之后,在生成allure报告时,出现:
java.io.IOException: Can not find allure bin at path '/home/nim/.jenkins/tools/ru.yandex.qatools.allure.jenkins.tools.AllureCommandlineInstallation/allure_1.4.24/bin/allure'
应该是commandline安装失败了,这个怎么办?

张强 回复

我自己来回复吧,这个是jenkins版本太低了~

陆良珏 回复

我也遇到这样的问题。。。请问下你解决了吗

@Features(Feature.SMOKE) 这里面的 Feature.SMOKE 是在哪里预先定义的啊??

@ycwdaaaa 大神,请教个问题, 我在节点机器上执行UI自动化(maven/cmd),那我怎么才能展示我的allure report呢
遇到的坑,1.可以执行mvn jetty:run 但是会卡在一直构筑中.
2.jenkins节点机 能否使用allure插件,然后展示报告.

孙高飞 #21 · May 24, 2017 作者
白纸 回复

我一直用的jenkins上的插件。 简单实用

孙高飞 回复

那节点机执行UI自动化后的,allure 报表是怎么展示的呢

怎么mvn配置这么多东西。。。。

GUOQX 回复

我也遇到一样的问题,请问怎么解决的啊

佳佳 回复

因为你的结果allure results没有生成或者没有生成在指定的目录里

@ycwdaaaa 贴主,今天刚开始用allure,有几个问题请不吝解答.
1.关于图片上传
我也用selenide
按照你提供的方法,把AllureReporterListener 封装成工具类
在测试类里面@Listeners({ AllureReporterListener.class }),然后@test方法里面故意断言个错误,查看jenkins allure报告,截图并没有!
2.jenkins allure 会汇总所有的测试结果,如何快速区分出这一次的测试结果.

白纸 回复

1.已解决,pom文件需要配置true

-javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"

白纸 Allure2-开源 report 框架介绍 (Allure+Jenkins) 中提及了此贴 10 Jul 17:05

使用@Description 这个方法,为什么在报告里不显示呢,是哪里配置不对吗?

@ycwdaaaa 在使用jenkins发邮件时,怎么直接显示成功与失败个数在邮件正文里

jjj 回复

这个我也不知道😂

33Floor has been deleted

WebDriverRunner是要导入三方包吗?我程序显示这个错

lu 回复

那个是selenied的方法。

孙高飞 回复

那我的这个错误,是需要在pom文件中配置这个包吗?没用这个这个包,能说下怎么解决吗,谢谢

这技术文章太狠了!

我的运行完,启动报告后,overview只有一个地方有数据,其他区域没有数据

以下是关于allure在pom.xml文件中的配置:

怎么运行出html版的报告呢?我按照楼主方法生成的报告不是allure的

@DataFile(filePath="data/agTest/workFlow.xml")
楼主,我想问下,这个通过注解对Test方法进行传参,是怎么实现的?我之前有写过反射来解决,但是写出来的代码非常不优雅,解析注解的代码到处都是。
我想学习下你是怎么做的。

Author only

用的版本:pytest-allure-adaptor-1.7.10 ,pytest:3.8.0,pyrhon:3.7, 运行时总是报错:ValueError: option names {'--alluredir'} already added,想问一下楼主有遇到这个问题吗?

@DataFile(filePath="data/agTest/workFlow.xml")
楼主能说一下这个注解是怎么实现的么?

阿廉 Allure 报告生成踩坑与持续集成方法 中提及了此贴 28 Nov 16:03


请问各位大神,报告其他页面都是好的,就是分类页面报404,有什么好的解决方案吗?

lizzyzd 回复

现在pytest对pytest-allure-adaptor已经不支持了,应该用allure-pytest

需要 Sign In 后方可回复, 如果你还没有账号请点击这里 Sign Up