亚洲免费av电影一区二区三区,日韩爱爱视频,51精品视频一区二区三区,91视频爱爱,日韩欧美在线播放视频,中文字幕少妇AV,亚洲电影中文字幕,久久久久亚洲av成人网址,久久综合视频网站,国产在线不卡免费播放

        ?

        基于pytest和JMeter的自動(dòng)化測(cè)試系統(tǒng)設(shè)計(jì)和實(shí)現(xiàn)

        2019-01-11 06:00:16李一風(fēng)
        關(guān)鍵詞:測(cè)試計(jì)劃機(jī)上測(cè)試用例

        李一風(fēng)

        (上海你我貸互聯(lián)網(wǎng)金融信息服務(wù)有限公司, 上海 200120)

        0 引 言

        自動(dòng)化測(cè)試是軟件測(cè)試未來的發(fā)展方向,自動(dòng)化測(cè)試中往往會(huì)遇到測(cè)試腳本管理困難、測(cè)試效率低等問題[1-4]。如何選用合適的測(cè)試工具和搭建有效的測(cè)試框架是測(cè)試工程師一直在研究的問題。JMeter作為一種功能豐富的測(cè)試工具受到了廣泛關(guān)注和研究[2-5]。Apache JMeter是一個(gè)基于Java語言的開源工具,可以用于軟件的功能測(cè)試和性能測(cè)試。在被測(cè)系統(tǒng)功能越來越多,結(jié)構(gòu)越來越復(fù)雜的今天,測(cè)試用例往往非常龐大,一個(gè)回歸測(cè)試就需要幾十或上百個(gè)JMeter腳本組成的測(cè)試集。單純使用JMeter時(shí)會(huì)存在以下問題。

        (1)測(cè)試用例的管理。JMeter本身不提供測(cè)試集的管理功能,多個(gè)JMeter腳本的執(zhí)行一般需要測(cè)試人員手動(dòng)整理出測(cè)試計(jì)劃中應(yīng)該包含的測(cè)試用例。手動(dòng)在命令行啟動(dòng)JMeter命令,并在發(fā)生錯(cuò)誤時(shí)進(jìn)行人工排查,達(dá)不到一鍵執(zhí)行和無人值守。

        (2)大量腳本的執(zhí)行效率問題。JMeter自帶遠(yuǎn)程執(zhí)行功能只是針對(duì)一個(gè)腳本中的多個(gè)步驟并行,不支持多個(gè)JMeter腳本的并行執(zhí)行。需要實(shí)現(xiàn)多個(gè)測(cè)試用例的并行執(zhí)行時(shí),需要自行編寫復(fù)雜的調(diào)度程序或者測(cè)試人員人工介入。前者成本較高,后者無法實(shí)現(xiàn)完全的自動(dòng)化。

        本文設(shè)計(jì)并實(shí)現(xiàn)了一種基于pytest的自動(dòng)化測(cè)試系統(tǒng),具有如下特點(diǎn):

        (1)充分利用pytest本身的功能和豐富的插件,只需編寫少量代碼、簡(jiǎn)單輕量、可以快速部署。

        (2)實(shí)現(xiàn)了多JMeter腳本的管理,可以一鍵執(zhí)行測(cè)試集,并在腳本執(zhí)行中自動(dòng)進(jìn)行異常重試,實(shí)現(xiàn)了無人值守。

        (3)進(jìn)行遠(yuǎn)程分布式執(zhí)行,使得在遇到測(cè)試資源瓶頸時(shí),快速進(jìn)行測(cè)試執(zhí)行機(jī)的橫向擴(kuò)展來提高測(cè)試計(jì)劃的執(zhí)行效率。

        (4)自動(dòng)生成JUnit格式報(bào)告,可以方便的與持續(xù)集成系統(tǒng)進(jìn)行集成,生成各種測(cè)試報(bào)告和圖表。

        1 基于pytest的自動(dòng)化測(cè)試系統(tǒng)

        1.1 pytest

        pytest是基于Python語言的一種自動(dòng)化測(cè)試框架,本身具有Python語言的良好的跨平臺(tái)性和簡(jiǎn)單易上手的優(yōu)點(diǎn)[6-9]。pytest可以用于單元測(cè)試或功能測(cè)試,相比其它測(cè)試框架,具有以下優(yōu)點(diǎn):

        (1)簡(jiǎn)單靈活,容易上手。

        (2)支持測(cè)試用例的參數(shù)化。

        (3)能支持簡(jiǎn)單的單元測(cè)試和復(fù)雜的功能測(cè)試。

        (4)具有較多第三方插件,并可以自定義擴(kuò)展。

        (5)執(zhí)行測(cè)試過程中可將某些測(cè)試跳過,或?qū)δ承╊A(yù)期失敗的用例標(biāo)記成失敗。

        (6)支持多種格式的測(cè)試報(bào)告,可很好地與持續(xù)系統(tǒng)集成。

        基于上述優(yōu)點(diǎn),pytest已經(jīng)成為Python中最流行的測(cè)試框架之一。

        1.2 系統(tǒng)結(jié)構(gòu)介紹

        該框架主要分為4個(gè)模塊,自動(dòng)化測(cè)試系統(tǒng)結(jié)構(gòu)如圖1所示。

        圖1 分布式自動(dòng)化測(cè)試系統(tǒng)結(jié)構(gòu)圖

        Fig.1Structurediagramofdistributedautomatedtestingsystem

        (1)初始化模塊。用于讀取配置文件,獲取測(cè)試要執(zhí)行的各種參數(shù);從Git倉庫拉取最新的JMeter腳本文件,轉(zhuǎn)換腳本文件為pytest的測(cè)試用例參數(shù);建立與測(cè)試執(zhí)行機(jī)的SSH連接,同步要執(zhí)行的JMeter腳本到各個(gè)測(cè)試執(zhí)行機(jī);在測(cè)試執(zhí)行機(jī)上創(chuàng)建子進(jìn)程等待測(cè)試任務(wù)的分配。

        (2)任務(wù)調(diào)度模塊。根據(jù)調(diào)度算法,分配測(cè)試腳本到不同的執(zhí)行機(jī)上的子進(jìn)程。

        (3)測(cè)試執(zhí)行模塊。在子進(jìn)程中執(zhí)行測(cè)試腳本,通過解析JMeter生成的xml格式的報(bào)告,判斷測(cè)試執(zhí)行是否成功。

        (4)報(bào)告收集模塊。將所有測(cè)試執(zhí)行機(jī)生成的多個(gè)測(cè)試腳本的報(bào)告收集回調(diào)度機(jī),生成整個(gè)測(cè)試計(jì)劃的報(bào)告。

        1.3 基于pytest的自動(dòng)化測(cè)試流程

        本文的自動(dòng)化測(cè)試系統(tǒng)工作流程如圖2所示。

        (1)調(diào)用入口程序觸發(fā)一次測(cè)試計(jì)劃的執(zhí)行,進(jìn)行測(cè)試計(jì)劃配置文件的讀取,得到要執(zhí)行的腳本Git倉庫地址和測(cè)試用例目錄、測(cè)試環(huán)境等參數(shù),并啟動(dòng)pytest主程序。

        圖2 自動(dòng)化測(cè)試流程圖

        (2)conftest.py作為pytest主程序的默認(rèn)參數(shù)化文件。本系統(tǒng)在其中實(shí)現(xiàn)了測(cè)試用例的獲取和轉(zhuǎn)換。包括遍歷測(cè)試目錄、得到測(cè)試腳本的名稱和路徑、排除不執(zhí)行的用例(skip case和known error case)、組成pytest需要的參數(shù)化變量。

        (3)pytest主進(jìn)程開始執(zhí)行,首先從調(diào)度機(jī)同步需要執(zhí)行的測(cè)試腳本文件到各個(gè)執(zhí)行機(jī),進(jìn)行測(cè)試任務(wù)的調(diào)度和分發(fā)。

        (4)測(cè)試執(zhí)行機(jī)啟動(dòng)JMeter進(jìn)程,執(zhí)行JMeter腳本,并通過解析xml判斷是否執(zhí)行成功。為了排除測(cè)試環(huán)境不穩(wěn)定造成的測(cè)試失敗,本系統(tǒng)實(shí)現(xiàn)了失敗重跑機(jī)制,即每個(gè)測(cè)試有一個(gè)最大重試次數(shù),當(dāng)測(cè)試失敗時(shí),會(huì)判斷是否已經(jīng)達(dá)到最大的重試次數(shù)。當(dāng)沒有達(dá)到時(shí),會(huì)對(duì)測(cè)試用例進(jìn)行重復(fù)執(zhí)行,取成功的一次執(zhí)行作為最終結(jié)果,直到達(dá)到最大重試次數(shù)。實(shí)踐表明,這種機(jī)制可以降低測(cè)試環(huán)境不穩(wěn)定時(shí)測(cè)試結(jié)果的誤報(bào)率。另外,為了防止單個(gè)測(cè)試用例執(zhí)行時(shí)間過長導(dǎo)致整個(gè)測(cè)試計(jì)劃執(zhí)行時(shí)間過長,本系統(tǒng)實(shí)現(xiàn)了超時(shí)結(jié)束機(jī)制,即設(shè)置單個(gè)測(cè)試用例執(zhí)行時(shí)間的最大值,當(dāng)某個(gè)測(cè)試用例的執(zhí)行時(shí)間超過這個(gè)最大值時(shí),殺掉當(dāng)前測(cè)試用例的子進(jìn)程,并標(biāo)記測(cè)試結(jié)果為失敗。

        (5)所有用例執(zhí)行完成時(shí),由調(diào)度機(jī)收集在測(cè)試執(zhí)行機(jī)上生成的測(cè)試用例報(bào)告,并合并多個(gè)測(cè)試用例報(bào)告為整個(gè)測(cè)試計(jì)劃的匯總報(bào)告。

        1.4 自動(dòng)化測(cè)試系統(tǒng)的主要技術(shù)

        1.4.1 用例的管理

        通過使用pytest的參數(shù)化用例方法實(shí)現(xiàn)JMeter腳本到pytest測(cè)試用例的轉(zhuǎn)變。由pytest實(shí)現(xiàn)測(cè)試用例的管理,可以方便實(shí)現(xiàn)從指定的目錄中篩選用例,根據(jù)腳本的名稱篩選用例,指定要skip或者期望失敗的用例等。要實(shí)現(xiàn)用例管理,關(guān)鍵問題是如何將以JMeter腳本形式存在的用例轉(zhuǎn)變?yōu)閜ytest管理的用例。這就用到了pytest參數(shù)化測(cè)試用例功能。下面介紹參數(shù)化測(cè)試用例的用法。

        在pytest中使用裝飾器@pytest.mark.parametrize來實(shí)現(xiàn)用例的參數(shù)化。一個(gè)典型的例子是:

        @pytest.mark.parametrize("test_input,expected", [

        ("3+5", 8),

        ("2+4", 6),

        ("6+9", 42),])

        def test_eval(test_input, expected):

        assert eval(test_input) == expected

        在這里,@parametrize裝飾器定義了3組不同的輸入值和期望值(即3個(gè)用例),test_eval參數(shù)將會(huì)使用這3組值執(zhí)行3次。執(zhí)行的輸出:1 failed, 2 passed in 0.06 seconds表示執(zhí)行了3個(gè)用例。

        同理,在手動(dòng)執(zhí)行單個(gè)JMeter測(cè)試用例時(shí)傳入用例名和用例目錄進(jìn)行單個(gè)測(cè)試的執(zhí)行。在本系統(tǒng)中,通過自動(dòng)遍歷測(cè)試目錄,找到所有要執(zhí)行的JMeter腳本,解析出目錄和文件名作為pytest的測(cè)試參數(shù)傳入,在測(cè)試函數(shù)中自動(dòng)調(diào)用JMeter命令來執(zhí)行測(cè)試。減少了手動(dòng)介入,實(shí)現(xiàn)了用例的高效管理。

        1.4.2 測(cè)試用例執(zhí)行結(jié)果的判斷

        在傳統(tǒng)方法中,一般需要測(cè)試人員通過查看每個(gè)JMeter腳本生成的結(jié)果樹來判斷斷言是否成功,并且單個(gè)測(cè)試報(bào)告無法與持續(xù)集成系統(tǒng)集成顯示為整個(gè)測(cè)試計(jì)劃的報(bào)告。本系統(tǒng)通過解析xml報(bào)告來并通過pytest的斷言來實(shí)現(xiàn)自動(dòng)化判斷測(cè)試用例結(jié)果,并形成多個(gè)JMeter測(cè)試用例的匯總報(bào)告。為了說明工作原理,下面以一個(gè)有2個(gè)步驟的測(cè)試用例的報(bào)告來說明如何判斷測(cè)試用例的執(zhí)行結(jié)果。

        httpSample和sample表示2個(gè)采樣器的執(zhí)行結(jié)果。例子中采樣結(jié)果s="true"表示為執(zhí)行成功。通過解析使用Python的第三方庫lxml對(duì)xml文件進(jìn)行解析。判斷的標(biāo)準(zhǔn)是,如果所有的采樣器結(jié)果都為成功,標(biāo)記這個(gè)測(cè)試用例的結(jié)果為成功,否則為失敗。使用xpath語法獲取用例中失敗的采樣器數(shù)目:

        "count(/testResults/*[attribute::s='false'])",如果這個(gè)值大于0,則表示有至少一個(gè)采樣器執(zhí)行失敗,此時(shí)用pytest的斷言把用例標(biāo)記為失敗。如果等于0,則標(biāo)記為成功。

        1.4.3 測(cè)試用例的分布式執(zhí)行

        當(dāng)被測(cè)應(yīng)用的功能較多,測(cè)試計(jì)劃包含的測(cè)試集很大時(shí),執(zhí)行一次測(cè)試計(jì)劃的時(shí)間就會(huì)很長,這時(shí)候就需要使用分布式執(zhí)行。JMeter本身是支持分布式執(zhí)行的,其原理是調(diào)度機(jī)把腳本發(fā)送到臺(tái)執(zhí)行機(jī)上,執(zhí)行機(jī)執(zhí)行完成后,把結(jié)果回傳給調(diào)度機(jī),調(diào)度機(jī)收集所有執(zhí)行機(jī)的信息并匯總成一個(gè)報(bào)告。但是這種分布式是把單個(gè)腳本發(fā)送到執(zhí)行機(jī)上執(zhí)行,本質(zhì)是一個(gè)測(cè)試用例的多個(gè)步驟級(jí)別上的分布式執(zhí)行。無法把測(cè)試用例集中的多個(gè)測(cè)試用例分布到不同的執(zhí)行機(jī)上執(zhí)行。為了實(shí)現(xiàn)測(cè)試用例級(jí)別上的分布式執(zhí)行,本文引入了pytest的xdist插件。

        xdist可以實(shí)現(xiàn)用例級(jí)別的分布式執(zhí)行。其中2個(gè)關(guān)鍵的參數(shù)是rsync和tx。本系統(tǒng)使用rsync把框架程序和測(cè)試腳本同步到執(zhí)行機(jī)上。在本系統(tǒng)中使用負(fù)載均衡策略,即按照?qǐng)?zhí)行機(jī)的當(dāng)前負(fù)載情況進(jìn)行用例分配。執(zhí)行流程如下:同步框架腳本和測(cè)試用例腳本到執(zhí)行機(jī),讀取測(cè)試用例,在執(zhí)行機(jī)上創(chuàng)建等待執(zhí)行的進(jìn)程,將測(cè)試用例分布到不同的進(jìn)程中執(zhí)行。

        為了驗(yàn)證分布式系統(tǒng)對(duì)測(cè)試效率的提升效果,進(jìn)行以下實(shí)驗(yàn)。實(shí)驗(yàn)場(chǎng)景:創(chuàng)建10個(gè)JMeter腳本,每個(gè)執(zhí)行時(shí)間是5 s。由3臺(tái)配置相同的虛擬機(jī)組成一個(gè)測(cè)試集群,在虛擬機(jī)的數(shù)目為1、2、3時(shí),執(zhí)行10個(gè)測(cè)試腳本組成的測(cè)試集,記錄測(cè)試集的執(zhí)行時(shí)間,每次執(zhí)行3次,記錄3次的平均用時(shí),執(zhí)行用時(shí)見表1。

        表1單臺(tái)機(jī)器與分布式測(cè)試用時(shí)結(jié)果對(duì)比

        Tab.1Timeresultcomparisonforsinglemachineanddistributedtesting

        執(zhí)行機(jī)數(shù)量執(zhí)行的平均用時(shí)/s196.25248.79333.32

        可以看出,隨著執(zhí)行機(jī)的增加,執(zhí)行測(cè)試集的總用時(shí)會(huì)減少,說明本系統(tǒng)的分布式執(zhí)行功能可以有效提高測(cè)試效率。

        2 結(jié)束語

        本文研究了基于pytest的自動(dòng)化測(cè)試框架,將pytest和JMeter測(cè)試工具有機(jī)結(jié)合,設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)分布式自動(dòng)化測(cè)試系統(tǒng)。通過pytest管理和驅(qū)動(dòng)JMeter測(cè)試腳本的執(zhí)行,結(jié)合使用pytest相關(guān)插件實(shí)現(xiàn)了錯(cuò)誤重試、超時(shí)退出等功能,提高了由多個(gè)JMeter腳本組成的測(cè)試計(jì)劃的執(zhí)行效率。

        猜你喜歡
        測(cè)試計(jì)劃機(jī)上測(cè)試用例
        基于改進(jìn)V模型的軟件測(cè)試過程研究
        基于SmartUnit的安全通信系統(tǒng)單元測(cè)試用例自動(dòng)生成
        嵌入式軟件單元測(cè)試方法研究
        軟件工程(2019年8期)2019-09-04 10:00:46
        基于混合遺傳算法的回歸測(cè)試用例集最小化研究
        機(jī)上上網(wǎng),開啟乘機(jī)新時(shí)代
        空中之家(2018年1期)2018-01-31 01:50:33
        基于PLC的變頻器控制系統(tǒng)在甩干機(jī)上的研究
        基于依賴結(jié)構(gòu)的測(cè)試用例優(yōu)先級(jí)技術(shù)
        軟件回歸測(cè)試用例選取方法研究
        淺談軟件測(cè)試計(jì)劃的制定
        軟件測(cè)試流程研究
        新媒體研究(2009年2期)2009-03-02 09:33:14
        中文字幕影片免费人妻少妇| 中文字幕不卡高清免费| 无码久久精品蜜桃| 蜜桃在线视频一区二区| 深夜放纵内射少妇| 欧洲一卡2卡三卡4卡免费网站| 成人xx免费无码| 青青草视频在线播放81| 蜜桃一区二区三区视频网址| 国产亚洲2021成人乱码| 99热这里只有精品3| 青青草视频国产在线观看| 久久人妻一区二区三区免费| 97在线观看播放| 亚洲精品高清你懂的| 91蜜桃国产成人精品区在线| 亚洲高清国产一区二区| 97精品超碰一区二区三区| 欧洲在线一区| 国产精品日本一区二区三区| 中文字幕亚洲综合久久| 国产麻豆一区二区三区在| 国产专区一线二线三线码 | 亚洲欧美日韩一区在线观看| 深夜一区二区三区视频在线观看| 国产又粗又猛又黄又爽无遮挡| 久久夜色撩人精品国产小说| 亚洲av色香蕉一区二区蜜桃| av天堂最新在线播放| 国产精品51麻豆cm传媒| 国模精品二区| 亚洲熟女少妇精品久久| av无码一区二区三区| 麻豆国产成人av高清在线观看| 日韩国产自拍精品在线| 91视色国内揄拍国内精品人妻| 亚洲av无码一区二区乱孑伦as| 91白浆在线视频| 国产亚洲av人片在线播放| 亚洲天堂精品一区入口| 男女裸交无遮挡啪啪激情试看 |