在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

自動化實踐之:從UI到接口,Playwright給你全包了!

京東云 ? 來源:jf_75140285 ? 作者:jf_75140285 ? 2024-11-14 11:00 ? 次閱讀

作者:京東保險 宋陽

1背景

在車險系統中,對接保司的數量眾多。每當系統有新功能迭代后,基本上各個保司的報價流程都需要進行回歸測試。由于保司數量多,回歸測試的場景也會變得重復而繁瑣,給測試團隊帶來了巨大的工作壓力。

車險投保流程主要通過H5頁面進行,核心功能集中在投保、報價、核保等階段。這些功能的UI自動化測試具有很高的可行性和必要性。通過自動化測試,我們可以完全覆蓋這些核心功能的測試場景,有效地降低手動測試的工作量和錯誤率。

在這種情況下,Playwright自動化測試工具因其跨瀏覽器和平臺的支持、簡潔直觀的API設計以及強大的異步處理能力而成為首選。使用Playwright進行UI自動化測試不僅可以提高測試效率和準確性,還可以幫助測試團隊更好地應對頻繁的功能迭代和回歸測試的挑戰。

?

?

?

圖1.車險自動化測試需解決問題

2工具

Playwright是一個強大的UI自動化測試工具,能夠錄制并自動生成代碼,支持多種主流瀏覽器,包括Chrome、Firefox和Safari,并且適用于Windows、Linux和macOS操作系統,能夠實現跨平臺的自動化測試。同時,Playwright采用PythonC#Java編程語言編寫腳本,易于學習和使用。它還提供了豐富的API,可以實現復雜的用戶交互操作,如鍵盤輸入、鼠標操作等,讓自動化測試更加貼近真實用戶行為。

此外,Playwright具備自動等待功能,能夠智能地處理元素加載,提高測試的穩定性和效率。總的來說,Playwright在UI自動化測試領域具有很高的靈活性和實用性。

2.1安裝

安裝Playwright只需要一條pip3安裝命令,如下:

    pip3 install playwright

Playwright可以安裝支持的瀏覽器,運行不帶參數的命令將安裝默認瀏覽器,默認會下載chromium內核,firefox以及webkit驅動。

    playwright install

3實踐

3.1車險系統

車險系統流程如圖2,其核心功能在于人車信息錄入、線上報價和核保,這些功能的測試點都可以通過PlaywrightUI自動化覆蓋。

?

?

?

圖2.車險系統流程圖

3.2錄制

使用Playwright的錄制功能生成測試用例的代碼。運行"npx playwright codegen --device='iPhone 13'"命令啟動playwright,默認會開啟兩個窗口,左圖為指定的iPhone 13機型瀏覽器,右圖為playwright inspector界面,在瀏覽器頁面進行系統測試,playwright inspector會自動生成記錄瀏覽器操作的代碼,圖3為打開車險首頁的playwright界面。

?

?

?

圖3.playwright界面

在Target選擇生成的代碼語言,默認生成Python,可以換選Java等,如圖4。

?

?

?

圖4.選擇生成語言

選擇好生成的語言后,就可以在瀏覽器中執行測試用例了,圖5中playwright inspector會自動生成在瀏覽器測試用例對應代碼。

?

?

?

圖5.錄制Case

測試完成之后就可以把playwright inspector中生成的代碼拷貝到Idea,添加日志斷言等,進行執行和完善。

    import com.microsoft.playwright.*;
    import com.microsoft.playwright.options.*;
    import static com.microsoft.playwright.assertions.PlaywrightAssertions.assertThat;
    import java.util.*;

    public class Example {
      public static void main(String[] args) {
        try (Playwright playwright = Playwright.create()) {
          Browser browser = playwright.webkit().launch(new BrowserType.LaunchOptions()
            .setHeadless(false));
          BrowserContext context = browser.newContext(new Browser.NewContextOptions()
            .setDeviceScaleFactor(3)
            .setHasTouch(true)
            .setIsMobile(true)
            .setUserAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile/15E148 Safari/604.1")
            .setViewportSize(390, 664));
          Page page = context.newPage();
          page.navigate("http://test***");//注入pin
          page.navigate("http://testcar***");//訪問車險測試環境地址
          page.getByText("更換車輛").click();
          page.navigate("http://testcar***");
          page.getByText("更換車輛").click();
          page.getByText("京AL3UVJ").click();
          page.getByText("更換車輛").click();
          page.locator("p").filter(new Locator.FilterOptions().setHasText("晉L613A4")).click();
          page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("查看報價")).click();
          page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("同意").setExact(true)).click();
          page.getByText("知道了").click();
          page.getByText("查看該方案報價").click();
        }
      }
    }

