一、前言
大家好,我是六哥!
又有好長一段時間沒更文了,不是我懶,而是确實在更文上,沒有以前積極了,這裡是該自我檢讨的。
其實不是我不積極,而是相對更文學習來說,優先級不是最高。
「對我而言,目前最重要的就是減肥」,除了下雨下雪,我都堅持每天5公裡,keep記錄如下:
早在四天前就完成了playwright的架構開發,因為一些事要處理就把文章的事擱置了.
下面将為大家分享關于playwright的自動化測試架構的設計與實作,這裡僅分享思路,感興趣的同學請自行嘗試!
二、如何實作
1、架構要素
延續了所有架構的通用要素:
- 日志&測試步驟
- 報告&失敗截圖
- 配置檔案&資料源設計
- 公共函數&API封裝
- 測試資料&參數化、解耦
- 測試套件&測試用例設計、組裝
2、日志
日志可以很好輔助我們定位問題,這裡我使用的是log4j,簡單配置即可使用,測試代碼如下:
package com.playwrght.frame.log;
import org.apache.log4j.Logger;
import org.testng.annotations.Test;
public class TestLog {
/**
* log4j日志
*/
private static Logger logger = Logger.getLogger(TestLog.class);
@Test
public void testLog() {
logger.info("this is info log!!");
logger.error("this is error log!!");
}
}
3、浏覽器的封裝
playwrght就三個浏覽器,相對也比較簡單,這裡直接貼圖了,如下:
image.png
4、基礎層
這裡主要用于處理,元素對象和原生API的封裝,示例如下圖:
我隻寫了點選和輸入的,其他的沒寫,感興趣的同學請自己嘗試。
5、測試用例
就是調用封裝好的API,示例代碼如下:
package com.playwrght.frame.testcase;
import com.playwrght.frame.page.BasePage;
import com.playwrght.frame.report.TestFailListener;
import io.qameta.allure.*;
import org.testng.Assert;
import org.testng.annotations.*;
@Epic("登入功能測試")
@Feature("登入功能")
@Listeners(TestFailListener.class)
public class TestLogin extends BasePage {
BasePage basePage;
@BeforeClass
public void beforeClass() {
basePage = new BasePage();
}
//用例編号
@TmsLink("562")
//bug編号
@Issue("4042")
//bug嚴重等級,優先級,包含blocker, critical, normal, minor, trivial 幾個不同的等級
@Severity(SeverityLevel.TRIVIAL)
//用例描述
@Description("測試一個流程,用作回歸冒煙測試")
/**
*功能塊,具有相同feature或astory的用例将規整到相同子產品下,執行時可用于篩選
*/
@Story("登入子產品-登入功能")
@Test(description = "驗證登入功能", dataProvider = "loginData")
public void testDemo(String userName,String passWord,String msg) throws Exception {
basePage.open();
basePage.fill("使用者名",userName);
basePage.fill("密碼",passWord);
basePage.click("登入按鈕");
String content = basePage.getTextContent("錯誤提示");
Assert.assertEquals(content,msg);
}
@AfterClass
public void afterClass() {
basePage.quite();
}
@DataProvider(name = "loginData")
public Object[][] loginData() {
return new Object[][]{
{"user1","1","使用者名或密碼錯誤"},
{"user2","2","使用者名或密碼錯誤"},
{"user3","3","error!"},
};
}
}
6、測試報告
因徒弟說playwight+python+飛書很秀,我一看報告就是allure,好看是真的。
就一個配置出來的東西,沒什麼,就那麼回事吧,也不難,是以不熟悉的同學,看看官方文檔就能很快上手!
加了監聽,即可實作運作失敗截圖,如下面代碼:
package com.playwrght.frame.report;
import io.qameta.allure.Attachment;
import org.testng.ITestResult;
import org.testng.TestListenerAdapter;
import static com.playwrght.frame.page.BasePage.page;
public class TestFailListener extends TestListenerAdapter {
@Override
public void onTestFailure(ITestResult result) {
screenshot();
}
@Attachment(value = "screen shot",type = "image/png")
public byte[] screenshot(){
byte[] buffer = page.screenshot();
return buffer;
}
}
說明:這裡我沒用Jenkins驅動生成報告,沒必要,全在maven中完成了!
「測試報告效果如下」:
image.png
「運作失敗截圖」:
image.png
持續內建我就不寫了,百度一搜一大把,真的超級簡單,可自行嘗試!
三、最後
寫到這裡,關于Playwright系列教程的文章就基本完結了!
總體感覺比Selenium寫架構簡單多了,至于為什麼,懂得人自然也懂,這裡就不分享了,感興趣的同學可以自行嘗試,也可以通過公号找到我進行交流!
我是六哥,愛減肥的六哥,後面還會為大家分享更多技術文章,還請繼續關注我!