JUnit
- 注解
- @test 注解
- @BeforeEach 注解
- @BeforeAll
- @ AfterEach
- @AfterAll
- 断言
- assertEquals
- assertNotEquals
- assertTrue
- 用例执行顺序
- 测试套件
- 指定类,添加到套件中并执行
- 一次添加一个包的类
- 参数化
- 单参数
- 多参数
- 借助文件
- 动态参数
注解
@test 注解
通过对方法加上 @test 注解,就可以直接运行方法进行测试:
@Test
void Test() {
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
driver.findElement(By.cssSelector("#kw")).sendKeys("火锅");
driver.quit();
}
@BeforeEach 注解
就是在执行其它测试方法之前,会先执行这个注解的方法:
@BeforeEach
void aaa() {
System.out.println("aaa");
}
@Test
void bbb() {
System.out.println("bbb");
}
@Test
void ccc() {
System.out.println("ccc");
}
运行结果如下:
@BeforeAll
不过要注意的是 @BeforeAll 注解的方法必须是 static 的:
@BeforeAll
@Test
static void aaa() {
System.out.println("aaa");
}
@Test
void bbb() {
System.out.println("bbb");
}
@Test
void ccc() {
System.out.println("ccc");
}
运行结果如下:
@ AfterEach
@AfterEach 注解就是在方法之后执行这个方法:
@AfterEach
void aaa() {
System.out.println("aaa");
}
@Test
void bbb() {
System.out.println("bbb");
}
@Test
void ccc() {
System.out.println("ccc");
}
运行结果如下:
@AfterAll
@AfterAll 注解的作用是在所有测试方法后执行:
@AfterAll
static void aaa() {
System.out.println("aaa");
}
@Test
void bbb() {
System.out.println("bbb");
}
@Test
void ccc() {
System.out.println("ccc");
}
运行结果如下:
断言
assertEquals
通过 Assertions.assertEquals 可以判断元素的 value 值与期望值相不相等:
@Test
public void test1() {
//测试百度首页内容显示是否正确
ChromeDriver driver = new ChromeDriver();
//进入百度网站
driver.get("https://www.baidu.com");
String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
Assertions.assertEquals("百度一下",text);
driver.quit();
}
因为预期结果与实际结果是一样的,所以测试是可以通过的。
assertNotEquals
和 assertEquals 正好相反,也就是与期望值不一样的时候,可以通过:
@Test
public void test1() {
//测试百度首页内容显示是否正确
ChromeDriver driver = new ChromeDriver();
//进入百度网站
driver.get("https://www.baidu.com");
String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
Assertions.assertNotEquals("百度一下",text);
driver.quit();
}
因为与期望值一样,所以这里是不通过的。
assertTrue
参数是一个表达式,如果表达式为真,就通过:
@Test
public void test1() {
//测试百度首页内容显示是否正确
ChromeDriver driver = new ChromeDriver();
//进入百度网站
driver.get("https://www.baidu.com");
String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
Assertions.assertTrue(text.equals("百度一下"));
driver.quit();
}
用例执行顺序
通过 JUnit 里面提供的方法来手动设置用例的执行顺序。通过 @TestMethodOrder(MethodOrderer.OrderAnnotation.class) 方法排序来完成。不排序的时候:
public class AutoTest {
@Test
void aaa() {
System.out.println("aaa");
}
@Test
void bbbbb() {
System.out.println("bbb");
}
@Test
void cccc() {
System.out.println("ccc");
}
@Test
void dddddd() {
System.out.println("ddd");
}
}
运行结果如下:
排序的时候 通过 @Order 注解来进行排序,标注执行顺序:
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class AutoTest {
@Test
@Order(1)
void aaa() {
System.out.println("aaa");
}
@Test
@Order(2)
void bbbbb() {
System.out.println("bbb");
}
@Test
@Order(3)
void cccc() {
System.out.println("ccc");
}
@Test
@Order(4)
void dddddd() {
System.out.println("ddd");
}
}
运行结果如下:
测试套件
主要就是针对很多个测试类来进行测试,比如说要一次测试多个类,并且去进行测试。
指定类,添加到套件中并执行
适用于添加少量的几个类
通过 @Suite 来把多个类加在一起,就可以一次性进行测试了:
@Suite
@SelectClasses({AutoTest.class,AutoTest2.class})
public class RunAllSuite {
}
运行结果如下:
一次添加一个包的类
通过 @SelectPackages() 注解来实现一次添加一个包里面的测试类。不过要注意的是,测试类的名字,必须是以 Test 结尾的,否则不会进行测试:
@Suite
@SelectPackages("com.example.onlinemusic.autotest")
public class RunAllSuite {
}
运行结果如下:
参数化
单参数
对方法使用 @ParameterizedTest 注解就可以了,要配合 @ValueSource 来找到数据源:
@ParameterizedTest
@ValueSource(strings = {"火锅","辣条","螺蛳粉","面条"})
void test(String name) {
System.out.println("name: "+name);
}
数据来源就是 ValueSource 里面的参数。运行结果如下:
多参数
通过 @CsvSource(value = ) 注解来实现,默认分隔符是 逗号:
@ParameterizedTest
@CsvSource(value = {"火锅,20","辣条,30","螺蛳粉,40","铁锅炖大鹅,50"})
void test(String name, int age) {
System.out.println("name: "+name + " age: " + age);
}
运行结果如下:
也可以通过 delimiterString =
来指定分隔符。
借助文件
通过 @CsvFileSource(resources = )
来读取文件,然后进行操作,指定文件路径为当前项目下 resources 目录下的 my.scv 文件:
@ParameterizedTest
@CsvFileSource(resources = "/my.csv")
void test(String name, int age) {
System.out.println("name: "+name + " age: " + age);
}
动态参数
通过 @MethodSource() 注解来提供参数:
@ParameterizedTest
@MethodSource("test2")
void test1(String x) {
System.out.println(x);
}
//定义提供数据的方法,可以是 Stream 流
static Stream<String> test2() {
return Stream.of("火锅","辣条","螺蛳粉");
}
运行结果如下: