一、前言 大家好,我是六哥! 又有好長一段時間沒更文了,不是我懶,而是確實在更文上,沒有以前積極了,這裡是該自我檢討的。 其實不是我不積極,而是相對更文學習來說,優先順序不是最高。 對我而言,目前最重要的就是減肥,除了下雨下雪,我都堅持每天5公裡,keep記錄如下: 早在四天前就完成了playwrig ...
一、前言
大家好,我是六哥!
又有好長一段時間沒更文了,不是我懶,而是確實在更文上,沒有以前積極了,這裡是該自我檢討的。
其實不是我不積極,而是相對更文學習來說,優先順序不是最高。
對我而言,目前最重要的就是減肥,除了下雨下雪,我都堅持每天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
就三個瀏覽器,相對也比較簡單,這裡直接貼圖了,如下:
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中完成了!
測試報告效果如下:
運行失敗截圖:
持續集成我就不寫了,百度一搜一大把,真的超級簡單,可自行嘗試!
三、最後
寫到這裡,關於Playwright
系列教程的文章就基本完結了!
總體感覺比Selenium
寫框架簡單多了,至於為什麼,懂得人自然也懂,這裡就不分享了,感興趣的同學可以自行嘗試,也可以通過公號找到我進行交流!
我是六哥,愛減肥的六哥,後面還會為大家分享更多技術文章,還請繼續關註我!
優秀不夠,你是否無可替代
軟體測試交流QQ群:721256703,期待你的加入!!
歡迎關註我的微信公眾號:軟體測試君