日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

openjdk platform binary是什么进程_基于pytest实现appium多进程兼容性测试

發(fā)布時(shí)間:2024/4/11 编程问答 45 豆豆
生活随笔 收集整理的這篇文章主要介紹了 openjdk platform binary是什么进程_基于pytest实现appium多进程兼容性测试 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

01

前言

在實(shí)際工作中,如果要用appium實(shí)現(xiàn)多設(shè)備的兼容性測試,大家想到的也許是“多線程”。但由于python中GIL的影響,多線程并不能做到"多機(jī)并行",這時(shí)候可以考慮使用多進(jìn)程的方式。

02

為什么基于Pytest

我們知道,pytest中的conftest.py可以定義不同的fixture,測試用例方法可以調(diào)用這些fixture,來實(shí)現(xiàn)數(shù)據(jù)共享。以前的框架的思路是:Common目錄下的base_driver.py定義生成driver的方法-->conftest.py中調(diào)用前者生成driver-->TestCases下的測試用例調(diào)用fixture,來實(shí)現(xiàn)driver共享?。但是現(xiàn)在不同了,我們有多個(gè)設(shè)備,這些設(shè)備的信息如果只是單純的寫在yml中,我們并行去取的時(shí)候似乎也不方便,那可以寫在哪里?conftest.py似乎也不是寫設(shè)備信息的好地方,最后只剩下了main.py,而且將main.py作為多進(jìn)程的入口再合適不過了。但問題又來了,如果我們想啟動(dòng)多個(gè)appium服務(wù),需要考慮以下幾點(diǎn):1、appium通過什么方式啟動(dòng)?2、設(shè)備信息如何傳遞給base_driver方法來生成driver第一點(diǎn)很明確,客戶端啟動(dòng)appium server的方式似乎有點(diǎn)不合時(shí)宜了,如果你要同時(shí)測5個(gè)手機(jī),難道要一個(gè)個(gè)啟動(dòng)客戶端嗎?最好的方式是啟動(dòng)命令行,因?yàn)槊钚袉?dòng)更方便更快!在說第二點(diǎn)前,先整理一下思路:main.py定義多個(gè)設(shè)備信息-->base_driver方法調(diào)用,生成多個(gè)driver-->TestCases下的測試用例調(diào)用fixture。但是設(shè)備信息怎么傳遞給base_driver方法呢?這時(shí)候pytest中的初始化hook函數(shù)就派上用場了。

03

初始化hook函數(shù)

先看看pytest官網(wǎng)的解釋:pytest_addoption(parser)方法:可以在插件和conftest.py中使用。該方法可以注冊(cè)命令行參數(shù),以及添加init屬性。它在測試開始運(yùn)行的時(shí)候被調(diào)用一次。參數(shù):parser(_pytest.config.Parser),使用parser.addoption(...)增加命令行參數(shù),使用parser.addini(...)增加ini屬性值。命令行參數(shù)可以通過下面的方式被接收:◆ config.getoption(name):接收命令行參數(shù)的值◆ config.getini(name):接收init屬性內(nèi)容注意:只有插件或conftest.py在工程根目錄時(shí),這個(gè)函數(shù)才會(huì)被調(diào)用其實(shí)有點(diǎn)類似OptionParser類,拿這個(gè)舉個(gè)例子:OptionParser類用來解析命令行參數(shù),其中add_option方法可以添加我們要處理的命令行參數(shù)。如下的第一個(gè)add_option方法中的"-c"表示添加-c參數(shù)。"--config"表示完整的參數(shù)名。action的意思是,得到該參數(shù)后怎么處理它,一般使用store存儲(chǔ)起來。store_true是指只有在使用該參數(shù)的時(shí)候存儲(chǔ)。存儲(chǔ)屬性的名字就是缺省值dest里寫的config,help的內(nèi)容是使用-h時(shí)可以打印看到的,default是默認(rèn)值。相反的,optionparser是解析函數(shù),它將返回一個(gè)字典和一個(gè)列表。字典的鍵是缺省值,值是命令行傳遞的參數(shù)值新建文件parser_demo.py命令行運(yùn)行后,發(fā)現(xiàn)不跟參數(shù)"-d"時(shí),屬性"demon"的值為默認(rèn)值False。跟"-d"后,變成了True

04

具體實(shí)現(xiàn)

