天天看點

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

作者:軟體測試君
微軟自動化神器【Playwright 】系列(十二)測試架構的設計與開發
微軟自動化神器【Playwright 】系列(十二)測試架構的設計與開發

一、前言

大家好,我是六哥!

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

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

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

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

早在四天前就完成了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就三個浏覽器,相對也比較簡單,這裡直接貼圖了,如下:

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

image.png

4、基礎層

這裡主要用于處理,元素對象和原生API的封裝,示例如下圖:

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

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

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 】系列(十二)測試架構的設計與開發

image.png

「運作失敗截圖」:

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

image.png

持續內建我就不寫了,百度一搜一大把,真的超級簡單,可自行嘗試!

三、最後

寫到這裡,關于Playwright系列教程的文章就基本完結了!

總體感覺比Selenium寫架構簡單多了,至于為什麼,懂得人自然也懂,這裡就不分享了,感興趣的同學可以自行嘗試,也可以通過公号找到我進行交流!

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

繼續閱讀