目录
Junit5的依赖
1,注解
1),@Test
?2),Before
3),After
2,断言
3,用例执行顺序(没有确切得执行顺序,自己定义执行顺序)
@Order:方法排序
4,参数化:当测试方法要使用多个参数,或者是由多个测试用例,可以通过参数化,从文件或者从方法,或者从数组中获取测试用例。
单参数:
多参数:
多参数文件读入:
?多参数本地文件输入
动态单参数:
动态多参数:
5,测试套件:通过在一个类上定义套件注解,将多个测试类得测试方法一次性全部执行
Junit:开源的java单元测试框架
Junit官方文档:Junit.org
Junit5的依赖
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.11</version>
<scope>test</scope>
</dependency>
<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>
<dependency>
<groupId>org.junit.platform</groupId>
<artifactId>junit-platform-reporting</artifactId>
<version>1.8.2</version>
<scope>test</scope>
</dependency>
private ChromeDriver driver = new ChromeDriver();
1,注解
1),@Test
@Test
public void zhujieTest(){
driver.get("http://www.baidu.com");
driver.findElement(By.cssSelector("#kw")).sendKeys("123");
driver.quit();
}
?2),Before
@BeforeEach:在每个方法执行前都要执行一遍
@BeforeAll:所有方法执行前只需要执行一遍
使用BeforeAll的方法必须是静态的。
3),After
@AfterEach:所有方法执行后都需要执行一遍
@AfterAll:所有方法执行结束最后在执行一次
2,断言
预言测试用例的测试结果
@Test
driver.get("http://www.baidu.com");
String value = driver.findElement(By.cssSelector("#su")).getAttribute("value");
Assertions.assertEquals("百度一下",value);//断言结果为百度一下
Assertions.assertTrue("百度一下".equals(value));//断言结果为百度一下
Assertions.assertFasle("百度一下".equals(value));//断言结果为百度一下
Assertions.assertNull(value);//断言结果为null
Assertions.assertNotNull(value);//断言结果不为空
3,用例执行顺序(没有确切得执行顺序,自己定义执行顺序)
@Order:方法排序
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)//按照自定义顺序排序
public class OrderTest {
@Test
@Order(3)
public void fdsa(){
System.out.println(1);
}
@Test
@Order(1)
public void sdfs(){
System.out.println(2);
}
@Test
@Order(4)
public void fa(){
System.out.println(3);
}
@Test
@Order(2)
public void gdsg(){
System.out.println(4);
}
}
多个测试用例之间需要排序,在测试中多个测试用例之间可能存在关联关系,不定义执行顺序会导致执行的顺序发生变化,出现错误。
4,参数化:当测试方法要使用多个参数,或者是由多个测试用例,可以通过参数化,从文件或者从方法,或者从数组中获取测试用例。
单参数:
@ParameterizedTest//参数化注解,需要添加参数来源
@ValueSource(strings = {"fds","yy","pp"})//参数来
public void paratest(String name){
System.out.println(name);
}
多参数:
@ParameterizedTest
@CsvSource(value = {"name1,10","name2,12","name,23"})//多参数
public void test(String name,int age){
System.out.println(name+":"+age);
}
多参数文件读入:
@ParameterizedTest
@CsvFileSource(resources = {"/my.csv"})
public void fromFile(String name,int age){
System.out.println(name+":"+age);
}
?多参数本地文件输入
@ParameterizedTest
@CsvFileSource(files = {"文件路径+文件名"})
public void fromFileLocal(String name,int age){
System.out.println(name+":"+age);
}
动态单参数:
//动态参数
@ParameterizedTest
@MethodSource("method")
public void formMethod(String s){
System.out.println(s);
}
//定义提供数据流的方法
public static Stream<String> method(){
return Stream.of("张三","李四","王五");
}
//动态参数
@ParameterizedTest
@MethodSource//不指定数据来源,默认找同名的静态方法
public void method(String s){
System.out.println(s);
}
//定义提供数据流的方法
public static Stream<String> method(){
return Stream.of("张三","李四","王五");
}
动态多参数:
//多参数动态参数
@ParameterizedTest
@MethodSource
public void fromMethodMulti(String name,int age){
System.out.println(name + ":" + age);
}
static Stream<Arguments> fromMethodMulti(){
return Stream.of(Arguments.arguments("lili",19),Arguments.arguments("lele",20));
}
5,测试套件:通过在一个类上定义套件注解,将多个测试类得测试方法一次性全部执行
@org.junit.platform.suite.api.Suite
@SelectClasses({autoTest.class,OrderTest.class})//按照类测试
@org.junit.platform.suite.api.Suite
@SelectPackages("com.Junit")//按照包名调用
//通过测试套件,将所有的测试类,一次启动执行全部类的测试方法
@org.junit.platform.suite.api.Suite
@SelectClasses({autoTest.class,OrderTest.class})
public class Suite {
}
套件下的所有测试方法,都需要有@Test注解
|