3.3頁面接口響應驗證

Playwright的強大在于支持UI錄制的同時,也提供了接口操作的功能。我們可以結合UI用例執行,對重要接口參數進行獲取和校驗,也可以作為UI用例的參數使用。接口校驗主要用到兩個方法:expect_request和expect_response。expect_request方法會等待匹配的請求并返回,expect_response方法會返回匹配的響應。在車險的一個使用場景為例:代碼在執行點擊更換車輛文本之后,會監聽queryCarHomePage接口的返回,獲取當前用戶所有的車。

     page.getByText("更換車輛").click();

     // 監聽響應
     page.onResponse(response -> {
         if (response.url().contains("queryCarHomePage")) {
             String result = new String(response.body(), StandardCharsets.UTF_8);
             JSONObject res = new JSONObject(result);
         
             ObjectMapper mapper = new ObjectMapper();
             JsonNode rootNode = null;
             try {
                 rootNode = mapper.readTree(result);
             } catch (JsonProcessingException e) {
                 throw new RuntimeException(e);
             }

             JsonNode carInfoListNode = rootNode.get("resultData").get("carInfoListDto");
             for (JsonNode carInfo : carInfoListNode) {
                 JsonNode licenseNoNode = carInfo.get("licenseNo");
                 if (licenseNoNode == null) {
                     throw new IllegalArgumentException("licenseNo field not found in carInfoListDto for car " + carInfo);
                 }
                 String licenseNo = licenseNoNode.asText();
                 System.out.println(licenseNo);
             }
         }
         });

3.4基于Playwright的UI自動化測試系統

可見Playwright的自動錄制功能能夠大幅降低生成測試用例的復雜度,UI的自動執行也能夠節省大量回歸測試的時間。當然我們不僅僅滿足于case的錄制和本地手動執行,而更希望能夠在生成case之后,可以定期執行、自動執行錄制的case,并生成能夠直觀反映case執行結果的報告,這樣就可以實現從用例錄制、收集、定期執行到測試效果反饋的完整自動化測試鏈路,實現系統的測試和監控的同時,顯著提升測試的效率,極大節省時間人力成本。所以未來我們預期實現的自動化系統結構如圖6所示,本地錄制case并上傳到數據庫,Playwright定時任務執行case并生成用例執行報告。

?

?

圖6.基于playwright的UI自動化測試系統流程圖

3.5測試Demo

