自動(dòng)化測(cè)試系統(tǒng)在敏捷開(kāi)發(fā)、持續(xù)集成和持續(xù)交付中起著非常重要的作用。它對(duì)加快新功能發(fā)布,縮短現(xiàn)場(chǎng)問(wèn)題解決時(shí)間,提升用戶感受度,乃至提高企業(yè)競(jìng)爭(zhēng)力都至關(guān)重要。本文結(jié)合筆者在自動(dòng)化測(cè)試系統(tǒng)建設(shè)中的實(shí)踐,具體描述了利用Python語(yǔ)言設(shè)計(jì)完成的基于機(jī)器人框架,關(guān)鍵字驅(qū)動(dòng)的案例。最后指出了這套系統(tǒng)進(jìn)一步改進(jìn)的方向。
1自動(dòng)化測(cè)試系統(tǒng)實(shí)現(xiàn)簡(jiǎn)介
筆者參與開(kāi)發(fā)的自動(dòng)化測(cè)試系統(tǒng),和編譯服務(wù)器關(guān)聯(lián),由系統(tǒng)掃描偵測(cè),實(shí)現(xiàn)基于某種策略的版本自動(dòng)下載(最大頻度測(cè)試,最相關(guān)版本測(cè)試,如包含本測(cè)試組發(fā)現(xiàn)的軟件缺陷版本優(yōu)先,或指定版本測(cè)試等),然后分發(fā)到相應(yīng)設(shè)備,進(jìn)行版本升級(jí)安裝,觸發(fā)測(cè)試用例的運(yùn)行,生成測(cè)試報(bào)告,發(fā)送郵件給項(xiàng)目干系人,更新測(cè)試記錄等。
自動(dòng)化測(cè)試系統(tǒng),能實(shí)現(xiàn)在第一時(shí)間觸發(fā)測(cè)試,能更頻繁地測(cè)試各個(gè)版本,能運(yùn)行更多、更繁瑣的測(cè)試,進(jìn)而在缺陷出現(xiàn)時(shí)及時(shí)發(fā)現(xiàn),幫助開(kāi)發(fā)團(tuán)隊(duì)縮小缺陷出現(xiàn)的代碼范圍,便于定位問(wèn)題,解決問(wèn)題,這為敏捷開(kāi)發(fā)持續(xù)集成,持續(xù)發(fā)布提供了強(qiáng)有力的支撐。
自動(dòng)化測(cè)試系統(tǒng),基于機(jī)器人框架(robotFramework,RF),RF有豐富的庫(kù),使用關(guān)鍵字驅(qū)動(dòng)技術(shù),可以實(shí)現(xiàn)循環(huán),選擇等邏輯,測(cè)試用例中支持變量的使用,測(cè)試人員可以創(chuàng)建自己需要的關(guān)鍵字,具有很大的靈活性和可擴(kuò)展性,可以實(shí)現(xiàn)定制的復(fù)雜或特殊的功能。ride是RF的編輯工具,測(cè)試用例可以用表格輸入,使得測(cè)試人員以類似于自然語(yǔ)言的方式(關(guān)鍵字)來(lái)描述測(cè)試用例,即使沒(méi)有編程基礎(chǔ)的測(cè)試人員也容易上手,而RF會(huì)將關(guān)鍵字轉(zhuǎn)化為測(cè)試動(dòng)作(底層即Python類方法,函數(shù)的調(diào)用)。
Python是一種面向?qū)ο蟆⒔忉屝?、跨平臺(tái)的高級(jí)程序設(shè)計(jì)語(yǔ)言,可以應(yīng)用于自動(dòng)化測(cè)試,數(shù)據(jù)分析等眾多領(lǐng)域,Python用代碼縮進(jìn)來(lái)代替花括號(hào),表示語(yǔ)句塊邏輯層次,既使得源程序風(fēng)格接近,又提高了可讀性;Python的類庫(kù)齊全并且產(chǎn)出率高,實(shí)現(xiàn)相同的功能,Python比很多其他語(yǔ)言代碼量少,這意味著易維護(hù),出現(xiàn)問(wèn)題的概率也下降。RF就是一種基于Python的可擴(kuò)展關(guān)鍵字驅(qū)動(dòng)的通用自動(dòng)化測(cè)試框架。
2Python語(yǔ)言在自動(dòng)化測(cè)試系統(tǒng)中的應(yīng)用
利用RF編寫定制的測(cè)試用例,需要開(kāi)發(fā)自己的關(guān)鍵字,編寫自定義python庫(kù)。下文通過(guò)一個(gè)實(shí)例來(lái)介紹這個(gè)過(guò)程。
首先,在python安裝目錄c:\Python27\Lib\site-packages\下新建一個(gè)文件夾NewUE,文件夾名就是庫(kù)名,然后,在該文件夾內(nèi)創(chuàng)建一個(gè)python文件ueclass.py,代碼中定義一個(gè)UEClass類,類中定義了一個(gè)ue1Behavior方法,該方法即RF中的新關(guān)鍵字。
在NewUE文件夾內(nèi)再創(chuàng)建文件名__init__.py文件,RF通過(guò)這個(gè)初始化文件獲取新關(guān)鍵字類。它的類名和庫(kù)名相同,括號(hào)里的類是ueclass.py中定義的類:
fromueclassimportUEClass
classNewUE(UEClass):
ROBOT_LIBRARY_SCOPE='GLOBAL'
自定義的NewUE庫(kù)就創(chuàng)建好了,在RF的編輯器ride中導(dǎo)入這個(gè)庫(kù),然后即可使用新創(chuàng)建的關(guān)鍵字。如果要新增關(guān)鍵字ue2Behavior,只要在UEClass類中增加名為ue2Behavior的方法即可。
導(dǎo)入新庫(kù),若庫(kù)名顯示為黑色,表明導(dǎo)入成功,若紅色則表明導(dǎo)入失敗??梢酝ㄟ^(guò)在一個(gè)python文件中importNewUE來(lái)調(diào)試,通常可以根據(jù)出錯(cuò)消息提示框,排除源文件中的錯(cuò)誤。修正錯(cuò)誤后,把原來(lái)的*.pyc全刪除,運(yùn)行如下命令編譯,然后重新導(dǎo)入:
python-mcompileallueclass.py
python-mcompileall__init__.py
自動(dòng)化測(cè)試系統(tǒng)的理想目標(biāo)是全自動(dòng),在策略和任務(wù)定義好后,免予人工干預(yù)。為達(dá)到這一目標(biāo),需要實(shí)現(xiàn)RF和其他系統(tǒng)的配合。下文介紹在這套系統(tǒng)中開(kāi)發(fā)的三個(gè)重要模塊:下載,定制測(cè)試報(bào)告,郵件分發(fā)模塊。
編譯隨時(shí)可能完成,系統(tǒng)需要有自動(dòng)下載功能(關(guān)鍵字Auto_DL)以免浪費(fèi)時(shí)間,基本的過(guò)程如下,首先系統(tǒng)處于空閑狀態(tài),即還未開(kāi)始測(cè)試或上次測(cè)試任務(wù)已完成,Auto_DL會(huì)定時(shí)登錄到指定服務(wù)器,檢測(cè)是否有新版本編譯完成,并判斷該版本是否可用:按上文提及的某種特定的策略選擇新版本,判斷該版本是否符合自動(dòng)化測(cè)試的最低要求,例如已通過(guò)冒煙測(cè)試,通過(guò)則可下載該版本,退出Auto_DL,觸發(fā)下一個(gè)環(huán)節(jié),升級(jí)安裝該版本。這個(gè)過(guò)程循環(huán)往復(fù),以達(dá)到盡快測(cè)試符合策略的版本或盡可能多地測(cè)試各種版本等目的.本系統(tǒng)用Python自帶的標(biāo)準(zhǔn)模塊urllib2,re實(shí)現(xiàn)新版本偵測(cè)和判斷是否為可用版本,發(fā)送HTTPrequest,在獲取的返回信息中,利用正則表達(dá)式標(biāo)準(zhǔn)模塊re中的搜索函數(shù)findall和符合指定特征的正則表達(dá)式判斷是否需要下載新版本;用Python自帶的標(biāo)準(zhǔn)模塊ftplib實(shí)現(xiàn)文件下載,直接導(dǎo)入ftplib,生成一個(gè)FTP對(duì)象,連接到ftp服務(wù)器,以寫模式在本地打開(kāi)接收文件,接收服務(wù)器上的文件并寫入本地文件,最后關(guān)閉文件,完成下載工作。
下載完成后,系統(tǒng)自動(dòng)安裝并執(zhí)行測(cè)試用例。RF能產(chǎn)生測(cè)試報(bào)告,但是無(wú)法定制測(cè)試報(bào)告,新開(kāi)發(fā)的定制測(cè)試報(bào)告模塊就是根據(jù)測(cè)試管理團(tuán)隊(duì)的特殊要求,提供符合需求的報(bào)告,可以包括測(cè)試團(tuán)隊(duì)名字,測(cè)試時(shí)間,測(cè)試環(huán)境的硬件配置,軟件版本信息,測(cè)試用例運(yùn)行結(jié)果匯總情況,是否更新測(cè)試記錄或需要進(jìn)一步分析等。測(cè)試結(jié)果由網(wǎng)頁(yè)和附件的形式發(fā)送給指定接收人。同時(shí),除了測(cè)試結(jié)果文件,還提供超鏈接,可以查看測(cè)試日志等,特別是當(dāng)測(cè)試用例失敗后,測(cè)試人員可以進(jìn)一步分析日志,確定是哪個(gè)領(lǐng)域出現(xiàn)了軟件缺陷,對(duì)應(yīng)的開(kāi)發(fā)人員也可以根據(jù)日志,修正軟件缺陷,提供新版本給測(cè)試人員再次驗(yàn)證。
定制報(bào)告生成后,需要發(fā)送測(cè)試結(jié)果,郵件發(fā)送模塊利用Python自帶的標(biāo)準(zhǔn)庫(kù),smtplib,configparser,email等。為把數(shù)據(jù)和業(yè)務(wù)邏輯分離,通常把郵件服務(wù)器地址,用戶名,密碼,發(fā)件人等寫入配置文件,在主程序中這些信息由configparser來(lái)解析,可以把主機(jī)名傳遞給SMTP構(gòu)造函數(shù),然后用smtplib.SMTP()創(chuàng)建一個(gè)smtp對(duì)象,用smtp.login()進(jìn)行登錄操作,最后用smtp.sendmail()發(fā)送郵件,用smtp.quit()方法關(guān)閉連接。
Sendmail(sender,recipients,message)方法可用于發(fā)送電子郵件,參數(shù)Sender,recipients分別是郵件發(fā)送者和接收者地址列表,從配置文件中讀取,參數(shù)Message是一個(gè)長(zhǎng)字符串格式的消息,本模塊中將網(wǎng)頁(yè)形式的測(cè)試報(bào)告解析后作為郵件正文發(fā)送給接收方。創(chuàng)建MIMEMultipart對(duì)象,獲取郵件主題等信息,創(chuàng)建MIMEText對(duì)象,讀取網(wǎng)頁(yè)文件內(nèi)容,再用MIMEMultipart對(duì)象的attach,把網(wǎng)頁(yè)文件內(nèi)容包含到MIMEMultipart對(duì)象中。Sendmail()方法最終完成郵件發(fā)送。
改進(jìn)方向:
本測(cè)試系統(tǒng)主要是回歸測(cè)試,不可能完全取代手工測(cè)試,有些情況下不適合自動(dòng)化測(cè)試,例如探索性測(cè)試,軟件版本很不穩(wěn)定,測(cè)試儀表未提供腳本控制接口等。產(chǎn)品新的功能開(kāi)發(fā)完成后,一般先經(jīng)手工測(cè)試,所以通常自動(dòng)測(cè)試比手工測(cè)試發(fā)現(xiàn)的缺陷要少些,但由于RF的可擴(kuò)展性,我們可以方便地將新測(cè)試用例加入到自動(dòng)化測(cè)試系統(tǒng)里來(lái),不斷提高該系統(tǒng)的測(cè)試覆蓋率。
另一方面,可以進(jìn)一步提高自動(dòng)化測(cè)試系統(tǒng)的智能,實(shí)現(xiàn)對(duì)日志文件的分析。測(cè)試專家了解預(yù)期測(cè)試結(jié)果,熟悉日志和缺陷的映射關(guān)系,根據(jù)日志可推斷可能的錯(cuò)誤分支,出錯(cuò)模塊等。本系統(tǒng)擬增加日志分析模塊,用于替代人工判斷,利用Python強(qiáng)大的文本分析和正則表達(dá)式搜索功能,結(jié)合業(yè)務(wù)知識(shí)及測(cè)試專家的經(jīng)驗(yàn),對(duì)失敗的測(cè)試用例日志進(jìn)行分析,由系統(tǒng)給出日志分析結(jié)果。
3結(jié)論
本測(cè)試系統(tǒng)主要用于發(fā)現(xiàn)已知的缺陷,確保新功能加入后原有功能不受影響。同時(shí),由于自動(dòng)化系統(tǒng)很方便進(jìn)行相同測(cè)試用例的大量重復(fù),進(jìn)而可能發(fā)現(xiàn)手工測(cè)試不易檢出的偶發(fā)問(wèn)題。
由于新關(guān)鍵字易于擴(kuò)展,隨著產(chǎn)品功能的不斷增加,測(cè)試用例集合也可以不斷地?cái)U(kuò)充。由于RF的可擴(kuò)充性,可以在自動(dòng)化測(cè)試系統(tǒng)中增加新的模塊,進(jìn)一步提高系統(tǒng)的智能,大大提高測(cè)試效率并降低測(cè)試工程師重復(fù)勞動(dòng)的強(qiáng)度。測(cè)試人員把精力放在深入理解業(yè)務(wù)邏輯,設(shè)計(jì)新測(cè)試用例,再把新用例應(yīng)用于自動(dòng)化測(cè)試系統(tǒng)中,進(jìn)而形成測(cè)試工作的良性循環(huán)。
以上內(nèi)容為大家介紹了Python在自動(dòng)化測(cè)試系統(tǒng)中的應(yīng)用,希望對(duì)大家有所幫助,如果想要了解更多Python相關(guān)知識(shí),請(qǐng)關(guān)注IT培訓(xùn)機(jī)構(gòu):千鋒教育。