目錄
??需要知道:
??Junit學(xué)習(xí)
??1、常用的注解
??2、測(cè)試用例的執(zhí)行順序
??3、參數(shù)化
??4、斷言
??5、測(cè)試套件
??需要知道:
問題1:Selenium與Junit之間的關(guān)系?
????????就像雷鋒和雷峰塔的關(guān)系,就是沒關(guān)系。
問題2:為什么學(xué)習(xí)了Selenium之后還要學(xué)習(xí)Junit?
????????Junit是針對(duì)java的一個(gè)單元測(cè)試框架,實(shí)際中通常是通過一個(gè)自動(dòng)化測(cè)試框架搭配對(duì)應(yīng)的一個(gè)單元測(cè)試框架來對(duì)測(cè)試用例進(jìn)行管理。如果Selenium編寫的自動(dòng)化測(cè)試用例是燈,Junit就是控制燈怎么去亮,燈亮的顏色是什么顏色,燈亮的順序是什么等。
??Junit學(xué)習(xí)
需要在Pom.xml文件中引入依賴:寫在dependencies下面:
<!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-params --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-params</artifactId> <version>5.9.2</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.platform/junit-platform-suite --> <dependency> <groupId>org.junit.platform</groupId> <artifactId>junit-platform-suite</artifactId> <version>1.9.1</version> </dependency> <!-- https://mvnrepository.com/artifact/org.junit.jupiter/junit-jupiter-engine --> <dependency> <groupId>org.junit.jupiter</groupId> <artifactId>junit-jupiter-engine</artifactId> <version>5.9.1</version> <scope>test</scope> </dependency>
??1、常用的注解
之前的代碼實(shí)現(xiàn)方式:在main函數(shù)中調(diào)用?,F(xiàn)在可不可以不需要直接調(diào)用test01(),這就可以使用注解實(shí)現(xiàn)。
案例1:@Test的使用:
(1)不需要main方法調(diào)用;
(2)表示注解的:@Test,@BeforeAll,@AfterAll,@BeforeEach,@AfterEach
(3)@Test是一個(gè)注解,表示當(dāng)前的方法是一個(gè)測(cè)試用例;
(4)注意:返回值必須是void,是規(guī)定的;
(5)要執(zhí)行兩個(gè)測(cè)試用例,點(diǎn)class前面的那個(gè)箭頭;如果點(diǎn)的是Test01前面的箭頭,表示只執(zhí)行這一個(gè)測(cè)試用例;
(6)Test01,Test02都是自定義的名字。
public class a01_JunitTest { @Test void Test01(){ WebDriver webDriver = new ChromeDriver(); webDriver.get("https://www.baidu.com/"); } @Test void Test02(){ System.out.println("這是第二個(gè)測(cè)試用例"); } }
指向結(jié)果:先打開百度,再打印Test02中的語句。
案例2:@BeforeAll與@AfterAll:執(zhí)行一次
(1)當(dāng)前類里面所有的測(cè)試用例執(zhí)行之前都會(huì)執(zhí)行這個(gè)方法@BeforeAll;
(2)當(dāng)前類里面所有的測(cè)試用例執(zhí)行結(jié)束之后都會(huì)執(zhí)行這個(gè)方法@AfterAll。
public class a02_BeforeAll { //1、當(dāng)前類里面所有的測(cè)試用例執(zhí)行之前都會(huì)執(zhí)行這個(gè)方法 @BeforeAll static void setUp(){ System.out.println("開始執(zhí)行@BeforeAll修飾的方法"); } @Test void Test(){ WebDriver webDriver = new ChromeDriver(); webDriver.get("https://www.baidu.com/"); } //2、當(dāng)前類里面所有的測(cè)試用例執(zhí)行結(jié)束之后都會(huì)執(zhí)行這個(gè)方法 @AfterAll static void TearDown(){ System.out.println("開始執(zhí)行@AfterAll對(duì)應(yīng)的方法"); } }
執(zhí)行結(jié)果:
案例3:@BeforeEach與@AfterEach
當(dāng)前類里面有兩個(gè)測(cè)試用例:
(1)AfterAll和BeforeAll會(huì)執(zhí)行一次;不論有幾個(gè)測(cè)試用例,都只執(zhí)行一次;
(2)AfterEach和BeforeEach會(huì)分別執(zhí)行兩次;有幾個(gè)測(cè)試用例執(zhí)行幾次。
1、在執(zhí)行每個(gè)方法之前都會(huì)執(zhí)行一下BeforeEach方法;
2、在每個(gè)方法執(zhí)行之后都會(huì)執(zhí)行AfterEach方法。
public class a03_BeforeEach { //1、在執(zhí)行每個(gè)方法之前都會(huì)執(zhí)行一下BeforeEach方法 @BeforeEach void BeforeEachTest(){ System.out.println("執(zhí)行BeforeEach"); } @Test void Test01(){ WebDriver webDriver = new ChromeDriver(); webDriver.get("https://www.baidu.com/"); } @Test void Test02(){ WebDriver webDriver = new ChromeDriver(); webDriver.get("https://www.csdn.net/"); } //2、在每個(gè)方法執(zhí)行之后都會(huì)執(zhí)行AfterEach方法 @AfterEach void AfterEachTest(){ System.out.println("執(zhí)行AfterEach"); } }
案例4:@Disabled
(1)有兩個(gè)測(cè)試用例,只執(zhí)行Test02,不執(zhí)行Test01 ;
(2)在要忽略執(zhí)行的方法前面寫@Disabled。
public class a04_Disable { @Disabled @Test void Test01(){ WebDriver webDriver = new ChromeDriver(); webDriver.get("https://www.baidu.com/"); } @Test void Test02(){ WebDriver webDriver = new ChromeDriver(); webDriver.get("https://www.csdn.net/"); } }
執(zhí)行結(jié)果:
??2、測(cè)試用例的執(zhí)行順序
情況1:執(zhí)行順序12345
?情況2:將Testt05放在最前面,執(zhí)行順序12345
?方式1:按照?qǐng)?zhí)行順序執(zhí)行(搭配Order使用)
(1)在類前面加上注解@TestMethodOrder(MethodOrderer.OrderAnnotation.class);
(2)指定執(zhí)行規(guī)則:在每個(gè)測(cè)試用例前面加上注解: @Order(順序)。
@TestMethodOrder(MethodOrderer.OrderAnnotation.class) public class a05_Test { @Order(1) @Test void Test05(){ System.out.println("這是測(cè)試用例5"); } @Order(5) @Test void Test01(){ System.out.println("這是測(cè)試用例1"); } @Order(4) @Test void Test02(){ System.out.println("這是測(cè)試用例2"); } @Order(3) @Test void Test03(){ System.out.println("這是測(cè)試用例3"); } @Order(2) @Test void Test04(){ System.out.println("這是測(cè)試用例4"); } }
方式2:按照隨機(jī)方式執(zhí)行:(不常用)
在類前面加上@TestMethodOrder(MethodOrderer.Random.class)
@TestMethodOrder(MethodOrderer.Random.class) public class a05_Test { @Test void Test05(){ System.out.println("這是測(cè)試用例5"); } @Test void Test01(){ System.out.println("這是測(cè)試用例1"); } @Test void Test02(){ System.out.println("這是測(cè)試用例2"); } @Test void Test03(){ System.out.println("這是測(cè)試用例3"); } @Test void Test04(){ System.out.println("這是測(cè)試用例4"); } }
執(zhí)行結(jié)果是隨機(jī)的:?
??3、參數(shù)化
錯(cuò)誤演示:
1、單參數(shù)
(1)@ParameterizedTest進(jìn)行參數(shù)的注冊(cè);
(2)單參數(shù)的形式:在前面寫:@ValueSource:點(diǎn)進(jìn)去源碼觀察可以是各種類型傳遞。
?代碼演示:
2、多參數(shù)
????????可以看出單參數(shù)的特點(diǎn):如果要傳遞String,那么所有的參數(shù)都是String類型。但是如果我現(xiàn)在想要第一個(gè)參數(shù)是String,第二個(gè)參數(shù)是Int,那么就要使用多參數(shù)的形式了。
(1)csv參數(shù)傳遞
方式1:@CsvSource
?當(dāng)數(shù)據(jù)非常多的時(shí)候,我們一般采用第二種方式:
方式2:通過新建csv文件傳遞
?如果要傳遞的csv文件中的內(nèi)容:姓名為空的話,直接寫為‘ ’即可。
?(2)在有些情況下,有些參數(shù)可能需要某些對(duì)應(yīng)的方法來對(duì)參數(shù)進(jìn)行處理,因此就有第二種方法,通過方法將參數(shù)處理,再傳入測(cè)試用例中。簡單使用如下:
??4、斷言
在java中判斷通過if-else來判斷,這里我們通過斷言來實(shí)現(xiàn)。
??5、測(cè)試套件
????????要解決的問題:現(xiàn)在有a01,a02,a03...a10一共10個(gè)class文件都要執(zhí)行,正常操作是如果要執(zhí)行a10,點(diǎn)擊a10,執(zhí)行a9,點(diǎn)擊a9...以此類推。但是這樣很麻煩,因此通過測(cè)試套件,一次性將所有的代碼都執(zhí)行。
?寫法1:通過指定相應(yīng)的class來執(zhí)行
用法:
執(zhí)行結(jié)果:
寫法2:通過指定包來執(zhí)行
用法:
?執(zhí)行結(jié)果:先執(zhí)行包1中的a01,a02,然后執(zhí)行包2中的a01。
文章來源:http://www.zghlxwxcb.cn/news/detail-592564.html
文章來源地址http://www.zghlxwxcb.cn/news/detail-592564.html
到了這里,關(guān)于【測(cè)試學(xué)習(xí)】Junit5的簡單使用的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!