Junit
为什么学了Selenium还需学习Junit
Selenium自动化测试框架;Junit单元测试框架。
拿着一个技术写自动化测试用例(Selenium3)
拿着一个技术管理已经编写好的测试用例(Junit5)
Junit相关的技术
Junit是针对Java的一个单元测试框架
注解:
@Test:
表示当前的这个方法是一个测试用例
@Disabled
当前方法被忽略
@BeforeAll,@AfterAll,@BeforeEach,@AfterEach
你把什么样的程序放到BeforeAll里面,把什么样的程序放到AfterAll里面?
初始化放在前面,关闭数据库放在后边。
如果做UI自动化,通常情况下,创建驱动,打开网页,放到BeforeAll,关闭浏览器放到AfterAll里边。
@Test public void Test01() { System.out.println("这是JunitTest里面的Test01"); } @Test public void Test02() { System.out.println("这是JunitTest里面的Test02"); } @Disabled public void Test03() { WebDriver webDriver = new ChromeDriver(); webDriver.get("https://www.baidu.com"); webDriver.findElement(By.cssSelector("#s-top-left > a:nth-child(6)")); } @BeforeAll public static void SetUp() { System.out.println("这是我们BeforeAll里面的语句"); } @AfterAll public static void TearDown() { System.out.println("这是我们AfterAll的语句"); } @BeforeEach public void BeforeEachTest() { System.out.println("这是BeforeEach里面的语句"); } @AfterEach public void AfterEachTest() { System.out.println("这是AfterEach里面的语句"); }
如果有5个测试用例,BeforeEach跑几次,BeforeAll跑几次?
5 1
如果有5个测试用例,AfterEach跑几次,AfterAll跑几次?
5 1
BeforeAll在所有的测试用例运行之前跑响应的方法
BeforeEach在每一个测试用例执行之前跑对应的方法
AfterAll在所有的测试用例运行之后跑响应的方法
AfterEach在每一个测试用例执行之后跑对应的方法
参数化:
单参数
@ParameterizedTest @ValueSource(ints = {1,2,3}) void Test04(int num) { System.out.println(num); } @ParameterizedTest @ValueSource(strings = {"1","2","3"}) void Test05(String number) { System.out.println(number); }
CSV获取参数
@ParameterizedTest @CsvFileSource(resources = "test01.csv") void Test06(String name) { System.out.println(name); }
方法获取参数
多参数
@Test和@ParameterizedTest不能同时使用public static Stream<Arguments> Generator() { return Stream.of(Arguments.arguments(1,"张三"), Arguments.arguments(2,"李四"), Arguments.arguments(3,"王五") ); } @ParameterizedTest @MethodSource("Generator") void Test07(int num,String name) { System.out.println(num + ":" + name); }
不想按默认的顺序的执行+:
1)@TestMethodOrder(MethodOrderer.OrderAnnotation.class)
@order(1) @order(2) ……
2)随机生成
@TestMethodOrder(MethodOrderer.Random.class)
测试套件:
通过class运行测试用例
通过包运行测试用例
断言
断言相等
@ParameterizedTest
@ValueSource(ints = {1})
void Test02(int num) {
System.out.println(num);
Assertions.assertEquals(1,num);
}
断言不相等
Assertions.assertNotEquals(2,num);
断言为空
断言不为空
构建测试套件
1、
@Suite
//通过class测试用例运行
@SelectClasses({JunitTest.class,JunitTest03.class})
public class RunSuite {
}
2、通过建立测试包
@Suite
//通过class测试用例运行
@SelectPackages(value = {"Package01","Package02"})
public class RunSuite {
}