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

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

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

3天內不再提示

基于docker的多線程并發UI自動化測試框架

電子工程師 ? 來源:全棧軟件測試在線 ? 作者:全棧軟件測試在線 ? 2022-08-08 10:28 ? 次閱讀

01

需求背景

日常測試中會遇到對web應用進行UI自動化的測試場景,一般常用的工具是使用Selenium,一套簡單的UI自動化架構如下:

3542a30a-16c1-11ed-ba43-dac502259ad0.png

簡單的UI自動化架構

上圖即為簡單搭建的一套UI自動化測試架構,但存在如下缺點:

串行執行測試用例:即同一時刻只啟動一個進程去啟動一個瀏覽器進行測試,有時工作中需要進行瀏覽器的兼容性測試,這樣的話只能等一個進程結束后,再開啟另一個進程開始另一個瀏覽器的測試,效率很低。

一臺機器只能安裝一個版本的瀏覽器:有時兼容性測試不僅要測試不同瀏覽器的情況,還要測試同一瀏覽器不同版本的情況,通常一臺機器只能安裝1個版本的chrome或firefox,這樣就沒辦法測試不同版本的兼容性情況了。

測試腳本與瀏覽器部署在同一臺機器,試想一臺機器既跑測試腳本,又開啟進程啟動瀏覽器進行測試,嚴重消耗機器硬件資源。

為了解決(1)的問題,可以考慮用多線程并發的方式執行測試用例,如下圖

35576b78-16c1-11ed-ba43-dac502259ad0.png

并發測試框架

為了解決(2)和(3)的問題,可以在并發框架的基礎上,采用SeleniumGrid這一分布式測試工具,實現測試腳本和測試執行節點的分離,即用遠程機作為SeleniumNode,在其上安裝不同版本的不同瀏覽器,這樣在本機運行測試腳本后,測試腳本會向SeleniumGrid發起測試請求,SeleniumGrid會尋找當前處于空閑狀態的節點,并在其上執行測試。

整體架構如下:

35684c54-16c1-11ed-ba43-dac502259ad0.png

并發分布式測試框架

至此,這種并發分布式測試框架基本上就可以滿足我們的日常測試需求了,但仍然存在缺點:

(1) 執行節點機配置麻煩:常用的方式就是為每個執行節點配一臺虛擬機,然后在每臺執行節點機上都要重新配置一遍測試環境,最重要的一點是,測試資源很緊張,沒有那么多虛擬機供我們使用。

為了解決(1)的問題,我們需要一臺測試執行節點,需要搭建一臺虛擬機,然后在其上進行環境配置,如果再需要一臺測試執行節點,又要重復上述的過程。一是搭建一臺虛擬機周期較長,虛擬機啟動時間較長,且虛擬機資源依賴于硬件配置,二是每臺虛擬機都要重新配置。

而利用docker可以解決上述問題,其具有以下優點:

docker鏡像不并包含linux內核,多個docker鏡像共用宿主機的linux內核,即相當于我們只要有一個linux內核虛擬機就可以了,可以減少對硬件資源的依賴。

一個docker鏡像可以運行很多docker容器,每個docker容器之間都是物理隔離的。

docker鏡像倉庫里會有其他人已經制作好的相關鏡像,不需要我們自己制作,或者我們把其他人的鏡像拿來,改下某些配置變為我們自己想要的鏡像就ok了

至此,我們可以利用docker的容器來作為UI自動化測試的執行節點,取代之前的虛擬機。

02

框架搭建

基于以上介紹,整體的測試框架如下:

3580321a-16c1-11ed-ba43-dac502259ad0.png

基于docker的多線程并發UI自動化測試框架

框架分為3個部分,多線程并發測試框架采用Python編寫,調用robot framework執行測試用例,并將測試請求發送給docker容器中運行的SeleniumHub,SeleniumHub尋找處于空閑狀態的SeleniumNode執行節點進行web測試,測試結束后,在部署測試腳本的主機上生成各線程運行后的測試報告,再調用robot framework的rebot命令合并測試報告,生成最后的匯總測試報告發布。下面詳細介紹搭建步驟。

03

測試環境搭建


1、安裝docker

