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

猜你喜欢

转载自blog.csdn.net/hualusiyu/article/details/85246546