99精品伊人亚洲|最近国产中文炮友|九草在线视频支援|AV网站大全最新|美女黄片免费观看|国产精品资源视频|精彩无码视频一区|91大神在线后入|伊人终合在线播放|久草综合久久中文

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

自動(dòng)化實(shí)踐之:從UI到接口,Playwright給你全包了!

京東云 ? 來(lái)源:jf_75140285 ? 作者:jf_75140285 ? 2024-11-14 11:00 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

作者:京東保險(xiǎn) 宋陽(yáng)

1背景

在車(chē)險(xiǎn)系統(tǒng)中,對(duì)接保司的數(shù)量眾多。每當(dāng)系統(tǒng)有新功能迭代后,基本上各個(gè)保司的報(bào)價(jià)流程都需要進(jìn)行回歸測(cè)試。由于保司數(shù)量多,回歸測(cè)試的場(chǎng)景也會(huì)變得重復(fù)而繁瑣,給測(cè)試團(tuán)隊(duì)帶來(lái)了巨大的工作壓力。

車(chē)險(xiǎn)投保流程主要通過(guò)H5頁(yè)面進(jìn)行,核心功能集中在投保、報(bào)價(jià)、核保等階段。這些功能的UI自動(dòng)化測(cè)試具有很高的可行性和必要性。通過(guò)自動(dòng)化測(cè)試,我們可以完全覆蓋這些核心功能的測(cè)試場(chǎng)景,有效地降低手動(dòng)測(cè)試的工作量和錯(cuò)誤率。

在這種情況下,Playwright自動(dòng)化測(cè)試工具因其跨瀏覽器和平臺(tái)的支持、簡(jiǎn)潔直觀的API設(shè)計(jì)以及強(qiáng)大的異步處理能力而成為首選。使用Playwright進(jìn)行UI自動(dòng)化測(cè)試不僅可以提高測(cè)試效率和準(zhǔn)確性,還可以幫助測(cè)試團(tuán)隊(duì)更好地應(yīng)對(duì)頻繁的功能迭代和回歸測(cè)試的挑戰(zhàn)。

?

?

?

圖1.車(chē)險(xiǎn)自動(dòng)化測(cè)試需解決問(wèn)題

2工具

Playwright是一個(gè)強(qiáng)大的UI自動(dòng)化測(cè)試工具,能夠錄制并自動(dòng)生成代碼,支持多種主流瀏覽器,包括Chrome、Firefox和Safari,并且適用于Windows、Linux和macOS操作系統(tǒng),能夠?qū)崿F(xiàn)跨平臺(tái)的自動(dòng)化測(cè)試。同時(shí),Playwright采用Python、C#、Java編程語(yǔ)言編寫(xiě)腳本,易于學(xué)習(xí)和使用。它還提供了豐富的API,可以實(shí)現(xiàn)復(fù)雜的用戶交互操作,如鍵盤(pán)輸入、鼠標(biāo)操作等,讓自動(dòng)化測(cè)試更加貼近真實(shí)用戶行為。

此外,Playwright具備自動(dòng)等待功能,能夠智能地處理元素加載,提高測(cè)試的穩(wěn)定性和效率??偟膩?lái)說(shuō),Playwright在UI自動(dòng)化測(cè)試領(lǐng)域具有很高的靈活性和實(shí)用性。

2.1安裝

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

    pip3 install playwright

Playwright可以安裝支持的瀏覽器,運(yùn)行不帶參數(shù)的命令將安裝默認(rèn)瀏覽器,默認(rèn)會(huì)下載chromium內(nèi)核,firefox以及webkit驅(qū)動(dòng)。

    playwright install

3實(shí)踐

3.1車(chē)險(xiǎn)系統(tǒng)

車(chē)險(xiǎn)系統(tǒng)流程如圖2,其核心功能在于人車(chē)信息錄入、線上報(bào)價(jià)和核保,這些功能的測(cè)試點(diǎn)都可以通過(guò)PlaywrightUI自動(dòng)化覆蓋。