(1)win7用戶,進入Docker Toolbox的下載網頁,選擇windows版本下載,win10用戶進入docker官網下載Docker For Windows安裝。

整個安裝過程非常簡單,安裝完成后,可以在桌面得到如下的三個圖標:

3593a0a2-16c1-11ed-ba43-dac502259ad0.png

win7安裝docker toolbox

(2)設置環境變量

安裝完成后,建議先配置一個環境變量MACHINE_STORAGE_PATH,來自定義虛擬機保存的位置,因為之后下載的鏡像越來越多,都是放在虛擬機的虛擬磁盤文件中,虛擬磁盤文件會越來越大,放在默認的C盤用戶目錄下可能會在以后造成一些麻煩,參考下圖:

35a3536c-16c1-11ed-ba43-dac502259ad0.png

設置環境變量

(3)開始使用

點擊Docker Quickstart Terminal圖標,從而打開一個Docker Toolbox terminal,若報如下圖信息,則去https://github.com/boot2docker/boot2docker/releases下載對應版本的boot2docker.iso放到MACHINE_STORAGE_PATH/cache下,再重新打開Docker Quickstart Terminal

35b82cba-16c1-11ed-ba43-dac502259ad0.png

下載相應的boot2docker.iso到MACHINE_STORAGE_PATH/cache下

再次打開terminal后,terminal會自動進行一些設置,需要點時間,全部完成后,出現如下結果表示docker安裝ok了:

35dddc58-16c1-11ed-ba43-dac502259ad0.png

docker啟動ok

另外,我們可以記下docker宿主機的IP 192.168.99.100,可以用xshell來ssh登錄docker宿主機方便操作,賬號和密碼是docker/tcuser:

35efbb80-16c1-11ed-ba43-dac502259ad0.png

xshell連接docker宿主機

35fbde9c-16c1-11ed-ba43-dac502259ad0.png

2、下載或制作相關鏡像

docker pull selenium/hub,它會自動從鏡像源中下載別人制作好的最新的selenium/hub鏡像,可以通過docker images看到下載好的selenium/hub鏡像

36116870-16c1-11ed-ba43-dac502259ad0.png

selenium/hub鏡像

對于seleniumnode鏡像,兼容性測試時,需要我們覆蓋更多版本的瀏覽器,所以,可以選擇自己制作Dockerfile來生成自己想要的瀏覽器版本的鏡像。

然后通過如下命令來構建鏡像,其中selenium/vnc-node-firefox-debug是自己起的鏡像名,后面的.表示Dockerfile所在的目錄為當前目錄:

docker build -t selenium/vnc-node-firefox-debug .

用同樣的方法可以生成chrome瀏覽器的鏡像,生成后的鏡像如下圖:

3629251e-16c1-11ed-ba43-dac502259ad0.png

selenium-node-chrome/firefox鏡像

3、啟動容器

(1)啟動selenium/hub容器

docker run -p 5555:4444 -d --name 'selenium_hub' selenium/hub

run:通過鏡像啟動一個容器

-p:端口映射,5555是容器宿主機(運行docker的主機)的端口,4444是我們容器(運行selenium_hub虛擬機)的端口。我們把容器的4444端口映射給docker主機的5555端口,就可以通過docker主機的5555端口來訪問selenium_hub容器了

(2)啟動selenium/node容器

docker run -P -d --link selenium_hub:hub selenium/vnc-node-firefox-debug

docker run -P -d --link selenium_hub:hub selenium/vnc-node-chrome-debug

-P:隨機生成映射端口號,上文中的-p是指定特定的端口號,這里node并不需要知道容器內部的端口號,所以隨機映射即可

--link:指定selenium-node容器依賴容器selenium_hub

容器啟動完后,可通過docker ps查看啟動的容器

363eb74e-16c1-11ed-ba43-dac502259ad0.png

在瀏覽器中查看selenium容器是否正常啟動,http://192.168.99.100:5555/grid/console

365af4d6-16c1-11ed-ba43-dac502259ad0.png

selenium容器啟動成功

04

多線程并發測試框架搭建

采用Python編寫多線程并發程序,robot framework執行測試用例。

1、測試用例