定義main.py
既然可以使用pytest命令行參數(shù)了,那只需要在pytest.main中加上參數(shù)--cmdopt即可。main.py類似這樣:為什么設(shè)備信息我只寫了四個(gè)?platform_version、server_port、device_port、system_port。其他的類似于appPackage、appActivity、platformName等去哪了?當(dāng)然你也可以寫在這兒,其他的應(yīng)該都是多個(gè)設(shè)備相同的,我寫在yml的配置信息中了。◆ 值得注意的是,這里的server_port多個(gè)設(shè)備不能重復(fù),這是appium server啟動(dòng)的端口號(hào),如果多個(gè)設(shè)備server_port都重復(fù),那只能啟動(dòng)一個(gè)服務(wù)了,所以要不同。◆ system_port又是什么?這個(gè)是為了防止"互爭互搶"現(xiàn)象的發(fā)生。多進(jìn)程多設(shè)備并行時(shí),如果多個(gè)設(shè)備同時(shí)使用同一個(gè)appium remote port(如8200)。對(duì)多個(gè)設(shè)備而言,它們并不知道相互使用同一port,因此就會(huì)出現(xiàn)多個(gè)設(shè)備發(fā)出的Request和接收的Action銜接不上而造成的測試混亂。可能會(huì)出現(xiàn)"Original error:Could not proxy command to remote server"的報(bào)錯(cuò)
定義Caps下的caps.yml
這里基本上定義的是多設(shè)備相同的desired_caps的公共部分
定義Common下的base_driver.py
這里有幾點(diǎn)需要注意下:◆ 多進(jìn)程在調(diào)用BaseDriver類的base_driver方法時(shí),實(shí)例化時(shí)應(yīng)該先通過命令行的方式啟動(dòng)appium server。設(shè)想一下,如果啟動(dòng)appium server放在get_base_driver中,會(huì)出現(xiàn)什么樣的場景?conftest中每調(diào)用一次get_base_driver方法,就會(huì)打開一個(gè)cmd窗口,試圖去啟動(dòng)appium server◆ yaml.load方法注意新的寫法加上參數(shù) Loader=yaml.FullLoader,這樣據(jù)說更安全
定義conftest.py
關(guān)鍵點(diǎn)是pytest_addoption和request.config.getoption這兩個(gè)函數(shù)的使用,一個(gè)添加命令行,一個(gè)解析命令行。但仍有需要注意的:eval(cmdopt):之所以使用eval將cmdopt轉(zhuǎn)為字典,是因?yàn)閏mdopt本身是字符串。類似這樣的:"{'platform_version': '7.1.2', 'server_port': 4725, 'device_port': 62025, 'system_port': 8201}",這樣取值多不方便。此外,還需要解決一個(gè)問題,如果有多個(gè)fixture,必須保證第一個(gè)測試用例用到的fixture實(shí)現(xiàn)BaseDriver的實(shí)例化。并且將這一實(shí)例化的結(jié)果base_driver作為全局變量,供所有的fixture共用,否則就會(huì)出現(xiàn)啟動(dòng)多個(gè)cmd窗口,啟動(dòng)多個(gè)appium server的問題

定義TestCases目錄下的test_welcome.py

這里我只定義了一個(gè)很簡單的測試用例方法,如果打開前程貸app的歡迎頁,點(diǎn)擊立即體驗(yàn)。如果點(diǎn)擊成功,說明斷言成功,否則斷言失敗

05

多進(jìn)程運(yùn)行的截圖

06

allure報(bào)告

allure報(bào)告是使用os.system調(diào)用allure命令行生成的,主要也就是下面標(biāo)記的兩行,但是目前還沒想到辦法,在allure報(bào)告中將兩個(gè)設(shè)備區(qū)別出來。allure的測試報(bào)告是將兩個(gè)設(shè)備的結(jié)果合二為一了

07

兼容性測試帶來的問題

多進(jìn)程兼容性測試也會(huì)帶來一些問題:◆ 測試報(bào)告如何更好的區(qū)分多臺(tái)設(shè)備◆ 對(duì)于分辨率不同的機(jī)型,要保證一些操作方法的健壯性和穩(wěn)定性。如A手機(jī)屏幕大,確定按鈕就在屏幕可見位置,B手機(jī)屏幕小,需要多次滑動(dòng)才能看到按鈕,這就要求定義方法時(shí)足夠健壯◆ 業(yè)務(wù)邏輯問題。如果并行的去操作(調(diào)用同一個(gè)接口),會(huì)不會(huì)有業(yè)務(wù)邏輯上的限制,比如要搶一個(gè)免單券,一天同一個(gè)ip,同一個(gè)設(shè)備只能搶一件,這時(shí)候應(yīng)該只會(huì)有一個(gè)成功,另一個(gè)無疑會(huì)失敗。這就需要要么調(diào)整限制,要么調(diào)整方法本文由檸檬班學(xué)員原創(chuàng),轉(zhuǎn)載需注明出處!兼容性軟件測試報(bào)告如何編寫?想知道答案嗎?掃碼即可解鎖解題視頻

發(fā)現(xiàn)更多精彩

掃碼獲取解題視頻

來都來了,點(diǎn)個(gè)在看再走吧~~~

超強(qiáng)干貨來襲 云風(fēng)專訪:近40年碼齡,通宵達(dá)旦的技術(shù)人生

總結(jié)

以上是生活随笔為你收集整理的openjdk platform binary是什么进程_基于pytest实现appium多进程兼容性测试的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。