?

?

?

圖2.車(chē)險(xiǎn)系統(tǒng)流程圖

3.2錄制

使用Playwright的錄制功能生成測(cè)試用例的代碼。運(yùn)行"npx playwright codegen --device='iPhone 13'"命令啟動(dòng)playwright,默認(rèn)會(huì)開(kāi)啟兩個(gè)窗口,左圖為指定的iPhone 13機(jī)型瀏覽器,右圖為playwright inspector界面,在瀏覽器頁(yè)面進(jìn)行系統(tǒng)測(cè)試,playwright inspector會(huì)自動(dòng)生成記錄瀏覽器操作的代碼,圖3為打開(kāi)車(chē)險(xiǎn)首頁(yè)的playwright界面。

?

?

?

圖3.playwright界面

在Target選擇生成的代碼語(yǔ)言,默認(rèn)生成Python,可以換選Java等,如圖4。

?

?

?

圖4.選擇生成語(yǔ)言

選擇好生成的語(yǔ)言后,就可以在瀏覽器中執(zhí)行測(cè)試用例了,圖5中playwright inspector會(huì)自動(dòng)生成在瀏覽器測(cè)試用例對(duì)應(yīng)代碼。

?

?

?

圖5.錄制Case

測(cè)試完成之后就可以把playwright inspector中生成的代碼拷貝到Idea,添加日志斷言等,進(jìn)行執(zhí)行和完善。

    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***");//訪問(wèn)車(chē)險(xiǎn)測(cè)試環(huán)境地址
          page.getByText("更換車(chē)輛").click();
          page.navigate("http://testcar***");
          page.getByText("更換車(chē)輛").click();
          page.getByText("京AL3UVJ").click();
          page.getByText("更換車(chē)輛").click();
          page.locator("p").filter(new Locator.FilterOptions().setHasText("晉L613A4")).click();
          page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("查看報(bào)價(jià)")).click();
          page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("同意").setExact(true)).click();
          page.getByText("知道了").click();
          page.getByText("查看該方案報(bào)價(jià)").click();
        }
      }
    }

3.3頁(yè)面接口響應(yīng)驗(yàn)證

Playwright的強(qiáng)大在于支持UI錄制的同時(shí),也提供了接口操作的功能。我們可以結(jié)合UI用例執(zhí)行,對(duì)重要接口參數(shù)進(jìn)行獲取和校驗(yàn),也可以作為UI用例的參數(shù)使用。接口校驗(yàn)主要用到兩個(gè)方法:expect_request和expect_response。expect_request方法會(huì)等待匹配的請(qǐng)求并返回,expect_response方法會(huì)返回匹配的響應(yīng)。在車(chē)險(xiǎn)的一個(gè)使用場(chǎng)景為例:代碼在執(zhí)行點(diǎn)擊更換車(chē)輛文本之后,會(huì)監(jiān)聽(tīng)queryCarHomePage接口的返回,獲取當(dāng)前用戶所有的車(chē)。

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

     // 監(jiān)聽(tīng)響應(yīng)
     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自動(dòng)化測(cè)試系統(tǒng)

可見(jiàn)Playwright的自動(dòng)錄制功能能夠大幅降低生成測(cè)試用例的復(fù)雜度,UI的自動(dòng)執(zhí)行也能夠節(jié)省大量回歸測(cè)試的時(shí)間。當(dāng)然我們不僅僅滿足于case的錄制和本地手動(dòng)執(zhí)行,而更希望能夠在生成case之后,可以定期執(zhí)行、自動(dòng)執(zhí)行錄制的case,并生成能夠直觀反映case執(zhí)行結(jié)果的報(bào)告,這樣就可以實(shí)現(xiàn)從用例錄制、收集、定期執(zhí)行到測(cè)試效果反饋的完整自動(dòng)化測(cè)試鏈路,實(shí)現(xiàn)系統(tǒng)的測(cè)試和監(jiān)控的同時(shí),顯著提升測(cè)試的效率,極大節(jié)省時(shí)間人力成本。所以未來(lái)我們預(yù)期實(shí)現(xiàn)的自動(dòng)化系統(tǒng)結(jié)構(gòu)如圖6所示,本地錄制case并上傳到數(shù)據(jù)庫(kù),Playwright定時(shí)任務(wù)執(zhí)行case并生成用例執(zhí)行報(bào)告。

