微軟出品自動化神器【Playwright+Java】系列(十二)測試框架的設計與開發

久曲健發表於2023-03-14

一、前言

大家好,我是六哥!

又有好長一段時間沒更文了,不是我懶,而是確實在更文上,沒有以前積極了,這裡是該自我檢討的。

其實不是我不積極,而是相對更文學習來說,優先順序不是最高。

對我而言,目前最重要的就是減肥,除了下雨下雪,我都堅持每天5公里,keep記錄如下:

a2c209a37f012f95d8d51a99f3fc069.jpg

早在四天前就完成了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的封裝,示例如下圖:

image.png
我只寫了點選和輸入的,其他的沒寫,感興趣的同學請自己嘗試。

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寫框架簡單多了,至於為什麼,懂得人自然也懂,這裡就不分享了,感興趣的同學可以自行嘗試,也可以透過公號找到我進行交流!

我是六哥,愛減肥的六哥,後面還會為大家分享更多技術文章,還請繼續關注我!

相關文章