前言:自动化就是selenium脚本来实现的,JUnit是java的单元测试工具,只不过我们在实现自动化的时候需要借助一下JUnit库里面提供的一些方法。
目录
1、@Test
- @Test :表示方法是测试方法,执行当前这个类的时候,会自动的执行该类下的所以带@Test注解的用例。
- @BeforeEach:当前方法需要在每个用例执行之前都执行一次。
- @BeforeAll:当前的方法需要在当前所有用例之前执行一次,被该注释修饰的方法必须为静态方法。
- @AfterEach:当前方法需要在每个用例执行之后都执行一次。
- @AfterAll:当前的方法需要在当前所有用例之后执行一次,被该注释修饰的方法必须为静态方法。
@Test :
@BeforeEach:
@BeforeAll:
@AfterEach:
@AfterAll:
2、断言—Assertions类
当我们在执行某个用力的时候,对于程序来说结果是对的,但是对于测试人员来说是错误的我们需要用到断言。
断言匹配/不匹配:
@Test
void Test(){
ChromeDriver driver = new ChromeDriver();
driver.get("https://www.baidu.com");
//获取到 百度一下
String text = driver.findElement(By.cssSelector("#su")).getAttribute("value");
//假如期望获取到百度两下
System.out.println(text);
//Assertions.assertEquals("百度两下",text);
Assertions.assertNotEquals("百度两下",text);
driver.quit();
}
断言结果为真/为假:
void ccc(){
Assertions.assertTrue(1 == 1);
Assertions.assertFalse(1 == 0);
}
断言结果为空/不为空:
void ddd(){
Assertions.assertNull("cdgfdg");
Assertions.assertNotNull("dfdfd");
}
3、用例的执行顺序
有些用例的执行顺序并不是和我们要求的一样,每次变换顺序又十分麻烦,可以有以下方法:
3.1 通过order注解来排序
@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
public class junitTest {
@Test
@Order(1)
void baseAnnotate(){
System.out.println("junit!!!!!!!!!!");
}
@Test
@Order(2)
void aaa(){
System.out.println("aaaaa");
}
@Test
@Order(3)
void bbb(){
System.out.println("bbbbb");
}
}
注:先要用注解来说明当前类下所有的用例需要使用order注解来进行排序,该注解必须用在类上
3.2 参数化
尽可能地通过一个用例,多组参数化来模拟用户的行为。
在使用参数化注解之前需要声明该方法为参数化方法 @ParameterizedTest
单参数:@ValueSource(数据类型方法 = {参数一,参数二。。。。})
代码及运行结果如下:
@ParameterizedTest
@ValueSource(strings = {"zhangsan","lisi","wuwu"})
void paramsTest(String name){
System.out.println(name);
}
多参数(从注解里面手动编写数据源):
@ParameterizedTest
@CsvSource ({"zhangsan,20","lisi,12","wuwu,22"})
void moreParamsTest(String name,int age){
System.out.println("name:" + name +" age:" + age);
}
多参数(从第三方csv文件读取数据源):
@ParameterizedTest
@CsvFileSource(files = "D:\\web_code\\mycsv.csv")
void csvFileParamsTest(String name, int age){
System.out.println("name:" + name +" age:" + age);
}
动态参数:
如果返回的数据类型是统一的,就直接写具体的类型,否则就写组合类型Arguments
@ParameterizedTest
@MethodSource("methodParams")
void dynamicMethodParamsTest(String name ,int age){
System.out.println("name:" + name + "age:" + age);
}
static Stream<Arguments> methodParams() throws InterruptedException {
//构造动态参数
String[] arr = new String[5];
for(int i = 0; i < arr.length; i++){
Thread.sleep(500);
arr[i] = System.currentTimeMillis()+"";
}
return Stream.of(
Arguments.arguments(arr[0],55),
Arguments.arguments(arr[1],55),
Arguments.arguments(arr[2],55),
Arguments.arguments(arr[3],55),
Arguments.arguments(arr[4],55)
);
}
注:使用参数化注解的方法不能再使用@Test注解了
3.3 测试套件
- 先创建一个类,通过@Suite注解表示该类为测试套件类(而不是测试类)。
- 指定类来运行用例(想要运行必须要被@Test注解(除参数化的用例外)):
- 指定包名来运行包下的所有用例(如果使用包名来指定运行的范围,那么该包下的所有类的命名需要以Test/Tests结尾,想要运行必须要被@Test注解(除参数化的用例外)):