?

?

圖6.基于playwright的UI自動(dòng)化測(cè)試系統(tǒng)流程圖

3.5測(cè)試Demo

以下擷取Case為Playwright錄制生成代碼和接口相關(guān)擴(kuò)展方法相結(jié)合,實(shí)現(xiàn)車(chē)險(xiǎn)首頁(yè)切換車(chē)輛后報(bào)價(jià),并通過(guò)獲取該用戶pin下車(chē)列表的Demo實(shí)例。

    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***");

                // 監(jiān)聽(tīng)響應(yīng)
                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("更換車(chē)輛").click();
                page.getByText("晉L613A4").click();
                page.getByRole(AriaRole.BUTTON, new Page.GetByRoleOptions().setName("查看報(bào)價(jià)")).click();
                page.getByText("查看該方案報(bào)價(jià)").click();

    }

執(zhí)行效果如圖7,可以靈活在此基礎(chǔ)上擴(kuò)展其他Case。

?

4總結(jié)與展望

利用Playwright,我們可以輕松地編寫(xiě)可靠、快速和可維護(hù)的自動(dòng)化測(cè)試腳本。這些腳本可以模擬真實(shí)用戶的交互行為,覆蓋各種可能的測(cè)試場(chǎng)景,從而確保車(chē)險(xiǎn)的UI在不同環(huán)境和配置下的穩(wěn)定性和正確性。通過(guò)playwright實(shí)現(xiàn)用例自動(dòng)生成,定時(shí)執(zhí)行并產(chǎn)出報(bào)告的車(chē)險(xiǎn)UI自動(dòng)化測(cè)試系統(tǒng),能夠幫助我們顯著提高測(cè)試效率,節(jié)省大量的測(cè)試時(shí)間。展望未來(lái),我們期待將車(chē)險(xiǎn)UI自動(dòng)化測(cè)試技術(shù)繼續(xù)發(fā)展和完善,為目前的測(cè)試工作提升效率,未來(lái)帶來(lái)更多的創(chuàng)新和改進(jìn)。

審核編輯 黃宇

?

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 接口
    +關(guān)注

    關(guān)注

    33

    文章

    9005

    瀏覽量

    153780
  • ui
    ui
    +關(guān)注

    關(guān)注

    0

    文章

    208

    瀏覽量

    21822
