微軟出品自動化神器【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
  • C#TMS系統代碼-基礎頁面BaseCity學習 本人純新手,剛進公司跟領導報道,我說我是java全棧,他問我會不會C#,我說大學學過,他說這個TMS系統就給你來管了。外包已經把代碼給我了,這幾天先把增刪改查的代碼背一下,說不定後面就要趕鴨子上架了 Service頁面 //using => impo ...
  • 委托與事件 委托 委托的定義 委托是C#中的一種類型,用於存儲對方法的引用。它允許將方法作為參數傳遞給其他方法,實現回調、事件處理和動態調用等功能。通俗來講,就是委托包含方法的記憶體地址,方法匹配與委托相同的簽名,因此通過使用正確的參數類型來調用方法。 委托的特性 引用方法:委托允許存儲對方法的引用, ...
  • 前言 這幾天閑來沒事看看ABP vNext的文檔和源碼,關於關於依賴註入(屬性註入)這塊兒產生了興趣。 我們都知道。Volo.ABP 依賴註入容器使用了第三方組件Autofac實現的。有三種註入方式,構造函數註入和方法註入和屬性註入。 ABP的屬性註入原則參考如下: 這時候我就開始疑惑了,因為我知道 ...
  • C#TMS系統代碼-業務頁面ShippingNotice學習 學一個業務頁面,ok,領導開完會就被裁掉了,很突然啊,他收拾東西的時候我還以為他要旅游提前請假了,還在尋思為什麼回家連自己買的幾箱飲料都要叫跑腿帶走,怕被偷嗎?還好我在他開會之前拿了兩瓶芬達 感覺感覺前面的BaseCity差不太多,這邊的 ...
  • 概述:在C#中,通過`Expression`類、`AndAlso`和`OrElse`方法可組合兩個`Expression<Func<T, bool>>`,實現多條件動態查詢。通過創建表達式樹,可輕鬆構建複雜的查詢條件。 在C#中,可以使用AndAlso和OrElse方法組合兩個Expression< ...
  • 閑來無聊在我的Biwen.QuickApi中實現一下極簡的事件匯流排,其實代碼還是蠻簡單的,對於初學者可能有些幫助 就貼出來,有什麼不足的地方也歡迎板磚交流~ 首先定義一個事件約定的空介面 public interface IEvent{} 然後定義事件訂閱者介面 public interface I ...
  • 1. 案例 成某三甲醫預約系統, 該項目在2024年初進行上線測試,在正常運行了兩天後,業務系統報錯:The connection pool has been exhausted, either raise MaxPoolSize (currently 800) or Timeout (curren ...
  • 背景 我們有些工具在 Web 版中已經有了很好的實踐,而在 WPF 中重新開發也是一種費時費力的操作,那麼直接集成則是最省事省力的方法了。 思路解釋 為什麼要使用 WPF?莫問為什麼,老 C# 開發的堅持,另外因為 Windows 上已經裝了 Webview2/edge 整體打包比 electron ...
  • EDP是一套集組織架構,許可權框架【功能許可權,操作許可權,數據訪問許可權,WebApi許可權】,自動化日誌,動態Interface,WebApi管理等基礎功能於一體的,基於.net的企業應用開發框架。通過友好的編碼方式實現數據行、列許可權的管控。 ...
  • .Net8.0 Blazor Hybird 桌面端 (WPF/Winform) 實測可以完整運行在 win7sp1/win10/win11. 如果用其他工具打包,還可以運行在mac/linux下, 傳送門BlazorHybrid 發佈為無依賴包方式 安裝 WebView2Runtime 1.57 M ...