JUnit5实战二

霍格沃兹测试开发学社

ceshiren.com

大纲

  • 多断言
  • yaml文件解析
  • 动态生成测试用例
  • 并行测试
  • allure报告

多断言

  • assertAll(heading, executables)

  • 聚合所有断言

    • heading

      • 断言失败显示的说明内容
    • executables

      • 多个断言的stream流

yaml解析提供参数化

  • 编写对应yaml文件
  • 编写对应实体类
  • 添加相关依赖
  • 文件解析
  • 测试方法参数化改造

add.yaml

  • 添加到src/test/resources
datas:
    - a: 1
      b: 1
      result: 2
      message: 有效2个整数【1,1】
    - a: 98
      b: 98
      result: 196
      message: 有效边界值相加【98,98】
    - a: -98
      b: 98
      result: 0
      message: 有效边界值相加【-98,98】
    - a: 98
      b: -98
      result: 0
      message: 有效边界值相加【98,-98】
    - a: -98
      b: -98
      result: -196
      message: 有效边界值相加【-98,-98】
    - a: 100
      b: 0
      result: 0
      message: 无效边界值相加【99,0】
    - a: -100
      b: -1
      result: 0
      message: 无效边界值相加【-99,-1】
    - a: 2
      b: 100
      result: 0
      message: 无效边界值相加【2,99】
    - a: 1
      b: -100
      result: 0
      message: 无效边界值相加【1,-99】

生成对应实体类对象

  • Add.java

    • 和yaml文件名保持一致
  • AData.java

    • 内层数据对象

pom文件添加解析依赖

<properties>
  <!--对应解析-->
  <jackson.version>2.13.1</jackson.version>
</properties>

<dependencies>
  <!--        yaml文件解析-->
  <dependency>
      <groupId>com.fasterxml.jackson.core</groupId>
      <artifactId>jackson-databind</artifactId>
      <version>${jackson.version}</version>
  </dependency>
  <dependency>
      <groupId>com.fasterxml.jackson.dataformat</groupId>
      <artifactId>jackson-dataformat-yaml</artifactId>
      <version>${jackson.version}</version>
  </dependency>
</dependencies>

文件解析

  • Jackson第三方库解析
  • 解析为实体类后 打印验证

参数化方法改造

  • 源MethodSource

  • stream流为实体类的流

动态测试

  • yaml文件解析
  • 动态测试创建

shell_test_result.yaml

  • case及结果
resultList:
  - caseName : 'case_1_1'
    result : true
  - caseName : 'case_1_2'
    result : false
  - caseName : 'case_2_1'
    result : true
  - caseName : 'case_2_2'
    result : false
  - caseName: 'case_1_1'
    result: true
  - caseName: 'case_1_2'
    result: false
  - caseName: 'case_2_1'
    result: true
  - caseName: 'case_2_2'
    result: false
  - caseName: 'case_1_1'
    result: true
  - caseName: 'case_1_2'
    result: false
  - caseName: 'case_2_1'
    result: true
  - caseName: 'case_2_2'
    result: false

动态测试创建

  • @TestFactory实现
  • 没有beforeeach/beforeall概念
  • 返回DynamicTest集合

并行测试

junit.jupiter.execution.parallel.enabled = true
junit.jupiter.execution.parallel.mode.default = concurrent
junit.jupiter.execution.parallel.mode.classes.default = same_thread


junit.jupiter.execution.parallel.config.strategy=fixed
junit.jupiter.execution.parallel.config.fixed.parallelism=8

并行测试

  • 第一个是方法,第二个是类

Allure实战

  • 命令行验证版本

  • 添加相关依赖到pom文件

  • 编写相关测试用例

命令行验证版本

  • 安装allure

  • 命令行输入allure --version查看版本号

pom依赖


    <properties>
		<!--allure报告-->  
		<allure.version>2.17.2</allure.version>
        <aspectj.version>1.9.5</aspectj.version>
    </properties>




    <dependencies>

		<!--        allure报告-->  
		<dependency>  
		    <groupId>io.qameta.allure</groupId>  
		    <artifactId>allure-junit5</artifactId>  
		    <version>${allure.version}</version>  
		</dependency>

    </dependencies>


    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>${maven-surefire-plugin.version}</version>
				<configuration>  
				<!-- <includes>  
						 <include>${test.suite}</include>
					</includes>--> 
				<!--<properties> 
						<property> 
							<name>listener</name> 
							<value>io.qameta.allure.junit5.AllureJunit5</value> 
						</property> 
					</properties> --> 
				<!--<systemProperties> 
						<property> 
							<name>allure.results.directory</name> 
							<value>${project.build.directory}/allure-results</value> 
						</property> 
						<property> 
							<name>junit.jupiter.extensions.autodetection.enabled</name> 

							<value>true</value> 
						</property> 
					</systemProperties> 
					<reportFormat>plain</reportFormat>--> 
				<argLine>  
				        -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"  
				    </argLine>
				</configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.junit.jupiter</groupId>
                        <artifactId>junit-jupiter-engine</artifactId>
                        <version>${junit.jupiter.version}</version>
                    </dependency>
                    <dependency>
                        <groupId>org.junit.vintage</groupId>
                        <artifactId>junit-vintage-engine</artifactId>
                        <version>${junit.jupiter.version}</version>
                    </dependency>
                </dependencies>
            </plugin>
        </plugins>
    </build>

allure基本注解

注解 说明
@DisplayName 显示名称;类和方法上的注解
@Description 测试方法详细描述
@Step 定义对应的步骤
Attachment 动态添加附件

allure.properties

allure.results.directory=target/allure-results

pom

<configuration>
    <argLine>
        -javaagent:"${settings.localRepository}/org/aspectj/aspectjweaver/${aspectj.version}/aspectjweaver-${aspectj.version}.jar"
    </argLine>
    <!--生成allure-result的目录-->
    <systemProperties>
        <property>
            <name>allure.results.directory</name>
            <value>./target/allure-results</value>
        </property>
    </systemProperties>
</configuration>

优先级

  • allure配置文件
  • pom配置

@Step

  • 直接使用步骤
  • 自定义步骤显示内容

Attachment

Allure.addAttachment("动态上传图片", "image/jpg",new FileInputStream("./logo.jpg"),".jpg");

修改allure报告图片

https://ceshiren.com/t/topic/14834