自動(dòng)化測(cè)試架構(gòu)是啥,怎么理解自動(dòng)化測(cè)試架構(gòu)?這個(gè)問(wèn)題,我們可以從以下幾點(diǎn)來(lái)慢慢說(shuō)。
架構(gòu)是什么
軟件架構(gòu)(software architecture)是一系列相關(guān)的抽象模式,用于指導(dǎo)大型軟件系統(tǒng)各個(gè)方面的設(shè)計(jì)。
軟件架構(gòu)是一個(gè)系統(tǒng)的草圖,軟件架構(gòu)描述的對(duì)象是直接構(gòu)成系統(tǒng)的抽象組件,各個(gè)組件之間的連接則明確和相對(duì)細(xì)致地描述組件之間的通訊。
在實(shí)現(xiàn)階段,這些抽象組件被細(xì)化為實(shí)際的組件,比如具體某個(gè)類(lèi)或者對(duì)象。在面向?qū)ο箢I(lǐng)域中,組件之間的連接通常用接口來(lái)實(shí)現(xiàn)。
官方解釋的比較模糊,可能沒(méi)涉及到架構(gòu)的大佬,對(duì)這部分還是有一些模糊,我直接大白話說(shuō)一下:軟件架構(gòu)就是軟件的基本結(jié)構(gòu),架構(gòu)的本質(zhì)是管理復(fù)雜性,由各個(gè)組件及其接口、元素構(gòu)成的一些能夠完成特定行為的組合。
擴(kuò)展一下,架構(gòu)模式雖然有很多種,但是常用的也就是這幾種:
- 分層架構(gòu)
- 事件驅(qū)動(dòng)架構(gòu)
- 微核架構(gòu)(又稱(chēng)插件架構(gòu))
- 微服務(wù)架構(gòu)
- 云架構(gòu)
關(guān)于這些架構(gòu)模式的構(gòu)成及思想,我們就不在這里討論了,不然就跑題了。
架構(gòu)的設(shè)計(jì)思想
高復(fù)用性
用一套框架來(lái)解決不同產(chǎn)品線的基礎(chǔ)服務(wù)構(gòu)建工作,通過(guò)引用框架方便公司對(duì)不同產(chǎn)品線的自動(dòng)化實(shí)施進(jìn)行整合。
易維護(hù)性
如果對(duì)框架的技術(shù)進(jìn)行擴(kuò)展,則只需要維護(hù)這一套框架即可,不需要根據(jù)產(chǎn)品線的不同,維護(hù)多套框架,節(jié)省時(shí)間、節(jié)省成本。
人員分離,專(zhuān)一性
業(yè)務(wù)人員只關(guān)注業(yè)務(wù)代碼的腳本編寫(xiě),不需要去專(zhuān)注框架技術(shù)上的問(wèn)題。架構(gòu)人員只針對(duì)框架技術(shù)的實(shí)現(xiàn),不需要對(duì)業(yè)務(wù)線的具體業(yè)務(wù)知識(shí)進(jìn)行學(xué)習(xí)。
架構(gòu)師考慮點(diǎn)
1、編碼的選擇:Java、Python、Ruby等。
2、核心技術(shù)的選擇:
Web:Selenium
APP:Appium
3、編碼規(guī)范:類(lèi)、方法、變量的命名方式。
4、用例設(shè)計(jì)規(guī)范。
5、代碼管理方式:git or svn。
為什么要使用架構(gòu)
核心:解決腳本錄制的常見(jiàn)問(wèn)題,使得自動(dòng)化穩(wěn)定。
同時(shí)可以把架構(gòu)人員、腳本編寫(xiě)人員、用例執(zhí)行人員分開(kāi):
架構(gòu)大佬:精通代碼設(shè)計(jì)
腳本編寫(xiě)大佬:了解代碼
用例執(zhí)行大佬:可以不懂代碼
把UI對(duì)象通過(guò)自定義變量的方式賦值,增強(qiáng)了腳本的易讀性,通過(guò)封裝WebDriver的API,使其更加健壯。
把常用的業(yè)務(wù)場(chǎng)景封裝成業(yè)務(wù)方法,便于常用業(yè)務(wù)的復(fù)用,把共通的腳本單獨(dú)封裝,避免了腳本執(zhí)行人員對(duì)測(cè)試腳本代碼的修改。
生成Debug級(jí)別的log,使自動(dòng)化腳本調(diào)試人員方便調(diào)試程序。
生成回歸級(jí)別的測(cè)試報(bào)告,便于不懂腳本的人員查看測(cè)試結(jié)果,引用Suite執(zhí)行多個(gè)腳本,進(jìn)行運(yùn)行腳本的管理。
類(lèi)庫(kù)的設(shè)計(jì)結(jié)構(gòu)
Web UI 自動(dòng)化測(cè)試結(jié)構(gòu)
config 配置文件:把經(jīng)常需要修改的信息(例如用戶(hù)名、密碼、環(huán)境)保留在配置文件中,以便經(jīng)常調(diào)用。
common 公共方法:提供與WebDriver無(wú)關(guān),但與自動(dòng)化測(cè)試相關(guān)的API,包括:
- 讀取文件信息
- 啟動(dòng)瀏覽器
- 獲取當(dāng)前系統(tǒng)時(shí)間等
report:
- 測(cè)試報(bào)告:向項(xiàng)目經(jīng)理、產(chǎn)品經(jīng)理和老板匯報(bào)
- 調(diào)試日志:便于自動(dòng)化腳本編寫(xiě)人員調(diào)試代碼
objectView:保存頁(yè)面中的元素,當(dāng)UI變化時(shí)修改對(duì)應(yīng)變量即可,將可讀性差的UI元素按照統(tǒng)一規(guī)則命名
Corelib:封裝WebDriver的API,使其更加健壯,形成自動(dòng)化項(xiàng)目的API。提供斷言的相關(guān)方法,自動(dòng)化API提供詳細(xì)的輸出消息,便于調(diào)試,自動(dòng)化API提供向測(cè)試報(bào)告中寫(xiě)入消息的方法。
businessView:業(yè)務(wù)方法的封裝,根據(jù)Corelib中的提供的API,把常用的業(yè)務(wù)場(chǎng)景封裝成方法便于復(fù)用。
data:保存輸入的數(shù)據(jù)信息,作為架構(gòu)與外部文件的接口。
Appium自動(dòng)化測(cè)試結(jié)構(gòu)
其實(shí)和Web UI的差不多,因?yàn)槎际腔赑ageobject 設(shè)計(jì)模式,這里就直接copy我之前寫(xiě)的框架結(jié)構(gòu)就好。
APP:測(cè)試包管理:
|--------|-------如xx.apk
|-------baseView:一些基本類(lèi)的封裝:
|--------|-------find_element()
|--------|--------find_elements()
|--------|--------get_window_size()
public:公共方法的封裝:
|--------|----------common_fun.py
|--------|-------------|--------check_cancel_Btn()
|--------|-------------|--------check_ship_Btn()
|--------|-------------|--------get_screenSize()
|--------|----------desired_caps.py
|--------|-------------|--------driver驅(qū)動(dòng)封裝
|--------|-------------|--------日志配置文件封裝
|--------|-------------|--------啟動(dòng)APP配置參數(shù)
|--------|----------myunit.py
|--------|-------------|--------測(cè)試用例啟動(dòng)、關(guān)閉的封裝
businessView:業(yè)務(wù)邏輯封裝:
|--------|----------loginView.py
|--------|-------------|--------登錄相關(guān)的操作和方法
|--------|----------registerView.py
|--------|-------------|--------注冊(cè)相關(guān)操作和方法
config:存放配置文件:
|--------|----------caps.py
|--------|-------------|--------capability數(shù)據(jù)配置
|--------|----------log_conf.py
|--------|-------------|--------日志配置文件
data:存放數(shù)據(jù)驅(qū)動(dòng):
|--------|----------account.csv
|--------|-------------|--------用戶(hù)名、密碼
log:存放生成日志:
|--------|----------runlog.log
report:存放測(cè)試報(bào)告:
|--------|----------report.html
screenshots:存放截圖。
test_case:存放測(cè)試類(lèi)的模塊:
|--------|----------test_login.py
|--------|-------------|--------登錄測(cè)試類(lèi)封裝:LoginTest
|--------|-------------|--------調(diào)用LoginView類(lèi)的方法來(lái)編寫(xiě)用例
|--------|----------test_register.py
|--------|-------------|--------注冊(cè)測(cè)試類(lèi)封裝:RegisterTest
|--------|-------------|-------調(diào)用RegisterView類(lèi)的方法來(lái)編寫(xiě)用例
test_run:執(zhí)行測(cè)試腳本:
|--------|----------run.py
|--------|-------------|--------自動(dòng)化測(cè)試用例執(zhí)行入口
|--------|-------------|--------生成測(cè)試報(bào)告
使用架構(gòu)遇到的坑
接下來(lái),我就簡(jiǎn)單說(shuō)幾個(gè),在項(xiàng)目中出現(xiàn)的遇到的坑。
頁(yè)面元素變化,那么怎么更新UI的變量呢?
只要更新objectView 即可。
框架已封裝的方法,編寫(xiě)腳本大佬不調(diào)用,怎么辦?
這是我在check腳本的時(shí)候發(fā)現(xiàn)的,遇到這種問(wèn)題,就要及時(shí)通知、及時(shí)提醒、及時(shí)修正。這就是不怕一萬(wàn)就怕萬(wàn)一??!
腳本執(zhí)行fail,怎么確定是架構(gòu)API的問(wèn)題,還是程序本身的缺陷?
這個(gè)問(wèn)題,我問(wèn)過(guò)求職者,回答啥的都有,咱就不說(shuō)了,直接說(shuō)從哪里驗(yàn)證吧。
出現(xiàn)問(wèn)題,無(wú)非就兩點(diǎn):
先查看fail的原因,至于怎么查,要看log;
手工驗(yàn)證此功能。
當(dāng)前架構(gòu)的API無(wú)法滿足當(dāng)前項(xiàng)目的需要,怎么擴(kuò)展?
直接重寫(xiě)架構(gòu)的API或者添加API(看無(wú)法滿足情況,再根據(jù)實(shí)際情況,一般添加API即可);
寫(xiě)一個(gè)新類(lèi)繼承架構(gòu)中的Corelib,在這個(gè)類(lèi)中完善API。
注:一般情況架構(gòu)師就搞定了。
當(dāng)架構(gòu)需要添加新功能時(shí)需要如何接入?
寫(xiě)一些類(lèi)完成所需功能,然后提供調(diào)用接口在架構(gòu)中使用。
文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-807210.html
在這里還是要推薦下我自己建的軟件測(cè)試學(xué)習(xí)Q群:1150305204,群里都是學(xué)測(cè)試的,如果你想學(xué)或者正在學(xué)習(xí)測(cè)試,歡迎你加入,大家都是測(cè)試黨,不定期分享干貨(只有軟件測(cè)試相關(guān)的),包括我自己整理的一份2024最新的Python自動(dòng)化測(cè)試進(jìn)階資料和零基礎(chǔ)教學(xué),歡迎進(jìn)階中和對(duì)測(cè)試感興趣的小伙伴加入!文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-807210.html
到了這里,關(guān)于要做自動(dòng)化測(cè)試,得了解一下自動(dòng)化架構(gòu)是什么的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!