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

来源:https://www.cnblogs.com/longronglang/archive/2023/03/14/17216329.html
-Advertisement-
Play Games

一、前言 大家好,我是六哥! 又有好長一段時間沒更文了,不是我懶,而是確實在更文上,沒有以前積極了,這裡是該自我檢討的。 其實不是我不積極,而是相對更文學習來說,優先順序不是最高。 對我而言,目前最重要的就是減肥,除了下雨下雪,我都堅持每天5公裡,keep記錄如下: 早在四天前就完成了playwrig ...


一、前言

大家好,我是六哥!

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

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

對我而言,目前最重要的就是減肥,除了下雨下雪,我都堅持每天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寫框架簡單多了,至於為什麼,懂得人自然也懂,這裡就不分享了,感興趣的同學可以自行嘗試,也可以通過公號找到我進行交流!

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

優秀不夠,你是否無可替代

軟體測試交流QQ群:721256703,期待你的加入!!

歡迎關註我的微信公眾號:軟體測試君



您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 代理模式(Proxy Pattern):前端設計模式中的代理模式是一種結構型模式,它允許在不改變原始對象的情況下,通過引入一個代理對象來控制對原始對象的訪問。代理對象充當原始對象的中介,客戶端與代理對象交互,代理對象再將請求轉發給原始對象。 代理模式在前端開發中經常被用來處理一些複雜或者耗時的操作, ...
  • 第一部分 類型和語法 第一章 類型 JavaScript 有七種內置類型: • 空值(null) • 未定義(undefined) • 布爾值( boolean) • 數字(number) • 字元串(string) • 對象(object) • 符號(symbol,ES6 中新增) typeof ...
  • 觀察者模式 介紹 觀察者模式是極其重要的一個設計模式,在許多框架都使用了,以及實際開發中也會用到。 定義對象之間的一種一對多的依賴關係,使得每當一個對象的狀態發生變化時,其相關的依賴對象都可以得到通知並被自動更新。主要用於多個不同的對象對一個對象的某個方法會做出不同的反應! 以不同觀察者從同一個天氣 ...
  • 故障無處不在,而且無法避免。(分散式計算謬誤) 在分散式系統建設的過程中,我們思考的重點不是避免故障,而是擁抱故障,通過構建高可用架構體系來獲得優雅應對故障的能力。QQ音樂高可用架構體系包含三個子系統:架構、工具鏈和可觀測性。 ...
  • 1. 元空間(metaspace) 1.1. 當JVM載入類時,它必須記錄這些類的某些元數據,這些數據占據的一個單獨的堆空間,即元空間 1.2. 元空間里的信息只在編譯器和JVM運行時使用,它所保存的數據被稱為類元數據(class metadata) 1.2.1. 對於終端用戶,元空間是不透明的 1 ...
  • 指針:是一個變數,存儲一個變數的地址。 引用:是變數的別名。 1、初始化 指針定義時不必初始化,引用必須初始化。 指針初始化時可為NULL,引用不能初始化為NULL。 int a = 10; int *p = &a; int &y = a; cout << "a是" << a << endl; co ...
  • 1、回顧MVC 1.1、什麼是MVC MVC是模型(Model)、視圖(View)、控制器(Controller)的簡寫,是一種軟體設計規範。 是將業務邏輯、數據、顯示分離的方法來組織代碼。 MVC主要作用是降低了視圖與業務邏輯間的雙向偶合。 MVC不是一種設計模式,MVC是一種架構模式。當然不同的 ...
  • 分析SpringBoot底層機制 Tomcat啟動分析,Spring容器初始化,Tomcat如何關聯Spring容器? 1.創建SpringBoot環境 (1)創建Maven程式,創建SpringBoot環境 (2)pom.xml導入SpringBoot的父工程和依賴 <!--導入SpringBoo ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...