在robot framework中,將測試用例打上標簽tag,來區分要測試的不同版本的不同瀏覽器,remote_url為selenium_hub容器的地址,已將該容器的4444端口映射到docker宿主機的5555端口,所以這里直接通過宿主機的5555端口訪問hub容器。

367e28a2-16c1-11ed-ba43-dac502259ad0.png

測試用例

2、多線程并發框架

多線程并發框架采用Python編寫,程序目錄如下:

368fabb8-16c1-11ed-ba43-dac502259ad0.png

各文件代碼如下:

utils.py:

369c10ce-16c1-11ed-ba43-dac502259ad0.png

utils.py

36ac124e-16c1-11ed-ba43-dac502259ad0.png

utils.py

multiThreadings.py

36c05812-16c1-11ed-ba43-dac502259ad0.png

multiThreadings.py

callRobot.py

36cd4fea-16c1-11ed-ba43-dac502259ad0.png

callRobot.py

36d9c266-16c1-11ed-ba43-dac502259ad0.png

callRobot.py

run.py

36eb8e10-16c1-11ed-ba43-dac502259ad0.png

run.py

腳本run.py接收兩個參數,第1個參數為要執行的robot測試套件,第2個參數為要執行的robot用例的標簽,各標簽之間以逗號分隔,有多少個標簽,就啟動多少個線程來調用robot的pybot命令執行打上相應標簽的測試用例。

05

運行

這里開啟2個node節點,一個chrome,一個firefox。

cmd下執行腳本,robot測試套件名為TestSuite.txt,執行標簽為chromeNode1,firefoxNode1的測試用例:

python run.py TestSuite.txt selenium_node=chromeNode1,firefoxNode1

docker宿主機下,執行docker logs -f selenium_hub,可以查看hub容器的執行日志:

36feec76-16c1-11ed-ba43-dac502259ad0.png

selenium_hub容器日志

通過vnc viwer可視化查看node容器內瀏覽器的運行情況:

3710c8ce-16c1-11ed-ba43-dac502259ad0.png

node容器內瀏覽器運行情況

最終用rebot命令合并各線程生成的測試報告,合并后的報告如下:

37325890-16c1-11ed-ba43-dac502259ad0.png

合并報告

至此,基于docker的selenium并發web應用UI自動化測試框架搭建完成。之后,自己會再探究將docker容器的創建,啟動和停止自動化,實現測試環境的自動化搭建

審核編輯 :李倩

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

    關注

    29

    文章

    5620

    瀏覽量

    79564
  • 虛擬機
    +關注

    關注

    1

    文章

    931

    瀏覽量

    28381
  • Docker
    +關注

    關注

    0

    文章

    492

    瀏覽量

    11939

原文標題:城會玩!Selenium+Docker成功解決這一大難題!

