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

孙高飞 · 2016年08月20日 · 最后由 朱zhu 回复于 2019年10月22日 · 8741 次阅读

前言

大家好,没错,又是我这个罗里吧嗦的唐僧。今天唐僧不废话了。给大家介绍一个我正在用的开源 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 插件,然后展示报告.

白纸 回复

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

孙高飞 回复

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

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

月光笛声 回复

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

佳佳 回复

因为你的结果 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) 中提及了此贴 07月10日 17:05

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

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

jjj 回复

这个我也不知道😂

33楼 已删除

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

lu 回复

那个是 selenied 的方法。

孙高飞 回复

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

这技术文章太狠了!

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

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

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

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

在路上 AvatarWebUI 自动化测试工具 中提及了此贴 06月01日 18:35
仅楼主可见

用的版本: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 报告生成踩坑与持续集成方法 中提及了此贴 11月28日 16:03


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

lizzyzd 回复

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

ABEE ycwdaaaa (孙高飞) 在 TesterHome 的发帖整理 中提及了此贴 01月12日 13:47
需要 登录 后方可回复, 如果你还没有账号请点击这里 注册