【自動(dòng)化測(cè)試框架】 | 基于 selenium+Python,怎樣從零開(kāi)始搭建一個(gè)屬于自己項(xiàng)目的測(cè)試框架

本框架是別人項(xiàng)目正在使用的框架,我這邊抓取后經(jīng)過(guò)了一點(diǎn)優(yōu)化后整理出來(lái)的,大致包括,自動(dòng)化用例套件、數(shù)據(jù)分離、日志模板、配置分離、斷言、接口自動(dòng)化、持續(xù)集成、自動(dòng)化報(bào)告等方面,已經(jīng)是一個(gè)很全的輕量級(jí)框架了。


在開(kāi)始之前,請(qǐng)讓我先聲明幾點(diǎn):

  1. 這個(gè)“從0開(kāi)始”并不是說(shuō)你不需要任何基礎(chǔ)知識(shí),而是指框架從無(wú)到有的過(guò)程,要開(kāi)始搭建還是需要一定基礎(chǔ)

  2. 請(qǐng)確保你已經(jīng)掌握了基本的Python語(yǔ)法

  3. 如果你要搭建UI框架,請(qǐng)確保你已經(jīng)掌握了Selenium的基本用法

  4. 這個(gè)框架主要面向剛剛會(huì)寫腳本但是不知道該如何走向下一步的同學(xué),歡迎吐槽,但最好帶上改進(jìn)建議。

思考:我們需要一個(gè)什么樣的框架

既然要搭一個(gè)框架,我們首先得弄明白我們需要一個(gè)什么樣的框架,這個(gè)框架要支持什么功能?

框架主要的作用就是幫助我們編寫更加簡(jiǎn)單而且好維護(hù)的用例,讓我們把主要精力放在測(cè)試用例的設(shè)計(jì)上,那么我們就需要把所有額外的東西抽象出來(lái)作為框架的部分。


那么,額外的東西是什么?

  1. 日志以及報(bào)告

  2. 日志級(jí)別、URL、瀏覽器類型等基本配置

  3. 參數(shù)化

  4. 公共方法

搭建框架目錄結(jié)構(gòu)

現(xiàn)在我們很容易就把框架的結(jié)構(gòu)搭建好了:

Test_framework

? ?|--config(配置文件)

? ?|--data(數(shù)據(jù)文件)

? ?|--drivers(驅(qū)動(dòng))

? ?|--log(日志)

? ?|--report(報(bào)告)

? ?|--test(測(cè)試用例)

? ?|--utils(公共方法)

? ?|--ReadMe.md(加個(gè)說(shuō)明性的文件,告訴團(tuán)隊(duì)成員框架需要的環(huán)境以及用法)


也可以參照其它目錄結(jié)構(gòu),都是類似的。

接下來(lái)有一些選擇題要做了:

Python 2 or 3? Selenium 2 or 3?

Python 3的使用越來(lái)越多,而且3的unittest中帶有subTest,能夠通過(guò)子用例實(shí)現(xiàn)參數(shù)化。而用2的話需要unittest2或其他的庫(kù)來(lái)實(shí)現(xiàn),所以我們這里選用Python 3。

Selenium 3剛發(fā)布正式版不久,一些功能driver還沒(méi)來(lái)得及跟上,尤其是geckodriver,所以選擇Selenium 2(注意PY3的話要選擇SE2.53.1)。

環(huán)境選擇其實(shí)影響不大,你也可以選擇你自己習(xí)慣的環(huán)境。


配置文件

配置文件我們有多種選擇:ini、yaml、xml、properties、txt、py等

鑒于我之前寫過(guò)一篇yaml的博文,我們這里就用yaml吧。

所以我們?cè)赾onfig文件夾里創(chuàng)建config.yml文件,在utils里創(chuàng)建一個(gè)config.py文件讀取配置,內(nèi)容暫且不管。


簡(jiǎn)單的了解框架后,可以按如下1>11步驟搭建自己的框架了。


1.首先我們要把配置抽出來(lái),用yaml文件放配置。所以我們要在config層添加配置文件config.yml,在utils層添加file_reader.py與config.py來(lái)管理?!鯓訌?開(kāi)始搭建一個(gè)測(cè)試框架(1)


2.然后我們將python自帶的logging模塊封裝了一下,從配置文件讀取并設(shè)置固定的logger。在utils中創(chuàng)建了log.py。——怎樣從0開(kāi)始搭建一個(gè)測(cè)試框架(2)


3.然后封裝xlrd模塊,讀取excel,實(shí)現(xiàn)用例的參數(shù)化?!鯓訌?開(kāi)始搭建一個(gè)測(cè)試框架(3)


4.然后是生成HTML測(cè)試報(bào)告,這個(gè)博主修改了網(wǎng)上原有的HTMLTestRunner,改為中文并美化,然后修改其支持PY3。你可以直接拿去用。——怎樣從0開(kāi)始搭建一個(gè)測(cè)試框架(4)


5.然后我們給框架添加了發(fā)送郵件報(bào)告的能力。在utils中添加了mail.py?!鯓訌?開(kāi)始搭建一個(gè)測(cè)試框架(5)


6.然后我們將測(cè)試用例用Page-Object思想進(jìn)行封裝,進(jìn)一步劃分test層的子層。——怎樣從0開(kāi)始搭建一個(gè)測(cè)試框架(6)


7.接下來(lái)為了接口測(cè)試封裝client類。在utils中添加了client.py。——怎樣從0開(kāi)始搭建一個(gè)測(cè)試框架(7)


8.然后添加了一個(gè)簡(jiǎn)單的自定義斷言,在utils中添加assertion.py,可用同樣的方法自行擴(kuò)展?!鯓訌?開(kāi)始搭建一個(gè)測(cè)試框架(8)


9.接下來(lái)我們?yōu)榱顺槿№憫?yīng)結(jié)果,用JMESPath封裝Extractor,在utils中添加extractor.py?!鯓訌?開(kāi)始搭建一個(gè)測(cè)試框架(9)


10.然后是生成器。為我們自動(dòng)生成固定類型的測(cè)試數(shù)據(jù)。utils下創(chuàng)建了generator.py?!鯓訌?開(kāi)始搭建一個(gè)測(cè)試框架(10)


11.最后為了一些項(xiàng)目中的支持方法,如加密、簽名等,創(chuàng)建支持庫(kù)support.py。——怎樣從0開(kāi)始搭建一個(gè)測(cè)試框架(11)


整個(gè)流程下來(lái)一個(gè)簡(jiǎn)單的框架就像模像樣了,在此基礎(chǔ)上可繼續(xù)完善,實(shí)際用在項(xiàng)目中也沒(méi)有什么問(wèn)題,再簡(jiǎn)單結(jié)合?Jenkins?部署起來(lái),定期或每次代碼提交后可自動(dòng)運(yùn)行測(cè)試,直接把測(cè)試報(bào)告發(fā)送到項(xiàng)目成員手中,妥妥的!接下來(lái)一塊自學(xué)吧。

注:以上1->11步驟講解的代碼可以到我知乎專欄查看,這里不支持外部超鏈接。

整個(gè)項(xiàng)目所有代碼我都放到了?公眾號(hào)?、頭條號(hào) 知乎專欄。

?有什么好的建議或者問(wèn)題,可以留言或者加 QQ 群: 330374464


作者:西邊人

頭條號(hào):請(qǐng)搜索(馬蟻蛋)
公眾號(hào):軟件測(cè)試資源站(testpu)

知乎專欄:請(qǐng)搜(軟件測(cè)試精選)

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容