allure--开源 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

最后欢迎想获得更多教程的同学加入我的星球

  • 24
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
report 是一个开源的访问层中间件,基于java平台,依赖于spring,以Mozilla Public License 2.0 协议发布。适用于目前大部分项目的接口测试。以及访问控制层的使用,简化控制层的繁琐代码,简化spring mvc的配置,剥离了请求控制层前的一系列操作,极大的提高项目开发速度,降低学习开发的成本。report项目请求通道采用责任链模式设计,扩展性极强,流程完全可控! ankang-report report 是一个开源的访问层框架,基于java平台,依赖于spring,以Mozilla Public License 2.0 协议发布。可用于接口的调试及性能的展示,以及访问控制层的使用,简化控制层的繁琐代码,简化spring mvc的配置,剥离的请求前的一系列操作,耦合性低,report是请求通道采用责任链模式设计,轻便可控、扩展性强。report的测试统计等功能为你的每一个接口展示一份完美的报告。 report的关键特性: a)让所有接口可视化,易于控制开发、并行开发 b)为每一个接口提供测试统计以及报表展示 c)简化spring mvc繁琐配置 d)report请求通道采用职责链的模式,扩展性强,完全可控 e)支持多种数据请求方式并可扩展,默认可选json,xml方式 report使用方式: a)maven项目加入report依赖,普通项目则导入jar包 b)引入spring文件 spring/ankang-report.xml,web.xml依赖springMVC配置 c)继承ReportStart类, @Component//通过spring注入 可设置为单例 public class BusinessReportConfig extends ReportStart { @Override protected void reginsterReport() { //注册需要被请求的控制层类 reginster(OrderHandler.class); } @Override protected void reginsterResolver() { // 注册自定义的解析器 没有自定义可忽略 reginster(OrderHandler.class); } } d)启动项目,访问localhost:8080/项目名/report/console report可配置项 a)自定义配置文件需采用指定资源地址:report/report-config.properties b)REPORT_SWITCH:true 则开启,反之关闭 默认开启 c)FILETER:自定义过滤器,多个以逗号隔开 d)JSON_BOAY:json数据请求方式key名称,默认为body e)XML_BODY:xml数据请求方式key名称,默认为root f)MONITOR_FILE_PATH:统计数据保存地址 默认为/report/report.cc g)END_INVOKE:请求通道链终端类。 系统默认 <!--如果不是采用report返回体,则必须配置以下几项,否则影响统计结果--> h)IS_DEFINED_RESPONSE:是否自定义返回体结构 i)RESPONSE_CODE:自定义返回体请求状态码字段名 j)RESPONSE_MESSAGE:自定义返回体请求消息字段名 k)RESPONSE_RESULT:自定义返回体数据对象字段名 l)ENCODE:参数编码格式 m)ERROR400_PAGE_PATH:400时返回页面地址 n)ERROR500_PAGE_PATH:500时返回页面地址 o)ERROR401_PAGE_PATH:401时返回页面地址 report注解解释 a)@Alias:标注在需要被请求的类,value属性值为请求时使用的服务名,没有标注的report将不予以处理 b)@HTTP:标注在需要被请求的方法上,value属性值为请求时的方法名,supportMethod属性值为请求类型,默认支持get和post两种,兼容RquestMapping c)@ReportParam:标注在需要注入方法的参数上,继承至ReportRequest的参数体不需要标注,HttpServletRequest不需要标注,兼容RequestParam d)@Activate:标注在自定义的过滤器上,order属性值为排序值,取值范围int,如有重复则顺延 注:自定义解析器扩展,过滤器扩展等等参照源码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

孙高飞

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值