以下擷取Case為Playwright錄制生成代碼和接口相關擴展方法相結合,實現車險首頁切換車輛后報價,并通過獲取該用戶pin下車列表的Demo實例。

    public class Example {
        public static void main(String[] args) {
            try (Playwright playwright = Playwright.create()) {
                Browser browser = playwright.webkit().launch(new BrowserType.LaunchOptions()
                        .setHeadless(false));
                BrowserContext context = browser.newContext(new Browser.NewContextOptions()
                        .setDeviceScaleFactor(3)
                        .setHasTouch(true)
                        .setIsMobile(true)
                        .setUserAgent("Mozilla/5.0 (iPhone; CPU iPhone OS 15_0 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/17.4 Mobile/15E148 Safari/604.1")
                        .setViewportSize(390, 664));
                Page page = context.newPage();
                page.navigate("http://test***");
                page.navigate("http://testcar***");

                // 監聽響應
                page.onResponse(response -> {
                    if (response.url().contains("queryCarHomePage")) {
                        String result = new String(response.body(), StandardCharsets.UTF_8);
                        JSONObject res = new JSONObject(result);
                        System.out.println(result);

                        ObjectMapper mapper = new ObjectMapper();
                        JsonNode rootNode = null;
                        try {
                            rootNode = mapper.readTree(result);
                        } catch (JsonProcessingException e) {
                            throw new RuntimeException(e);
                        }

                        JsonNode carInfoListNode = rootNode.get("resultData").get("carInfoListDto");
                        for (JsonNode carInfo : carInfoListNode) {
                            JsonNode licenseNoNode = carInfo.get("licenseNo");
                            if (licenseNoNode == null) {
                                throw new IllegalArgumentException("licenseNo field not found in carInfoListDto for car " + carInfo);
                            }
                            String licenseNo = licenseNoNode.asText();
                            System.out.println(licenseNo);
                        }
                    }
                });

                page.getByText("更換車輛").click();
                page.getByText("晉L613A4").click();
                page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("查看報價")).click();
                page.getByText("查看該方案報價").click();

    }

執行效果如圖7,可以靈活在此基礎上擴展其他Case。

?

4總結與展望

利用Playwright,我們可以輕松地編寫可靠、快速和可維護的自動化測試腳本。這些腳本可以模擬真實用戶的交互行為,覆蓋各種可能的測試場景,從而確保車險的UI在不同環境和配置下的穩定性和正確性。通過playwright實現用例自動生成,定時執行并產出報告的車險UI自動化測試系統,能夠幫助我們顯著提高測試效率,節省大量的測試時間。展望未來,我們期待將車險UI自動化測試技術繼續發展和完善,為目前的測試工作提升效率,未來帶來更多的創新和改進。

審核編輯 黃宇

?

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • 接口
    +關注

    關注

    33

    文章

    8598

    瀏覽量

    151156
  • ui
    ui
    +關注

    關注

    0

    文章

    204

    瀏覽量

    21376
收藏 人收藏

    評論

    相關推薦

    自動化創建UI并解析數據

    *附件:32960_auto.rar備注:Main.vi是ui自動化2.1.vi,配置文件為32960.B.ini。 目前可以實現根據配置文件自動化創建控件并布局,且可以自動解析接收到
    發表于 12-10 08:41

    自動化創建UI并解析數據

    Labview實現動態增加控件效果 - *附件:32960_auto.rar 備注:Main.vi是ui自動化2.1.vi,配置文件為32960.B.ini。 目前可以實現根據配置文件自動化創建控件
    發表于 11-29 11:26

    LMX2595EVM如何實現自動化控制?

    我需要用LMX2595EVM實現自動化控制,請問那里有LMX2595EVM相關的sdk接口文檔或者Demo?
    發表于 11-13 06:09

    Appium +iOS自動化測試教程(實踐、總結 、踩坑)

    的使用都不太熟悉,花了大概一周時間粗略的看下ios開發知識,網上隨手下載的來源于這兩本《iOS開發入門精通.pdf》、《iOS開發指南:零基礎App上架.pdf 》、至于Mac
    的頭像 發表于 11-11 09:42 ?896次閱讀
    Appium +iOS<b class='flag-5'>自動化</b>測試教程(<b class='flag-5'>實踐</b>、總結 、踩坑)

    探索Playwright:前端自動化測試的新紀元

    作者:京東保險 張新磊 背景 在前端開發中,自動化測試是確保軟件質量和用戶體驗的關鍵環節。隨著Web應用的復雜性不斷增加,手動測試已經無法滿足快速迭代和持續交付的需求。自動化測試通過模擬用戶
    的頭像 發表于 10-22 14:27 ?180次閱讀

    圓柱電池自動分選機:生產質檢的流程自動化

    設備。今日,比斯特自動化小編將為大家深入分析圓柱電池自動分選機的工作原理、功能特點、應用優勢及未來發展趨勢等方面的內容。
    的頭像 發表于 07-03 09:52 ?339次閱讀
    圓柱電池<b class='flag-5'>自動</b>分選機:<b class='flag-5'>從</b>生產<b class='flag-5'>到</b>質檢的<b class='flag-5'>全</b>流程<b class='flag-5'>自動化</b>

    機械自動化和電氣自動化區別是什么

    生產過程中的自動化控制和管理。它主要涉及機械設計、制造、裝配、檢測等環節,通過自動化設備替代人工操作,提高生產效率和產品質量。 電氣自動化 電氣
    的頭像 發表于 07-01 09:33 ?4080次閱讀

    機械自動化自動化的一種嗎

    引言 自動化技術是指利用控制裝置對生產過程進行控制,以實現生產過程的自動化。機械自動化自動化技術的一種,它主要涉及使用機械設備和控制系統
    的頭像 發表于 07-01 09:32 ?1668次閱讀

    機械制造與自動化自動化類嗎

    機械制造與自動化自動化領域的一個重要分支,它涉及機械設計、制造、檢測、控制等多個方面,是現代制造業的核心組成部分。 機械制造與自動化是指利用計算機、機器人、傳感器等
    的頭像 發表于 06-11 11:18 ?1527次閱讀

    工業自動化自動化區別是什么

    工業自動化自動化是兩個密切相關但又有所區別的概念。在這篇文章中,我們將詳細探討它們之間的區別,以及它們在現代工業生產中的應用。 一、自動化的定義 自動化是指通過使用機器、計算機和其他
    的頭像 發表于 06-11 11:13 ?1700次閱讀

    機器視覺檢測技術在工業自動化中的應用

    隨著科技的飛速發展,工業自動化已成為現代工業生產的核心動力。在這個背景下,機器視覺檢測技術作為工業自動化中的關鍵技術之一,以其高精度、高效率、高可靠性的優勢,在工業自動化領域得到了廣泛的應用。本文將深入探討機器視覺檢測技術在工業
    的頭像 發表于 06-07 12:06 ?849次閱讀

    鴻蒙OS開發實戰:【自動化測試框架】使用指南

    為支撐HarmonyOS操作系統的自動化測試活動開展,我們提供了支持JS/TS語言的單元及UI測試框架,支持開發者針對應用接口進行單元測試,并且可基于UI操作進行
    的頭像 發表于 04-08 14:49 ?1399次閱讀
    鴻蒙OS開發實戰:【<b class='flag-5'>自動化</b>測試框架】使用指南

    非標自動化設備

    1、非標自動化設備 2、根據需求設計和制造 3、完成代替人工的目標
    發表于 03-25 09:52

    沙特stc和華為商用核心網自動化實踐榮獲“年度最佳自動化項目獎”

    近期,Global Telecom Awards(GTA)頒獎典禮在英國倫敦舉行。沙特stc和華為因在核心網自動化方面的創新實踐榮獲“年度最佳自動化項目獎”(Automation
    的頭像 發表于 01-17 10:15 ?457次閱讀

    自動化仿真系統搭建實踐

    今天我們分享TIAV17+PLCSIM+PS+SIMIT:自動化仿真系統搭建實踐
    的頭像 發表于 01-04 11:28 ?2222次閱讀
    <b class='flag-5'>自動化</b>仿真系統搭建<b class='flag-5'>實踐</b>
    主站蜘蛛池模板: 亚洲视频在线播放| 狠狠干狠狠艹| 五月天婷婷一区二区三区久久| 欧美性视频一区二区三区| 亚洲综合色网站| 欧美色图中文字幕| 亚洲国产综合视频| 很黄很黄的网站免费的| 午夜寂寞影视| 欧美xxxxbbbb| 欧美在线bdsm调教一区| 国产精品29页| 国模论坛| 婷婷毛片| 欧美性色xo影院69| 婷婷5月天| 91色爱| 国产免费好大好硬视频| 日本免费网| a级黄色毛片三个搞一| 在线播放视频网站| 四虎成人影院网址| 午夜特级毛片| 黄网站在线观看视频| 国模谢心2013.05.06私拍| 东北美女野外bbwbbw免费| 四虎影院免费观看视频| 夜夜操天天爽| 黄视频在线观看网站| 国产欧美网站| 中文字字幕码一二区| 噜噜噜噜天天狠狠| 色综合免费视频| 亚洲欧美强伦一区二区另类| 欧美日韩国产成人精品| 免费国产综合视频在线看| 亚洲男人的天堂在线播放| 免费看逼网站| 啪啪免费网站| 久久婷婷成人综合色| 欧美最猛黑人xxxx黑人猛交69|