zoukankan      html  css  js  c++  java
  • TestNG + Allure + Maven

    Allure

    官网
    allure-commandline下载地址(下载后bin目录加入PATH中)
    demo

    命令

    $ allure --version
    # 生成报告(自动在浏览器中打开)
    $ allure serve /home/path/to/project/target/surefire-reports/
    

    TestNG + Allure + Maven

    pom.xml

    <?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>
    
        <groupId>io.qameta.allure</groupId>
        <artifactId>allure-testng-example</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <allure.version>2.13.2</allure.version>
            <java.version>1.8</java.version>
            <aspectj.version>1.9.5</aspectj.version>
            <testng.version>7.1.0</testng.version>
            <!--解决中文乱码问题-->
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
            <project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
        </properties>
    
        <name>Allure TestNG Example</name>
        <description>Allure TestNG Example</description>
    
        <dependencies>
            <dependency>
                <groupId>org.testng</groupId>
                <artifactId>testng</artifactId>
                <version>${testng.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>io.qameta.allure</groupId>
                <artifactId>allure-testng</artifactId>
                <version>${allure.version}</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.hamcrest</groupId>
                <artifactId>hamcrest-all</artifactId>
                <version>1.3</version>
                <scope>test</scope>
            </dependency>
            <dependency>
                <groupId>org.slf4j</groupId>
                <artifactId>slf4j-simple</artifactId>
                <version>1.7.30</version>
                <scope>test</scope>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-surefire-plugin</artifactId>
                    <version>2.22.2</version>
                    <configuration>
                        <argLine>
                            -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
                        </argLine>
                        <!--这里可以加上一些testng.xml(如果不加的话是找test目录下:以Test开头的Java类、以Test结尾的Java类、以TestCase结尾的Java类)-->
                        <suiteXmlFiles>
                            <!--路径是从工程根目录开始的-->
                            <suiteXmlFile>src/main/resources/testng.xml</suiteXmlFile>
                        </suiteXmlFiles>
                    </configuration>
                    <dependencies>
                        <dependency>
                            <groupId>org.aspectj</groupId>
                            <artifactId>aspectjweaver</artifactId>
                            <version>${aspectj.version}</version>
                        </dependency>
                    </dependencies>
                </plugin>
            </plugins>
        </build>
    
        <reporting>
            <excludeDefaults>true</excludeDefaults>
            <plugins>
                <plugin>
                    <groupId>io.qameta.allure</groupId>
                    <artifactId>allure-maven</artifactId>
                    <version>2.10.0</version>
                    <configuration>
                        <reportVersion>${allure.version}</reportVersion>
                    </configuration>
                </plugin>
            </plugins>
        </reporting>
    
    </project>
    

    命令

    # 测试
    $ mvn clean test site
    # 生成在线报告
    $ mvn io.qameta.allure:allure-maven:serve
    # 生成本地报告
    $ mvn io.qameta.allure:allure-maven:report
    

    注解

    TestNG

    注解 说明
    @BeforeSuite 被@BeforeSuite注解的方法,将会在testng定义的xml根元素里面的所有执行之前运行。
    @AfterSuite 被@AfterSuite注解的方法,将会在testng定义的xml根元素里面的所有执行之后运行。
    @BeforeTest 被@BeforeTest注解的方法,将会在一个元素定义的所有里面所有测试方法执行之前运行。
    @AfterTest 被@AfterTest注解的方法,将会在一个元素定义的所有里面所有的测试方法执行之后运行。
    @BeforeClass 被@BeforeClass注解的方法,将会在当前测试类的第一个测试方法执行之前运行。
    @AfterClass 被@AfterClass注解的方法,将会在当前测试类的最后一个测试方法执行之后运行。
    @BeforeMethod 被@BeforeMethod注解的方法,将会在当前测试类的每一个测试方法执行之前运行。
    @AfterMethod 被@AfterMethod注解的方法,将会在当前测试类的每一个测试方法执行之后运行。
    @Test 被@AfterMethod注解的方法,是一个测试方法,既一个测试用例

    Allure

    注解 说明 详情
    @Epic("epic") epic描述 敏捷里面的概念,定义史诗,往下是feature
    @Feature("feature") 模块名称 功能点的描述,往下是story
    @Story("story") 用户故事 用户故事,往下是title
    @Issue("issue") 缺陷 对应缺陷管理系统里面的链接
    @Description("description") 用例描述 测试用例的描述
    @Step("step") 操作步骤 测试用例的步骤
    @Severity(SeverityLevel.NORMAL) 用例等级 blocker,critical,normal,minor,trivial
    @Link("link") 链接 定义一个链接,在测试报告展现
    @Attachment("attachment") 附件 报告添加附件

    对应关系如下所示:

    配置

    testng.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" >
    
    <!--suit是根节点,所以只能有一个(但是可以多文件)-->
    <suite name="SuiteName" verbose="1">
        <test name="TestName_1">
            <!--支持多个class的配置-->
            <classes>
                <class name="test.sample.ParameterSample"/>
                <class name="test.sample.ParameterTest"/>
            </classes>
        </test>
    
        <test name="TestName_2">
            <packages>
                <!--支持多个package的配置,支持通配符-->
                <package name="test.sample"/>
                <package name="test.demo.*"/>
            </packages>
        </test>
    
        <!--同一个test中可以定义多个过滤器(之间的与的关系,即必须两者都满足)-->
        <test name="TestName_3">
            <!--按照group过滤(Test可以有多个组,如果一个Test的多个组同时被include和exclude,那么会执行)-->
            <groups>
                <run>
                    <include name="group_1"/>
                    <include name="group_2"/>
                    <include name="group_3"/>
                    <exclude name="group_4"/>
                </run>
            </groups>
            <classes>
                <class name="test.sample.ParameterSample">
                    <!--支持方法级别的过滤-->
                    <methods>
                        <exclude name="test_1"/>
                    </methods>
                </class>
                <class name="test.sample.ParameterTest">
                    <methods>
                        <include name="test_1"/>
                        <include name="test_2"/>
                        <include name="test_3"/>
                    </methods>
                </class>
            </classes>
        </test>
    </suite>
    

    allure.properties

    # 报告生成目录(注意并不是最终得到html文件,而是一些执行信息)
    allure.results.directory=target/allure-results
    # 用于格式化替换 @Issue("issue") 中的issue
    allure.link.issue.pattern=https://example.org/issue/{}
    # 用于格式化替换 @Link(value = "value", name = "name", url = "url") 中的url
    allure.link.tms.pattern=https://example.org/tms/{}
    

    DEMO

    Attacgment

    MIME 参考手册

    1. value为显示的名称
    2. type字段为MimeType
    3. fileExtension为可选的文件扩展名,必须以 . 开头
    4. 注解用在方法上,返回值即为内容(二进制文件返回byte[]类型),页面上会根据设置的type类型(和后缀名)进行显示
    5. 当然也可以不用注解,而用方法,简单示例如下:
        @Test(description = "test")
        public void test_1() throws Exception {
            attachment("测试普通文本", "哈哈哈哈哈哈哈");
            attachment("测试图片文件", new FileInputStream("E:\Pictures\15030Q05046-1.jpg"));
            addAttachment("测试音频文件", "audio/mpeg", new FileInputStream("E:\Music\曾经有你的森林(中文填词) - wispering - 5SING中国原创音乐基地.mp3"), ".mp3");
            addAttachment("测试JSON字符串", "application/json", "{"code":200}");
        }
    

  • 相关阅读:
    猴子分香蕉
    打鱼晒网
    质数/素数
    三角形-->九九乘法表
    eclipse 导入gradle引入多模块项目,引入eclipse后变成了好几个工程
    linux 命令基础大全
    SQL Server 增加链接服务器
    Postgresql数据库部署之:Postgresql 存在session 会话不能删除数据库
    Postgresql数据库部署之:Postgresql本机启动和Postgresql注册成windows 服务
    Git常用命令使用大全
  • 原文地址:https://www.cnblogs.com/CSunShine/p/13300325.html
Copyright © 2011-2022 走看看