收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    自動(dòng)化計(jì)算機(jī)的功能與用途

    工業(yè)自動(dòng)化是指利用自動(dòng)化計(jì)算機(jī)來(lái)控制工業(yè)環(huán)境中的流程、機(jī)器人和機(jī)械,以制造產(chǎn)品或其部件。工業(yè)自動(dòng)化的目的是提高生產(chǎn)率、增加靈活性,并提升制造過(guò)程的質(zhì)量。工業(yè)自動(dòng)化在汽車(chē)制造中體現(xiàn)得最為
    的頭像 發(fā)表于 07-15 16:32 ?136次閱讀
    <b class='flag-5'>自動(dòng)化</b>計(jì)算機(jī)的功能與用途

    “連接”“智控”!PROFIBUS DP轉(zhuǎn)EtherCAT引爆煤礦自動(dòng)化新風(fēng)暴

    在煤礦井下作業(yè)中,自動(dòng)化控制系統(tǒng)對(duì)于提升生產(chǎn)效率和保障安全生產(chǎn)至關(guān)重要。其中,通信技術(shù)的穩(wěn)定與高效直接影響著整個(gè)系統(tǒng)的運(yùn)行。PROFIBUS DP與EtherCAT作為兩種常用的工業(yè)通信協(xié)議,在煤礦井下自動(dòng)化
    的頭像 發(fā)表于 06-20 14:27 ?170次閱讀

    APP自動(dòng)化測(cè)試框架

    APP自動(dòng)化測(cè)試框架是一套結(jié)合工具鏈、設(shè)計(jì)模式和技術(shù)規(guī)范的集成解決方案。以下是基于主流技術(shù)實(shí)踐的核心要點(diǎn)總結(jié): 一、核心模塊構(gòu)成 環(huán)境管理? 支持物理機(jī)/虛擬機(jī)/容器部署,集成ADB、Appium
    的頭像 發(fā)表于 05-07 07:35 ?148次閱讀
    APP<b class='flag-5'>自動(dòng)化</b>測(cè)試框架

    3DAI,機(jī)器視覺(jué)全面賦能工業(yè)自動(dòng)化

    電子發(fā)燒友網(wǎng)報(bào)道(文/吳子鵬)機(jī)器視覺(jué)作為人工智能與工業(yè)自動(dòng)化深度融合的核心技術(shù),近年來(lái)在算法創(chuàng)新、硬件迭代以及行業(yè)應(yīng)用等方面均實(shí)現(xiàn)了跨越式發(fā)展,推動(dòng)終端市場(chǎng)應(yīng)用持續(xù)迭代升級(jí)。根據(jù) GGII
    的頭像 發(fā)表于 04-08 01:03 ?2054次閱讀

    智能讀碼器:工業(yè)自動(dòng)化的眼睛與大腦

    隨著技術(shù)的不斷進(jìn)步,讀碼器的功能也在持續(xù)拓展。單一的數(shù)據(jù)采集智能的數(shù)據(jù)分析,獨(dú)立設(shè)備自動(dòng)化
    的頭像 發(fā)表于 03-18 09:12 ?335次閱讀
    智能讀碼器:工業(yè)<b class='flag-5'>自動(dòng)化</b>的眼睛與大腦

    “制造”“智造”:三維掃描自動(dòng)化智能檢測(cè)系統(tǒng)

    CASAIM自動(dòng)化智能檢測(cè)系統(tǒng),憑借前沿技術(shù)與場(chǎng)景化解決方案,為制造業(yè)客戶提供設(shè)計(jì)生產(chǎn)的生命周期質(zhì)量保障。
    的頭像 發(fā)表于 03-12 13:21 ?307次閱讀
    <b class='flag-5'>從</b>“制造”<b class='flag-5'>到</b>“智造”:三維掃描<b class='flag-5'>自動(dòng)化</b>智能檢測(cè)系統(tǒng)

    初級(jí)高級(jí):工業(yè)自動(dòng)化編程崗位的真實(shí)寫(xiě)照

    在工業(yè)自動(dòng)化領(lǐng)域,存在著一種看似普遍的現(xiàn)象:不到 30 人的小型自動(dòng)化集成公司,工程師們使用著國(guó)產(chǎn)低價(jià)的 PLC 替代品,卻仍覺(jué)得成本壓力巨大,甚至為了節(jié)省開(kāi)支,不得不退而求其次,選用一些老舊
    的頭像 發(fā)表于 03-05 10:08 ?579次閱讀
    <b class='flag-5'>從</b>初級(jí)<b class='flag-5'>到</b>高級(jí):工業(yè)<b class='flag-5'>自動(dòng)化</b>編程崗位的真實(shí)寫(xiě)照

    RS485接口電路設(shè)計(jì)全面指南:基礎(chǔ)實(shí)踐

    在當(dāng)今的工業(yè)自動(dòng)化與通信技術(shù)領(lǐng)域,RS485接口憑借其卓越的性能與高度的穩(wěn)定性,已然成為不可或缺的一部分。本文旨在為您提供一份詳盡的RS485接口電路設(shè)計(jì)指南,內(nèi)容涵蓋基本概念的解析、硬件層面的具體
    的頭像 發(fā)表于 02-28 19:35 ?1863次閱讀
    RS485<b class='flag-5'>接口</b>電路設(shè)計(jì)全面指南:<b class='flag-5'>從</b>基礎(chǔ)<b class='flag-5'>到</b><b class='flag-5'>實(shí)踐</b>

    自動(dòng)化創(chuàng)建UI并解析數(shù)據(jù)

    *附件:32960_auto.rar備注:Main.vi是ui自動(dòng)化2.1.vi,配置文件為32960.B.ini。 目前可以實(shí)現(xiàn)根據(jù)配置文件自動(dòng)化創(chuàng)建控件并布局,且可以自動(dòng)解析接收到
    發(fā)表于 12-10 08:41

    自動(dòng)化創(chuàng)建UI并解析數(shù)據(jù)

    Labview實(shí)現(xiàn)動(dòng)態(tài)增加控件效果 - *附件:32960_auto.rar 備注:Main.vi是ui自動(dòng)化2.1.vi,配置文件為32960.B.ini。 目前可以實(shí)現(xiàn)根據(jù)配置文件自動(dòng)化創(chuàng)建控件
    發(fā)表于 11-29 11:26

    LMX2595EVM如何實(shí)現(xiàn)自動(dòng)化控制?

    我需要用LMX2595EVM實(shí)現(xiàn)自動(dòng)化控制,請(qǐng)問(wèn)那里有LMX2595EVM相關(guān)的sdk接口文檔或者Demo?
    發(fā)表于 11-13 06:09

    Appium +iOS自動(dòng)化測(cè)試教程(實(shí)踐、總結(jié) 、踩坑)

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

    中國(guó)工業(yè)自動(dòng)化的現(xiàn)狀和發(fā)展方向

    隨著控制技術(shù)、計(jì)算機(jī)、通信、網(wǎng)絡(luò)等技術(shù)的發(fā)展,計(jì)算機(jī)控制信息交互溝通正迅速覆蓋工廠的現(xiàn)場(chǎng)設(shè)備,生產(chǎn),管理等各個(gè)層次。工業(yè)自動(dòng)化一般體現(xiàn)在對(duì)工業(yè)生產(chǎn)過(guò)程及其機(jī)電設(shè)備、工藝裝備進(jìn)行測(cè)量與控制的
    的頭像 發(fā)表于 11-07 17:19 ?1338次閱讀

    探索Playwright:前端自動(dòng)化測(cè)試的新紀(jì)元

    作者:京東保險(xiǎn) 張新磊 背景 在前端開(kāi)發(fā)中,自動(dòng)化測(cè)試是確保軟件質(zhì)量和用戶體驗(yàn)的關(guān)鍵環(huán)節(jié)。隨著Web應(yīng)用的復(fù)雜性不斷增加,手動(dòng)測(cè)試已經(jīng)無(wú)法滿足快速迭代和持續(xù)交付的需求。自動(dòng)化測(cè)試通過(guò)模擬用戶
    的頭像 發(fā)表于 10-22 14:27 ?708次閱讀

    AGV立庫(kù),物流自動(dòng)化的更迭與未來(lái)

    AGV叉車(chē)推動(dòng)柔性制造,物流自動(dòng)化提升效率。AGV與智能立庫(kù)結(jié)合,提高生產(chǎn)柔性和競(jìng)爭(zhēng)力,減少裝配時(shí)間和故障,助力企業(yè)高效智能生產(chǎn),適應(yīng)柔性、智能發(fā)展趨勢(shì)。
    的頭像 發(fā)表于 08-13 09:53 ?744次閱讀
    <b class='flag-5'>從</b>AGV<b class='flag-5'>到</b>立庫(kù),物流<b class='flag-5'>自動(dòng)化</b>的更迭與未來(lái)