姜 文,劉立康
(西安電子科技大學(xué) 通信工程學(xué)院,陜西 西安 710071)
隨著互聯(lián)網(wǎng)技術(shù)和云計(jì)算技術(shù)的發(fā)展,很多軟件產(chǎn)品都通過(guò)Web頁(yè)面進(jìn)行操作。Web頁(yè)面具有操作簡(jiǎn)單、操作場(chǎng)景繁瑣等特點(diǎn);之前Web頁(yè)面測(cè)試大都使用手動(dòng)的方法來(lái)進(jìn)行測(cè)試,測(cè)試過(guò)程比較耗費(fèi)人力,技術(shù)含量也較低。隨著軟件技術(shù)的發(fā)展,軟件測(cè)試也逐漸從純手動(dòng)測(cè)試過(guò)渡到手動(dòng)測(cè)試與自動(dòng)化測(cè)試并存。
近年來(lái),軟件自動(dòng)化測(cè)試技術(shù)發(fā)展很快,出現(xiàn)了很多成熟的自動(dòng)化測(cè)試工具,常見(jiàn)的Web自動(dòng)化測(cè)試工具有:QTP、Silk Test、Selenium等。其中Selenium[1-5]是一款開(kāi)源的、表現(xiàn)非常優(yōu)秀的自動(dòng)化測(cè)試工具。它最大的特點(diǎn)就是可以完全模擬用戶在瀏覽器上進(jìn)行各種Web操作,擁有足夠好的用戶體驗(yàn),是站在用戶的角度對(duì)網(wǎng)站性能進(jìn)行測(cè)試。Web自動(dòng)化測(cè)試工具Selenium的逐漸風(fēng)行,為原本通過(guò)手動(dòng)方式進(jìn)行Web頁(yè)面測(cè)試,提供了相對(duì)簡(jiǎn)單、廉價(jià)的自動(dòng)化方法。
文中使用Selenium和Python工具開(kāi)展Web軟件自動(dòng)化測(cè)試[6-10],以下簡(jiǎn)單介紹這兩個(gè)工具。
Selenium是一款開(kāi)源的Web應(yīng)用程序測(cè)試工具。Selenium測(cè)試腳本直接運(yùn)行在瀏覽器中,模擬用戶操作網(wǎng)頁(yè)的過(guò)程。支持在IE、Chrome和FireFox等通用瀏覽器上使用,可以在Windows、Linux、Mac和Solaris 等多種操作系統(tǒng)上運(yùn)行。
目前廣泛使用的是Selenium2.0以上版本,Selenium2=Selenium1+WebDriver。
WebDriver是一款自動(dòng)化測(cè)試Web應(yīng)用程序的工具,提供友好的API,使測(cè)試更易于理解和維護(hù)。它不依賴于任何特定的測(cè)試框架,是完全獨(dú)立的,應(yīng)用它不需要啟動(dòng)任何額外的進(jìn)程或者運(yùn)行其他程序。
Selenium 2[11-13](Selenium WebDriver)是將WebDriver API集成到Selenium 1,解決提供替代編程接口所帶來(lái)的局限性。Selenium 2工具的主要功能包括:對(duì)Web頁(yè)面進(jìn)行功能測(cè)試,支持腳本錄制,支持Java、Python、Ruby和C#等語(yǔ)言的測(cè)試腳本。
Python是一款面向?qū)ο蟮哪_本語(yǔ)言,語(yǔ)法比較簡(jiǎn)單但功能卻很強(qiáng)大。Python語(yǔ)言易讀、易維護(hù),受廣大用戶所歡迎、用途十分廣泛。
Unittest也稱為PyUnit[14-16],是Python語(yǔ)言的單元測(cè)試框架。自Python2.1版本后,Unittest已經(jīng)成為了Python的標(biāo)準(zhǔn)庫(kù)。Unittest類庫(kù)中包含許多方法可供編程時(shí)調(diào)用,提高了開(kāi)發(fā)測(cè)試腳本的效率和質(zhì)量。
在某視頻直播轉(zhuǎn)碼軟件項(xiàng)目中,與Web頁(yè)面相關(guān)的部分作為一個(gè)單獨(dú)的軟件模塊開(kāi)發(fā)。該模塊作為項(xiàng)目的業(yè)務(wù)功能模塊之一,支持從Web頁(yè)面對(duì)視頻文件進(jìn)行直播轉(zhuǎn)碼。
該軟件模塊采用MVC設(shè)計(jì)模式,使用當(dāng)前最流行的Struts2+Spring3+Hibernate框架進(jìn)行開(kāi)發(fā)。前臺(tái)采用JSP進(jìn)行頁(yè)面開(kāi)發(fā)和用戶界面管理,使用JavaScript結(jié)合開(kāi)源的前端插件jQuery EasyUI進(jìn)行前端頁(yè)面開(kāi)發(fā)。后臺(tái)采用Java與MySQL數(shù)據(jù)庫(kù)進(jìn)行開(kāi)發(fā),采用當(dāng)前主流的Java開(kāi)源開(kāi)發(fā)工具Eclipse和Tomcat服務(wù)器進(jìn)行程序開(kāi)發(fā)和發(fā)布。
jQuery是一套簡(jiǎn)潔、靈活的JavaScript腳本庫(kù),可以幫助Web頁(yè)面開(kāi)發(fā)工程師簡(jiǎn)化JavaScript代碼。jQuery由于簡(jiǎn)便易用的特點(diǎn),在Web前端開(kāi)發(fā)中被廣泛使用。
EasyUI作為一款開(kāi)源前端插件集合,功能十分強(qiáng)大。應(yīng)用這些插件可以極大地減少Web開(kāi)發(fā)方面的工作量。EasyUI與jQuery結(jié)合在一起應(yīng)用,jQuery負(fù)責(zé)把EasyUI的各種插件搬運(yùn)到Web項(xiàng)目合適的地方,并且讓它真正運(yùn)轉(zhuǎn)起來(lái)。
Web軟件功能測(cè)試點(diǎn)覆蓋Web頁(yè)面上各場(chǎng)景的正常與異常功能測(cè)試點(diǎn)。Web頁(yè)面的功能測(cè)試包括以下場(chǎng)景:Web頁(yè)面登錄與注銷(xiāo);Web頁(yè)面登錄密碼修改;直播頻道增、刪、改、選中、多頻道翻頁(yè);頻道顯示條數(shù)、頻道各參數(shù)配置;直播頻道啟用和禁用;瀏覽器兼容性測(cè)試,等等。
自動(dòng)化測(cè)試軟件開(kāi)發(fā)過(guò)程主要包括:仔細(xì)研讀軟件需求說(shuō)明書(shū)、分析測(cè)試需求、提交測(cè)試策略、設(shè)計(jì)測(cè)試用例、搭建測(cè)試環(huán)境。手動(dòng)執(zhí)行測(cè)試、選擇自動(dòng)化測(cè)試用例、開(kāi)展自動(dòng)化測(cè)試工作。具體過(guò)程如圖1所示。
圖1 自動(dòng)化測(cè)試軟件開(kāi)發(fā)過(guò)程
明確自動(dòng)化測(cè)試的對(duì)象、目的、內(nèi)容、方法、進(jìn)度要求,并確保測(cè)試所需的人力、軟硬件設(shè)備、數(shù)據(jù)等資源準(zhǔn)備充分。
根據(jù)需求說(shuō)明書(shū),測(cè)試架構(gòu)師(TSE)編寫(xiě)測(cè)試策略,設(shè)計(jì)測(cè)試功能點(diǎn)。Web功能測(cè)試需要覆蓋頁(yè)面鏈接、控件、頁(yè)面功能、數(shù)據(jù)處理、模塊業(yè)務(wù)邏輯等多種功能的測(cè)試。
TSE針對(duì)正常和異常情況進(jìn)行測(cè)試用例設(shè)計(jì),測(cè)試用例覆蓋所有測(cè)試功能點(diǎn),共涉及測(cè)試用例288個(gè),并編寫(xiě)測(cè)試用例文檔。
搭建測(cè)試所需的各種軟硬件環(huán)境,如數(shù)據(jù)、網(wǎng)絡(luò)、測(cè)試工具的安裝和設(shè)置等。
手動(dòng)測(cè)試可以發(fā)現(xiàn)Web軟件存在的各種問(wèn)題,同時(shí)也可以檢查測(cè)試用例設(shè)計(jì)中存在的問(wèn)題,為開(kāi)展自動(dòng)化測(cè)試奠定堅(jiān)實(shí)的基礎(chǔ)。
選擇可以自動(dòng)化測(cè)試的測(cè)試用例,共選定測(cè)試用例238個(gè),自動(dòng)化率為82.64%。通常兼容性測(cè)試用例不能實(shí)現(xiàn)自動(dòng)化測(cè)試。
采用Python與Selenium工具編寫(xiě)自動(dòng)化測(cè)試腳本,腳本基于Unittest自動(dòng)化測(cè)試框架。完成用例的測(cè)試腳本編寫(xiě)工作后,采取測(cè)試庫(kù)框架優(yōu)化測(cè)試用例腳本,從眾多的腳本中提取出公共函數(shù),供測(cè)試用例調(diào)用。通過(guò)腳本連跑實(shí)現(xiàn)對(duì)Web軟件的自動(dòng)化測(cè)試。
測(cè)試軟件開(kāi)發(fā)選擇Python作為開(kāi)發(fā)語(yǔ)言,使用Selenium提供的資源進(jìn)行測(cè)試軟件開(kāi)發(fā)。工作內(nèi)容包括安裝各種測(cè)試工具、搭建測(cè)試環(huán)境;錄制、編寫(xiě)測(cè)試腳本;基于測(cè)試庫(kù)框架優(yōu)化軟件代碼;自動(dòng)化腳本連跑;測(cè)試結(jié)果分析。
在執(zhí)行測(cè)試任務(wù)的PC機(jī)(執(zhí)行機(jī))安裝所需的各種測(cè)試工具。
4.1.1 Python工具
安裝包為python-2.7.3.msi。安裝完成后,在環(huán)境變量中增加Python工具的相關(guān)目錄路徑。Python工具自帶了一個(gè)輕量級(jí)的集成開(kāi)發(fā)工具IDLE,IDLE可以進(jìn)行測(cè)試腳本的編輯、調(diào)試和執(zhí)行。
4.1.2 Selenium工具
網(wǎng)上下載基于Python語(yǔ)言的軟件包selenium-2.50.1-py2-none-any.whl,執(zhí)行pip install selenium-2.50.1-py2-none-any.whl進(jìn)行軟件包安裝。安裝完成后Selenium軟件包安裝在Python工具的lib目錄下。
4.1.3 安裝Firefox瀏覽器和Selenium IDE工具
首先安裝Firefox瀏覽器,然后在該瀏覽器上安裝Selenium IDE工具。Selenium IDE是Firefox瀏覽器的插件,只能安裝在Firefox瀏覽器上。
4.1.4 安裝MySQL數(shù)據(jù)庫(kù)的相關(guān)工具
在Python程序中讀寫(xiě)MySQL數(shù)據(jù)庫(kù),需要安裝相關(guān)的工具。
(1)安裝MySQL-python工具,安裝包為MySQL-python-1.2.5.win32-py2.7.exe。
(2)安裝MySQL連接器,安裝包為mysql-gui-tools-5.0-r17-win32.msi。
安裝完成后,可以通過(guò)SQL語(yǔ)句對(duì)MySQL數(shù)據(jù)庫(kù)表單進(jìn)行操作。
4.1.5 pycharm工具安裝
pycharm工具的安裝包為pycharm-community-5.0.3.exe。pycharm工具是Python重量級(jí)IDE,功能強(qiáng)大,自動(dòng)檢測(cè)語(yǔ)法,可以幫助開(kāi)發(fā)者寫(xiě)出更規(guī)范的Python代碼。
Java Web軟件[17]基本組成如圖2所示。搭建測(cè)試環(huán)境需要安裝瀏覽器和Web應(yīng)用軟件。文中的Web軟件選擇Chrome或者Firefox瀏覽器作為客戶端瀏覽器。
圖2 Java Web軟件基本組成
4.2.1 安裝瀏覽器
在測(cè)試執(zhí)行機(jī)上安裝瀏覽器,目前安裝的Python與Selenium工具要求谷歌瀏覽器的版本不能低于43.0.2357.0。谷歌瀏覽器安裝包為48.0.2564.116_chrome_installer.exe。安裝完谷歌瀏覽器后,還需要安裝谷歌瀏覽器驅(qū)動(dòng)程序chromedriver.exe,將其安裝在指定的目錄下。
4.2.2 Web軟件測(cè)試環(huán)境部署
Web軟件測(cè)試環(huán)境部署在操作系統(tǒng)為Windows 7的PC機(jī)上。
(1)安裝JDK、Tomcat與MySQL。
JDK安裝包為jdk-7u15-windows-is86.exe(1.7.0_15版本)。Tomcat安裝包為apache-tomcat-7.0.29-windows-x86.zip,直接解壓、安裝。MySQL數(shù)據(jù)庫(kù)安裝包為mysql-5.5.8-win32.msi。完成三個(gè)軟件安裝后,在環(huán)境變量中添加JDK、Tomcat、MySQL工具的相關(guān)目錄路徑。
(2)安裝Web產(chǎn)品軟件包。
Web產(chǎn)品軟件包為*.war格式的軟件包,將軟件包部署到Tomcat安裝路徑下的webapps文件夾中,部署完成之后,切換目錄到Tomcat安裝路徑下的bin文件夾下,執(zhí)行startup.bat文件啟動(dòng)Tomcat服務(wù)。網(wǎng)頁(yè)的IP地址為部署Web軟件PC機(jī)的IP地址。
在Firefox瀏覽器上啟動(dòng)Web軟件程序,找到菜單欄“工具”下的Selenium IDE,單擊后出現(xiàn)錄制頁(yè)面,點(diǎn)擊紅色錄制按鈕,開(kāi)始錄制。根據(jù)測(cè)試用例進(jìn)行手動(dòng)測(cè)試操作,測(cè)試操作完成后,按下紅色按鈕停止錄制。從Selenium IDE工具導(dǎo)出錄制的Python腳本,該腳本文件名與測(cè)試用例編號(hào)相對(duì)應(yīng)。
目前Web頁(yè)面的登錄、注銷(xiāo)以及修改密碼等簡(jiǎn)單的場(chǎng)景采用Selenium IDE工具錄制之后,可以導(dǎo)出正確可用的測(cè)試腳本。其他包含復(fù)雜測(cè)試場(chǎng)景的Web自動(dòng)化測(cè)試用例錄制后并不能生成真正可用的腳本。某些測(cè)試場(chǎng)景不支持通過(guò)Selenium IDE工具錄制腳本。
腳本錄制完成之后通常還需要修改、完善。錄制的測(cè)試用例腳本擁有Unittest測(cè)試框架,為腳本的進(jìn)一步編寫(xiě)工作提供了良好的基礎(chǔ)。
測(cè)試用例腳本采用Python進(jìn)行程序設(shè)計(jì)。對(duì)于Python而言,代碼縮進(jìn)是一種語(yǔ)法,Python沒(méi)有像其他語(yǔ)言一樣采用{}或者begin...end分隔代碼塊,而是采用代碼縮進(jìn)和冒號(hào)來(lái)區(qū)分代碼之間的層次??s進(jìn)的空白數(shù)量是可變的,但是所有代碼塊語(yǔ)句必須包含相同的縮進(jìn)空白數(shù)量,這個(gè)必須嚴(yán)格執(zhí)行。Python腳本中出現(xiàn)未對(duì)齊的行,該行下方就會(huì)出現(xiàn)紅色曲線??梢允褂每崭矜I調(diào)整格式,直到紅色曲線消失。
當(dāng)腳本中一行的字符數(shù)過(guò)多時(shí),會(huì)報(bào)PEP 8的告警。應(yīng)該將長(zhǎng)字符串分隔成多行顯示。
4.4.1 自動(dòng)化測(cè)試腳本框架
下面是一個(gè)簡(jiǎn)單測(cè)試用例腳本示例:
#-*- coding:utf-8 -*-
from selenium importwebdriver
importunittest
......
class BaiduTest(unittest.TestCase):
def setUp(self):
self.driver=webdriver.Chrome ()
self.base_url=u"http://www.baidu.com"
deftest_baidu_search(self):
driver=self.driver
driver.get(self.base_url)
self.assertEqual(driver.title, u"百度一下,你就知道")
driver.find_element_by_id("kw").clear()
……
def tearDown(self):
self.driver.quit()
if __name__=="__main__":
unittest.main()
從腳本示例中可以看出,通常測(cè)試腳本由5部分組成:
(1)導(dǎo)入需要調(diào)用的程序模塊。
(2)定義繼承unittest.TestCase的測(cè)試類,從而可以使用unittest.TestCase類中的各種方法。
(3)在初始化方法setUp中,初始化webdriver,設(shè)置測(cè)試環(huán)境。該方法自動(dòng)執(zhí)行。
(4)定義測(cè)試方法,首先定位Web元素,然后開(kāi)展相關(guān)測(cè)試場(chǎng)景的操作。
(5)在清理方法tearDown中,執(zhí)行測(cè)試用例運(yùn)行后的清理工作,如退出webdriver、關(guān)閉驅(qū)動(dòng)、恢復(fù)用例執(zhí)行前的狀態(tài)等。該方法自動(dòng)執(zhí)行。
4.4.2 Web元素定位
Web元素定位就是在Web頁(yè)面上找到待測(cè)試的Web元素。手工測(cè)試時(shí),測(cè)試人員容易在Web頁(yè)面上找到Web元素開(kāi)展測(cè)試工作。自動(dòng)化測(cè)試通過(guò)測(cè)試程序在Web頁(yè)面對(duì)應(yīng)的HTML文件中定位Web元素,這是進(jìn)行Web元素測(cè)試的第一步。Web元素定位有多種方法,文中的軟件項(xiàng)目測(cè)試過(guò)程中主要采用如下四種方法。
(1)基于元素ID的定位。
該方法通過(guò)查找Web頁(yè)面上的元素ID值來(lái)獲取元素,比較簡(jiǎn)單,適合Web元素ID固定的情況來(lái)使用,對(duì)于動(dòng)態(tài)分配Web元素ID的情況不能使用。
(2)基于元素XPATH的定位方法。
元素XPATH的定位類似查找一個(gè)人的地址,通過(guò)頁(yè)面html文件中的標(biāo)簽名的層級(jí)關(guān)系定位元素的絕對(duì)路徑。這種定位元素方法在實(shí)際使用過(guò)程中,可以針對(duì)元素的XPATH進(jìn)行修改,添加上、下層級(jí)的腳本標(biāo)示,增加元素獲取的準(zhǔn)確性。
(3)基于元素CSS的定位方法。
該定位方法查找Web元素的CSS屬性來(lái)獲取元素。CSS(cascading style sheets)層疊樣式表是用來(lái)表現(xiàn)HTML或XML的標(biāo)記語(yǔ)言。CSS使用選擇器來(lái)為頁(yè)面元素綁定屬性。元素CSS定位方法,相對(duì)前兩種方法要復(fù)雜一些,元素的CSS屬性選擇比較靈活多樣。
(4)基于元素LINK的定位。
該定位方法僅適用于文本鏈接的場(chǎng)景,通過(guò)元素標(biāo)簽對(duì)應(yīng)的文本信息來(lái)定位元素,相對(duì)其他的元素定位方法,適用的場(chǎng)景比較有限。
4.4.3 測(cè)試方法
完成Web元素定位后,需要對(duì)相關(guān)的場(chǎng)景進(jìn)行各種操作,開(kāi)展測(cè)試工作。文獻(xiàn)[14]介紹了采用Python語(yǔ)言在各種常見(jiàn)場(chǎng)景中的操作方法。文獻(xiàn)[15]采用Java語(yǔ)言介紹了同樣的內(nèi)容。網(wǎng)上也可以查到大量測(cè)試場(chǎng)景操作方法。編寫(xiě)測(cè)試方法是腳本編寫(xiě)的核心內(nèi)容。
下面介紹測(cè)試腳本編寫(xiě)過(guò)程中兩種場(chǎng)景的處理方法:
(1)Web頁(yè)面中包含iframe框架。
Web頁(yè)面中包含iframe框架時(shí),如果要提取iframe框架中的元素,需要在腳本中使用swtich_to_iframe實(shí)現(xiàn)框架切換。在該iframe框架上的相關(guān)操作完成后,需要從該iframe框架切換回來(lái),在腳本中使用swtich_to_default_content來(lái)實(shí)現(xiàn)。
(2)文本框或數(shù)字框輸入非法值場(chǎng)景。
Web頁(yè)面上很多元素是使用EasyUI制作的,其中包含大量的文本框和數(shù)字框場(chǎng)景。由于填入文本或數(shù)字都有一定的取值范圍限制,當(dāng)文本框或數(shù)字框中填入非法值時(shí),文本框或數(shù)字框的右側(cè)通常會(huì)彈出tooltip類型的提示框,提示填入的內(nèi)容非法。填入非法值之后,tooltip提示框會(huì)在鼠標(biāo)移動(dòng)出對(duì)應(yīng)文本框或數(shù)據(jù)框之后消失。測(cè)試腳本需要定位tooltip類型的提示框。
解決辦法:當(dāng)文本框與數(shù)字框中輸入非法值時(shí),可以通過(guò)基于元素CSS的方法來(lái)定位tooltip元素,檢測(cè)tooltip中所提示的文本內(nèi)容。具體方法如下:
Tip=driver.find_element_by_css_selector(“div[class‘tooltip tooltip-right’]”).text
4.4.4 MySQL數(shù)據(jù)庫(kù)操作
測(cè)試腳本對(duì)Web軟件進(jìn)行頻道添加、頻道修改以及各類頻道參數(shù)配置后,相關(guān)數(shù)據(jù)會(huì)寫(xiě)入MySQL數(shù)據(jù)庫(kù)中對(duì)應(yīng)的數(shù)據(jù)表中。在編寫(xiě)測(cè)試腳本時(shí),需要通過(guò)MySQL-python工具來(lái)實(shí)現(xiàn)對(duì)MySQL數(shù)據(jù)庫(kù)的操作,腳本實(shí)現(xiàn)時(shí)首先需要在腳本的最前面加上import MySQLdb,然后在測(cè)試腳本的測(cè)試方法中添加對(duì)MySQL數(shù)據(jù)庫(kù)的操作語(yǔ)句,實(shí)現(xiàn)對(duì)數(shù)據(jù)庫(kù)的讀寫(xiě)操作。代碼內(nèi)容如下所示:
conn=MySQLdb.connect(host=‘10.185.31.52’,port=‘3306’,
user=‘root’,password=‘huawei’,db=‘hwwebom’,charset=‘utf8’)
cur=conn.cursor()
cur.execute(“select name from hwwebom.t_channel where name=‘%s’ ” % channel_name)
for cha_name in cur.fetchall():
print cha_name
cur.close()
conn.commit()
conn.close()
4.4.5 執(zhí)行用例腳本生成測(cè)試報(bào)告
測(cè)試用例腳本為*.py類型文件,在執(zhí)行機(jī)上點(diǎn)擊該文件就可以自動(dòng)運(yùn)行。希望在測(cè)試用例腳本執(zhí)行之后生成測(cè)試報(bào)告,需要使用Unittest的第三方測(cè)試報(bào)告模塊HTMLTestRunner(該模塊不在標(biāo)準(zhǔn)庫(kù)中,需要自行下載),加載該模塊后可以生成HTML格式的測(cè)試報(bào)告。將HTMLTestRunner.py文件保存Python的Lib目錄下,就可以在測(cè)試腳本中調(diào)用該模塊,具體實(shí)現(xiàn)過(guò)程如下所示:
if __name__==“__main__”:
now=time.strftime(“%Y-%m-%d-%H-%M-%S”)
filename=report_dir+‘/’+now+’_Web_Login_result.html’
fp=open(filename,‘wb’)
runner=HTMLTestRunner(
stream=fp,
title=unicode(‘測(cè)試報(bào)告’),
description=Unicode(‘測(cè)試執(zhí)行情況:’)
)
runner.run(discover)
fp.close()
在生成測(cè)試報(bào)告文件時(shí),將測(cè)試報(bào)告生成的時(shí)間作為測(cè)試報(bào)告文件名的一部分,并將測(cè)試報(bào)告文件生成的時(shí)間、測(cè)試用例運(yùn)行結(jié)果寫(xiě)入測(cè)試報(bào)告。
測(cè)試庫(kù)框架(test library framework)把應(yīng)用程序分成過(guò)程和函數(shù)。該框架創(chuàng)建應(yīng)用程序函數(shù)的庫(kù)文件,庫(kù)文件中的函數(shù)供應(yīng)用程序調(diào)用。測(cè)試庫(kù)架構(gòu)框架的優(yōu)點(diǎn)在于能夠刪除明顯重復(fù)的部分,優(yōu)化腳本代碼。
獨(dú)立編寫(xiě)的測(cè)試用例腳本,整體結(jié)構(gòu)凌亂。需要將很多的公共場(chǎng)景與Web頁(yè)面上的公共元素參數(shù)提取出來(lái)作為公共函數(shù)與共享參數(shù);重新修改測(cè)試腳本,規(guī)范優(yōu)化測(cè)試腳本;減少代碼冗余,提高腳本質(zhì)量;同時(shí)也方便業(yè)務(wù)擴(kuò)展之后的腳本修改和維護(hù)。
4.5.1 測(cè)試軟件目錄結(jié)構(gòu)
測(cè)試軟件的目錄結(jié)構(gòu)如圖3所示。測(cè)試腳本按功能分類存放在各自文件夾中。公共函數(shù)與公共配置文件存放在Public文件夾中。執(zhí)行連跑任務(wù)的Python 腳本存放在根(Root)目錄中。測(cè)試報(bào)告存放在Tesst_report目錄中。
圖3 測(cè)試軟件目錄結(jié)構(gòu)
4.5.2 公共函數(shù)的功能
Public文件夾中共包含了5個(gè)公共函數(shù)文件。其他文件夾中測(cè)試腳本可以調(diào)用Public文件中公共函數(shù)文件中的函數(shù),在Public文件夾中需要添加__init__.py文件。5個(gè)公共函數(shù)文件實(shí)現(xiàn)的功能如表1所示。
表1 公共函數(shù)的功能
4.5.3 公共配置文件
Python標(biāo)準(zhǔn)庫(kù)的ConfigParser[18]模塊提供一套API來(lái)讀取和操作配置文件。ConfigParser是用來(lái)讀取配置文件的包,可以把一些常用的參數(shù)放在配置文件中,供多個(gè)腳本共同使用。
公共配置文件中主要寫(xiě)入元素定位參數(shù)。在測(cè)試腳本編寫(xiě)中,多個(gè)測(cè)試腳本需要對(duì)同一Web元素定位,將該元素的定位參數(shù)值寫(xiě)入配置文件,方便編程時(shí)共同使用。
以場(chǎng)景登錄(Login)時(shí)輸入“用戶名”和“密碼”為例,敘述公共配置文件的使用方法。
(1)在腳本開(kāi)頭添加:import ConfigParser。
(2)打開(kāi)公共配置文件。
all_dir=os.path.split(os.getcwd())
ini_dir=all_dir[0]
css_selector_filename=os.path.join(ini_dir,‘css_selector.ini’)
(3)獲取配置文件中指定的配置信息。
[global]
Tip_Username_Null=/html/body/div[2]/div[3]/form/div[1]/div/small[1]
Tip_Password _Null=/html/body/div[2]/div[3]/form/div[2]/div/small
(4)將獲取的元素定位信息賦值給元素定位函數(shù)的參數(shù)變量,進(jìn)行定位場(chǎng)景操作。
測(cè)試腳本連跑是指全部測(cè)試腳本在程序控制下依次自動(dòng)運(yùn)行。
4.6.1 測(cè)試腳本連跑實(shí)現(xiàn)方法
腳本連跑使用discover方法,具體實(shí)現(xiàn)方式如下所示:
test_dir=‘./Web_Login’
report_dir=‘./Test_Report’
#discover方法定義
discover=unittest.defaultTestLoader.discover(test_dir,patter n=‘*.py’)
定義連跑路徑變量和測(cè)試結(jié)果報(bào)告存放路徑變量,然后調(diào)用discover方法執(zhí)行連跑路徑下所有的測(cè)試腳本,連跑完成之后生成每個(gè)測(cè)試腳本的測(cè)試報(bào)告。
4.6.2 設(shè)定定時(shí)腳本連跑任務(wù)
采用相關(guān)工具設(shè)定定時(shí)連跑任務(wù)。
(1)BAT腳本啟動(dòng)連跑任務(wù)。
編寫(xiě)B(tài)AT腳本,調(diào)用根(Root)目錄下的Python連跑腳本,啟動(dòng)連跑任務(wù)。腳本內(nèi)容如下所示:
@echo off
set Script_path=D:Python_27_3Project_Live_New
set Report_path=D:Python_27_3Project_Live_NewTest_Report
taskkill /f /im FireFox.exe /t
cd /d % Script_path %
::調(diào)用Python腳本執(zhí)行連跑
python Report_Test_Mod_Password.py-v
(2)Windows的任務(wù)計(jì)劃程序定時(shí)連跑。
若執(zhí)行機(jī)的操作系統(tǒng)是Windows,在操作系統(tǒng)的附件中啟動(dòng)任務(wù)計(jì)劃程序,設(shè)置Bat腳本定時(shí)運(yùn)行任務(wù)。
4.6.3 持續(xù)集成工具定時(shí)連跑
在執(zhí)行機(jī)上安裝持續(xù)集成工具Jenkin或者ICP-CI,編寫(xiě)Ant腳本,創(chuàng)建持續(xù)集成工程,進(jìn)行Web自動(dòng)化腳本定時(shí)連跑。
基于Selenium+Python的自動(dòng)化測(cè)試軟件開(kāi)發(fā)完成后,使用效果良好。
(1)提高測(cè)試效率。
手動(dòng)執(zhí)行288個(gè)Web測(cè)試用例耗時(shí)7人/天,且無(wú)法實(shí)現(xiàn)反復(fù)測(cè)試,整理測(cè)試報(bào)告也需要花費(fèi)大量時(shí)間與人力。Web自動(dòng)化測(cè)試腳本實(shí)現(xiàn)了82.64%的測(cè)試場(chǎng)景自動(dòng)化,238個(gè)自動(dòng)化測(cè)試用例連跑大約需要3個(gè)小時(shí),同時(shí)可以實(shí)現(xiàn)測(cè)試報(bào)告自動(dòng)輸出,可以利用非工作時(shí)間反復(fù)執(zhí)行測(cè)試任務(wù)。
(2)預(yù)測(cè)試。
可用于軟件集成測(cè)試、系統(tǒng)測(cè)試、驗(yàn)收測(cè)試的預(yù)測(cè)試。
結(jié)合Web軟件項(xiàng)目詳細(xì)敘述了基于Selenium+Python的自動(dòng)化測(cè)試軟件開(kāi)發(fā)過(guò)程, 介紹了開(kāi)發(fā)過(guò)程中遇到的許多技術(shù)細(xì)節(jié)。工作實(shí)踐表明,該測(cè)試軟件在使用過(guò)程中效果良好,可以提高軟件開(kāi)發(fā)與測(cè)試的效率,降低軟件的開(kāi)發(fā)成本。同時(shí)彌補(bǔ)了手工測(cè)試時(shí)重復(fù)勞動(dòng)的缺點(diǎn),減少了測(cè)試人員大量的重復(fù)測(cè)試驗(yàn)證工作;也有助于做好軟件項(xiàng)目的管理工作。