20210406TestNG
TestNG基礎使用
比如五個java文件 手工來跑,比如登錄測試,用面向對象的思想來做測試,數據驅動,參數化的方式,
常用的五個注解
6.1TestNG介紹
與代碼邏輯無關 ,管理測試代碼。
1.豐富的斷言方法
2.注解方式
3.參數化配置測試執行環境 比如域名和IP地址是不斷變化的
4.提供數據驅動解決方案
5.在根目錄里產生報告index.html testNG的美化報告。freemarker
JUint TestNG,
Java的兩個單元測試框架 Juinit5\TestNG
Pythond的 :UnitTest\ Pytest(使用更簡單)
6.2TestNG的常用注解(Annotation)
5對注解
監聽器:監聽 發郵件 截屏 類似的功能
| @Test | 此注解的方法會被認為是一個測試方法,即一個測試用例 |
| @BeforeMethod | 被注釋的方法將在每一個測試用例調用前運行 |
| @AfterMethod | 被注釋的方法將在每一個測試用例調用后運行 |
| @BeforeClass | 被注釋的方法將在當前類的第一個測試用例調用前運行 |
| @AfterClass | 被注釋的方法將在當前類的所有測試用例調用后運行 |
| @BeforeSuite | 被注釋的方法將在當前測試集合(suite)任一測試用例運行前運行 |
| @AfterSuite | 被注釋的方法將在當前測試集合(suite)所有測試用例運行后運行 |
| @BeforeTest | 被注釋的方法將在Test中第一測試用例開始運行前運行 |
| @AfterTest | 被注釋的方法將在在Test中所有測試用例運行后運行 |
| @BeforeGroups | 被注釋的方法將在分組測試用例的任一的測試用例前執行 |
| @AfterGroups | 被注釋的方法將在分組測試用例的所有的測試用例后執行 |
@BeforeClass實例化瀏覽器driver
@Test 實現mymovie 的前端登錄
@AfterClass實現driver的退出
package com.TestNG.demo;import org.openqa.selenium.By; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.AfterClass; import org.testng.annotations.BeforeClass; import org.testng.annotations.Test;public class MymovieTestNG {String url_Back ="http://localhost:8032/mymovie/admin.php/Login/index.html";String url_Front = "http://localhost:8032/mymovie/";//這樣維護更方便WebDriver driver; //= new FirefoxDriver(); 成員變量不能實例化public MymovieTestNG() {}@BeforeClasspublic void initDriver() {String url = "http://localhost:8032/mymovie/";System.setProperty("webdriver.gecko.driver","D:\\demo\\geckodriver.exe");System.setProperty("webdriver.firefox.bin","D:\\app\\firefox.exe");WebDriver driver = new FirefoxDriver();driver.get(url);}@Test public void testBacklogin() {}@Testpublic void Test() throws InterruptedException {driver.findElement(By.linkText("登錄")).click();Thread.sleep(3000);//等待瀏覽器加載 // Thread.currentThread().getName()driver.findElement(By.name("username")).sendKeys("qingdao01");driver.findElement(By.name("password")).sendKeys("123456"); // driver.findElement(By.name("password")).submit();driver.findElement(By.xpath("//input[@value='馬上登錄']")).click();}@AfterClasspublic void quiteDriver() {driver.quit();}}前端發表影評
后端添加電影
后端添加演員
利用繼承 父類的繼承 重寫
extends字節跳動 和阿里是最難的
字節跳動 中等難度 java基礎 小米也考串
把java基礎的 包裝類的源代碼 String和buffer的區別 把java源代碼實現 包裝類、線程
自己找本書看看
注意:
1、TestNG執行測試方法之前,會重新實例化測試類,即執行構造方法
2、如果繼承父類,會先執行父類的構造方法
3、會先執行父類的BeforeClass
?使用參數enabled=false來跳過某測試方法
@Test(priority = 0,enabled = false)//優先級某個測試用例被執行之后才執行其他測試用例,此測試場景運行需求稱為依賴測試。通過屬性dependsOnMethods依賴測試,可在不同測試方法間共享數據和程序狀態。
public void test_login(){assertEquals(1,2);//讓他失敗 } @Test(dependsOnMethods = {"test_login"},alwaysRun = true,timeOut =3000)//總是會執行 public void Test() {Thread.sleep(4000);System.out.println("12233"); } @Test public void test3(){Reporter.log("測試方法三");//在測試報告 index.html 中刷新查看}testng.xml-執行順序
當preserve-order=“true”是,可以保證節點下面的方法是按順序執行的。
<!DOCTYPE suite SYSTEM "https://testng.org/testng-1.0.dtd" ><suite name="Suite1" verbose="1" ><test name="Nopackage" ><classes><class name="NoPackageTest" /> //包名</classes></test>//兩個test可以用多線程來跑<test name="Regression1"><classes><class name="test.sample.ParameterSample"/> //這個填包名;<class name="test.sample.ParameterTest"/></classes></test> </suite>1.parallel=“methods”
TestNG 會在不同的線程中運行測試方法,除非那些互相依賴的方法。那些相互依賴的方法會運行在同一個線程中,并且遵照其執行順序。
2.parallel=“tests”
不同test 下的用例可以在不同的線程執行,相同test tag下的用例只能在同一個線程中執行。
3.parallel=“classes”
不同class 下的用例可以在不同的線程執行,相同class 下的用例只能在同一個線程中執行。
@BeforGroups("person") public void beforeperson(){//person }@BeforGroups("animals") public void beforeanimals(){//animals }@AfterGroups@Test(groups = "person") public void student(){}@Test(groups = "animals") public void dog(){} <suite name="Suite1" verbose="1" >//定義三個參數<parameter name= "url" value="http://localhost:8032"></parameter><parameter name= "u_name" value="admin"></parameter><parameter name= "u_pwd" value="123456"></parameter><test name="Nopackage" preserve-order="false"><groups><run><include name="person"></include><include name="animal"></include>通過配置文件才能執行出來 分組</run></groups></test>//兩個test可以用多線程來跑<test name="Regression1"><classes><class name="test.sample.ParameterSample"/> //這個填包名;<class name="test.sample.ParameterTest"/></classes></test> </suite>2.parallel=“tests”
不同test 下的用例可以在不同的線程執行,相同test tag下的用例只能在同一個線程中執行。
3.parallel=“classes”
不同class 下的用例可以在不同的線程執行,相同class 下的用例只能在同一個線程中執行。
@Test @Parameters({"url","u_name","u_pwd","database"}) //mysql為默認值 public void i(String url,String name,String password,@Option("mysql") String db){Sysout(url); }6.4數據提供者
@DataProvider(name = "data") public Object[][] getDate(){return new Object[][]{{1,"tom"},{2,"jerry"},{3,"jack"}}; }@Test(dataProvider = "data1") public void test_data(int num,String name){sysout(num+name); } @Test(dataProvider = "data2") public void test_data(int num,String name){sysout(num+name); } @Test(dataProvider = "data3") public void test_data(int num,String name){sysout(num+name); } //分離 @Test(dataProvider = "data2") public void test_data(int num,String name){sysout(num+name); } @Test(dataProviderClass=Providerdata.class ,dataProvider = "data2") public void test_data(int num,String name){sysout(num+name); }總結
以上是生活随笔為你收集整理的20210406TestNG的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: css画一个三角形,梯形,平行四边形
- 下一篇: GB2312字符集对应16进制ANSI、