目录
- 支持Java的最低版本为8
- 在pom.xml添加依赖
- Junit提供的注解功能
- 断言 Assertion类提供的一些方法
- 测试用例执行顺序 (为了预防测试用例执行顺序错误)
- 参数化 (假设登陆操作,用户名和密码很多,尽可能通过一个测试用例用一组参数来模拟用户登陆)
- 测试套件 (适用于跑测试类里面所有的测试用例)
-
此测试工具支持Java的最低版本为8
-
在pom.xml添加依赖
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>5.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-suite</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
-
Junit提供的注解功能
- @Test(表示方法是测试方法,可以自己去执行不需要调用,执行这个当前类时,会自动执行该类下所有带@Test注解的用例)
import org.junit.jupiter.api.Test; public class Test1 { @Test void test1(){ System.out.println("aaa"); } @Test void test2(){ System.out.println("bbb"); } @Test void test3(){ System.out.println("ccc"); } } 打印 aaa bbb ccc
- @BeforeEach(当前方法需要在每一个用例执行前执行一次)
public class Test1 { @BeforeEach void test1(){ System.out.println("aaa"); } @Test void test2(){ System.out.println("bbb"); } @Test void test3(){ System.out.println("ccc"); } } 打印 aaa bbb aaa ccc
- @BeforeAll(需要静态方法,当前方法需要在所有用例执行前执行一次)
public class Test1 { @BeforeAll @Test static void test1(){ System.out.println("aaa"); } @Test void test2(){ System.out.println("bbb"); } @Test void test3(){ System.out.println("ccc"); } } 打印: aaa bbb ccc
- @AfterEach(前方法需要在每一个用例执行后执行一次)
public class Test1 { @Test static void test1(){ System.out.println("aaa"); } @AfterEach void test2(){ System.out.println("bbb"); } @Test void test3(){ System.out.println("ccc"); } } 打印:ccc bbb
- @AfterAll(需要静态方法,当前方法需要在当前类下所有用例之前执行一次)
public class Test1 { @AfterAll @Test static void test1(){ System.out.println("aaa"); } @Test void test2(){ System.out.println("bbb"); } @Test void test3(){ System.out.println("ccc"); } } 打印:bbb ccc aaa
-
断言 Assertion类提供的一些方法
- assertEquals---匹配
void dili1(){ //启动驱动 ChromeOptions options=new ChromeOptions(); options.addArguments("--remote-allow-origins=*"); ChromeDriver driver=new ChromeDriver(options); //输入网址 driver.get("http://baidu.com"); //打印百度一下 String ret=driver.findElement(By.cssSelector("#su")).getAttribute("value"); //打印文本 System.out.println(ret); //断言一下 Assertions.assertEquals("百度两下",ret); //退出程序 driver.quit(); } 、、此时程序会报错,与我们断言的不一致
- assertNotEquals---不匹配
Assertions.assertNotEquals("百度两下",ret);
- assertTrue---结果为真
- assertFalse---结果为假
Assertions.assertTrue(1==0);
- assertNull---结果为空
- assertNotNull---结果不为空
Assertions.assertNull("","你好");
-
测试用例执行顺序 (为了预防测试用例执行顺序错误)
注意:order只代表用例的执行顺序,Test注解不可以删除 ,否则程序不能执行
//写在类前面,代表当前类所有方法通过order注解来排序 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class Test2 { //用例的执行顺序 @Order(2) @Test void logintest(){ System.out.println("logintest"); } @Order(1) @Test void indextest(){ System.out.println("indextest"); } @Order(3) @Test void edittest(){ System.out.println("edittest"); } }
-
参数化 (假设登陆操作,用户名和密码很多,尽可能通过一个测试用例用一组参数来模拟用户登陆)
- 一般使用参数化注解就不能用@Test注解了
- 单参数,首先要声明方法为参数化方法@ParameterizedTest
@ParameterizedTest @ValueSource(strings = {"luncy,maty"}) void single(String name){ System.out.println(name); }
- 多参数
@ParameterizedTest @CsvSource({"lili,123434","xiaohau,22334","12233,xiaojia"}) void many(String name,String age){ System.out.println("name: "+name+"age: "+age); }
- 文件上传参数(从外部csv去读取)
- 动态参数方法来提供数据源
-
测试套件 (适用于跑测试类里面所有的测试用例)
- 先用@Suite来标注是测试套件
- 用@SelectClasses来指定要跑哪个测试类(注意这个测试类里面的方法都要加上@Test注解)
- 选择包名来执行对应的测试用例,(该包下的所有测试类命名必须以Test/Tests结尾)