前言:自动化就是selenium脚本来实现的,JUnit是java的单元测试工具,只不过我们在实现自动化的时候需要借助一下JUnit库里面提供的一些方法。
目录
1、@Test
2、断言—Assertions类
3、用例的执行顺序
3.1 通过order注解来排序
3.2 参数化
3.3 测试套件
1、@Test
- @Test :表示方法是测试方法,执行当前这个类的时候,会自动的执行该类下的所以带@Test注解的用例。
- @BeforeEach:当前方法需要在每个用例执行之前都执行一次。
- @BeforeAll:当前的方法需要在当前所有用例之前执行一次,被该注释修饰的方法必须为静态方法。
- @AfterEach:当前方法需要在每个用例执行之后都执行一次。
- @AfterAll:当前的方法需要在当前所有用例之后执行一次,被该注释修饰的方法必须为静态方法。
@Test :
@BeforeEach:
@BeforeAll:
@AfterEach:
@AfterAll:
2、断言—Assertions类
当我们在执行某个用力的时候,对于程序来说结果是对的,但是对于测试人员来说是错误的我们需要用到断言。
断言匹配/不匹配:
@Testvoid 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注解(除参数化的用例外)):