文章出處:【微信號:全棧軟件測試在線,微信公眾號:全棧軟件測試在線】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    基于 Docker 與 Jenkins 實現自動化部署

    優化,為 Docker 容器應用與 Jenkins 自動化流水線提供了理想的運行環境。無論是快速構建、測試還是部署,Flexus X 都能確保流程順暢無阻,大幅提升軟件開發與交付效率
    的頭像 發表于 01-07 17:25 ?214次閱讀
    基于 <b class='flag-5'>Docker</b> 與 Jenkins 實現<b class='flag-5'>自動化</b>部署

    通用自動化測試軟件 - TAE

    INTEWORK-TAE(Test Automation Executor) 是一款通用的測試用例自動化執行框架,用于汽車電子自動化測試,可
    的頭像 發表于 01-02 13:42 ?128次閱讀
    通用<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>軟件 - TAE

    串口屏自動化測試

    嚴謹而高效的自動化測試方案顯得尤為重要。以下是對串口屏自動化測試策略的深度解析,旨在通過高質量的測試設計,嚴格控制產品設計質量,推動產業升級
    的頭像 發表于 12-27 17:17 ?1184次閱讀

    自動化創建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

    socket 多線程編程實現方法

    在現代網絡編程中,多線程技術被廣泛應用于提高服務器的并發處理能力。Socket編程是網絡通信的基礎,而將多線程技術應用于Socket編程,可以顯著提升服務器的性能。 多線程編程的基本概
    的頭像 發表于 11-12 14:16 ?453次閱讀

    Python中多線程和多進程的區別

    Python作為一種高級編程語言,提供了多種并發編程的方式,其中多線程與多進程是最常見的兩種方式之一。在本文中,我們將探討Python中多線程與多進程的概念、區別以及如何使用線程池與進
    的頭像 發表于 10-23 11:48 ?476次閱讀
    Python中<b class='flag-5'>多線程</b>和多進程的區別

    開關電源自動化測試設備:如何實現自動化測試

    開關電源自動化測試設備是將測試軟件和測試硬件集成在一個電源測試柜中的ate自動測試設備,其
    的頭像 發表于 08-30 18:19 ?1376次閱讀
    開關電源<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>設備:如何實現<b class='flag-5'>自動化</b><b class='flag-5'>測試</b>?

    bootloader開多線程做引導程序,跳app初始后直接進hardfualt,為什么?

    如標題,想做一個遠程升級的項目,bootloader引導區域和app都是開多線程跑的,就是自己寫了個小的任務調度器,沒什么功能主要是想讓程序快速的響應,延時不會對其他程序造成堵塞,程序測試
    發表于 04-18 06:07

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

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

    Python自動化測試框架及其應用

    Pytest是一個非常成熟的全功能的Python測試框架,與python自帶的unittest測試框架類似,但是比unittest框架使用起
    的頭像 發表于 04-03 16:15 ?588次閱讀
    Python<b class='flag-5'>自動化</b><b class='flag-5'>測試</b><b class='flag-5'>框架</b>及其應用

    鴻蒙原生應用開發-ArkTS語言基礎類庫多線程并發概述

    的一系列復雜偶發的問題,同時并發度也相對較高,因此得到了廣泛的支持和使用,也是當前ArkTS語言選擇的并發模型。 由于Actor模型的內存隔離特性,所以需要進行跨線程的數據序列傳輸。
    發表于 03-28 14:35

    鴻蒙原生應用開發-ArkTS語言基礎類庫多線程并發概述

    的一系列復雜偶發的問題,同時并發度也相對較高,因此得到了廣泛的支持和使用,也是當前ArkTS語言選擇的并發模型。 由于Actor模型的內存隔離特性,所以需要進行跨線程的數據序列傳輸。
    發表于 03-22 15:40

    java實現多線程的幾種方式

    Java實現多線程的幾種方式 多線程是指程序中包含了兩個或以上的線程,每個線程都可以并行執行不同的任務或操作。Java中的多線程可以提高程序
    的頭像 發表于 03-14 16:55 ?772次閱讀

    HarmonyOS如何使用異步并發能力進行開發

    。 ? ● 異步并發是指異步代碼在執行到一定程度后會被暫停,以便在未來某個時間點繼續執行,這種情況下,同一時間只有一段代碼在執行。 ? ● 多線程并發允許在同一時間段內同時執行多段代碼。在主
    的頭像 發表于 02-18 09:18 ?576次閱讀
    主站蜘蛛池模板: 成人黄色在线网站 | 国产精品福利午夜一级毛片 | 国产理论在线观看 | 奇米影视四色首页手机在线 | 永久视频免费 | 91精品日本久久久久久牛牛 | 男人都懂的网址在线看片 | 四虎精品久久久久影院 | 色色色爱 | 偷偷狠狠的日日2020 | 爽好舒服快受不了了老师 | 亚洲卡一卡2卡三卡4卡国色 | 18女人毛片 | 中文字幕一区二区三区 精品 | 色第一页 | 婷婷丁香激情五月 | 亚洲男女免费视频 | 四虎影院视频 | 国产精品资源在线播放 | 国产片翁熄系列乱在线视频 | 午夜大片网 | 国产资源网 | 性欧美激情在线观看 | www色视频| 91中文字幕视频 | 亚洲欧美v视色一区二区 | 五月天婷婷基地 | 韩国免费特一级毛片 | 香港三澳门三日本三级 | 亚洲成年人在线 | 亚洲午夜小视频 | 国产综合精品久久久久成人影 | 久久99久久精品国产99热 | www.天天射.com | 欧美另类激情 | 欧美tube6最新69| 丁香综合激情 | 1024国产高清精品推荐 | 天天操2023| 亚洲人成电影在线小说网色 | 精品特级毛片 |