1. Junit单元测试框架
- Junit 是 Java 的一个单元测试框架, 使用Selenium写自动化测试用例, 使用Junit 管理写好的测试用例.
2. 注解:
- @Test 表示当前的这个方法是一个测试用例.
示例:
- 添加依赖
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.9.1</version> <scope>test</scope> </dependency>
- 编码
- 不能有修饰符
- 返回值为空
- @Disabled 被修饰的方法将不会被执行.
@BeforeAll , @AfterAll
- 针对整个类起作用, 被修饰的方法需要添加static关键字
- @BeforeAll 一般用于初始化, 如果做UI自动化,通常用于创建驱动,打开网页,
- @AfterAll 一般用于扫尾工作,如果做UI自动化, 通常用于关闭浏览器
- @BeforeEach, @AfterEach
- 在每个方法执行前后执行
3. 参数化:
首先引入Parameterized依赖 (与Junit 版本保持一致):
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.9.1</version> <scope>test</scope> </dependency>
- 传递单参数 使用 @ValueSource() 注解
- 传递int型参数
@ParameterizedTest @ValueSource(ints = {1,2,3}) void Test(int num) { System.out.println(num); }
- 传递字符串类型参数
@ParameterizedTest @ValueSource(strings = {"1","2", "3"}) void Test2(String str) { System.out.println(str); }
- 多参数
通过 @CsvFileSource 注解获取参数
1. 添加CSV文件
2. 编码@ParameterizedTest @CsvFileSource(resources = {"test1.csv"}) void Test3(String name) { System.out.println(name); }
运行结果:
- 通过方法获取参数
public static Stream<Arguments> Generator() { return Stream.of(Arguments.arguments(1,"张三"), Arguments.arguments(2,"李四"), Arguments.arguments(3,"王五") ); } @ParameterizedTest @MethodSource("Generator") void Test4(int num,String str) { System.out.println(num+","+str); }
4. 设置顺序
使用 @org.junit.jupiter.api.Order() 配置测试用例执行顺序
- 示例:设置顺序
import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.TestMethodOrder; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class Order { @ParameterizedTest @ValueSource(ints = {1,2,3}) @org.junit.jupiter.api.Order(2) void Test1(int num) { System.out.println("Test1"); System.out.print(num); } @ParameterizedTest @ValueSource(strings = {"1","2", "3"}) @org.junit.jupiter.api.Order(1) void Test2(String str) { System.out.println("Test2"); System.out.print(str); } }
- 示例:随机执行
import org.junit.jupiter.api.MethodOrderer; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.TestMethodOrder; @TestMethodOrder(MethodOrderer.Random.class) public class Order { @Test void Test1() { System.out.println("Test1"); } @Test void Test2() { System.out.println("Test2"); } }
5. 断言
- 断言相等
- 断言不相等
- 断言为空
- 断言不为空
- 通过 Assertions 实现断言
示例: 断言相等import org.junit.jupiter.api.Assertions; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; public class AssertTest { @ParameterizedTest @ValueSource(ints = {1}) void Test (int num){ System.out.println(num); // 判断 num == 1 ? Assertions.assertEquals(num,1); } }
import org.junit.jupiter.api.Assertions; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.ValueSource; public class AssertTest { @ParameterizedTest @ValueSource(ints = {1}) void Test (int num){ System.out.println(num); // 判断 num == 1 ? Assertions.assertEquals(num,2); } }
7. Suite
首先引入maven依赖
<dependency> <groupId>org.seleniumhq.selenium</groupId> <artifactId>selenium-java</artifactId> <version>3.141.59</version> </dependency> <!-- https://mvnrepository.com/artifact/commons-io/commons-io --> <dependency> <groupId>commons-io</groupId> <artifactId>commons-io</artifactId> <version>2.11.0</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-api --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-api</artifactId> <version>5.9.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.9.1</version> </dependency> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-suite</artifactId> <version>1.9.1</version> <scope>test</scope> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite --> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-suite</artifactId> <version>1.9.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.9.1</version> <scope>test</scope> </dependency>
- 通过添加@Suit 和 @SelectClasses 注解指定Class
import org.junit.platform.suite.api.SelectClasses; import org.junit.platform.suite.api.Suite; @Suite @SelectClasses({AssertTest.class,Main.class,Order.class}) // 依次执行 AssertTest.class、Main.class、Order.class 三个类中的测试方法 public class RunSuite { }
- 通过添加@Suit 和 @SelectPackages 注解 指定package