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 {@Testvoid Test1() {System.out.println("Test1");}@Testvoid 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