張慧 肖光華 王寒芳
關鍵詞:Python;Selenium;自動化測試;回歸測試
中圖分類號:TP3 文獻標識碼:A
文章編號:1009-3044(2023)12-0051-03
0 引言
隨著軟件技術的逐漸成熟,新技術產(chǎn)生的同時,促進了軟件測試的改變。由于現(xiàn)在的社會的變化,敏捷開發(fā)模式逐漸成熟,同時它對軟件質量可以進行持續(xù)、及時和全面的跟蹤,很多傳統(tǒng)的開發(fā)模式正在逐步朝著敏捷開發(fā)模式轉變。隨著敏捷開發(fā)模式的使用,版本的發(fā)布越來越頻繁。同時回歸測試中的代碼也變得越來越頻繁。因此市場上逐漸開發(fā)出了一些成熟的自動化測試框架[1],例如robotframework等,雖然利用這些工具,可以提供測試的工作效率,但是這些框架也有一定的局限性,必須按照工具原有的規(guī)則來編寫測試用例,這類自動化測試用例往往存在冗余度高和復用性地的問題。本次自動化平臺設計解決了這樣的問題,根據(jù)測試的實際需求,實現(xiàn)一個方便維護、減少冗余、提高自動化測試用例的復用性自動化框架結構。
1 自動化測試的意義
當軟件的功能比較成熟、穩(wěn)定性較好的時候,軟件版本迭代頻繁,改動性較小,主流程測試用例在每次迭代更新時都需要執(zhí)行,比較費人力和時間。如果能將這些測試用例進行自動化測試用例,讓它自動執(zhí)行,那么就會節(jié)省成本。每次版本更新的時候,這些自動化測試用例可以在回歸測試中自動執(zhí)行。尤其是在測試周期很短的大項目中,回歸測試用例較多,幾百個測試用例回歸執(zhí)行時,手動執(zhí)行可能需要一個工程師十天的工作量,但是在自動化測試用例則可能幾個小時就可以執(zhí)行完畢。同時自動化測試用例的時間靈活。較多自動化運行上千個測試用例的時間段,且時間靈活,且能夠在非工作內執(zhí)行,充分利用了公司的資源。同時自動化的腳本沒有變化,重復執(zhí)行時可保證原有功能不發(fā)生變化。
2 自動化測試的相關技術
2.1 Python 語言與自動化測試
Selenium是應用在Web類型的自動化測試工具。它的能夠支持Java、Python、C#、PHP Perl和Ruby等多種語言,所以不同的語言需要安裝對應的Selenium庫包文件。Python語言是一個極簡的語言,它非常簡單容易上手。近年來,由于Python語言的諸多優(yōu)點:簡潔性、易讀性和可擴展性,使得Python語言越來越成熟,越來越多的公司選用了Python語言。雖然Java語言在市場上仍然占有很大的分量,但是在未來的一段時間內,Python占的比重將越來越高。在自動化測試語言的選擇中,越來越多的自動化測試工程師選擇了Python語言。它不需要讓開發(fā)或測試人員搞明白語言本身,能夠讓測試功能師能很快上手,花更多的時間在研究問題上。
2.2 Selenium 自動化測試工具
Selenium是目前使用最廣泛的一個Web用戶界面自動化測試套件之一。它可以使用支持的任何一種編程語言進行編寫,同時可以在大部分的Web瀏覽器中直接運行。它對應了多種語言,其中Python和C# 兩種Selenium Web驅動目前使用最多的。
2.3 Pytest 單元測試框架
test相Py比te起st是來,P更yth加on簡的潔一和種高單效元。測它試有框以架下,它的幾與點un優(yōu)it?點:上手簡單,入門容易,文檔也很豐富,文檔中也提供了很多的示例進行參考;能夠很好地支持測試用例集和測試用例的運行;支持參數(shù)化;在執(zhí)行的過程中可以跳過測試用例,或者將預定失敗的測試用例標記為失敗;支持重復執(zhí)行失敗的用例;能夠生成HTML 測試報告,還可以與Allure相結合生成好看的測試報告;可以自定義擴展第三方插件。
2.4 Allure
Allure是一個非常靈活的輕量級開源測試框架,它能夠支持Pytest。同時有上手簡單和易于集成的特點。在使用的時候通過語句“pytest.main (–alluredir report/result Demo.py)”,就會在當前文件夾創(chuàng)建一個report文件夾,在report文件夾下創(chuàng)建result,生成json 類型的測試報告。通過語句os.system“( allure + gen? erator./report/result+‘-o‘+‘./report/result‘+-‘o‘+./report/html‘+--clean”)將json格式測試報告轉化為好看的HTML測試報告的命令字符串;并通過OS的System函數(shù)將字符串轉化為命令執(zhí)行。
3 自動化測試平臺的設計
自動化測試平臺的設計,應該有前端頁面,主要包含有用戶管理、測試用例管理和挑選待運行的自動化測試用例的功能[2]。測試用例管理能夠列舉出所有的測試用例,也能也能查看每個用例的運行記錄。因此本W(wǎng)eb自動化測試平臺采用的是前后端分離的模式進行設計的,前端的內容采用的是Vue框架來實現(xiàn)的,后端的業(yè)務通過Python和Selenium編寫的自動化框架實現(xiàn)[3],數(shù)據(jù)庫的存儲使用的MySQL數(shù)據(jù)庫來實現(xiàn)的,主要用來存儲用戶信息和測試用例的執(zhí)行結果,如圖1所示。
4 自動化測試平臺實現(xiàn)
4.1 前端功能實現(xiàn)
自動化測試平臺的前端主要是現(xiàn)實測試用例集以及其下面的測試用例,在前端頁面中,測試人員可以根據(jù)需要挑選合適的自動化測試用例執(zhí)行。
前端由Vue完成,其中用戶的管理頁面包含創(chuàng)建用戶,用戶權限、編輯用戶等功能。數(shù)據(jù)則保存在數(shù)據(jù)庫之中。
前端頁面中也可以顯示用例集和測試用例。首先便利測試用例文件夾下的所有文件,然后通過Py? thon中的dir()函數(shù),查看每個文件包含的全部成員(函數(shù)和類),記錄在文件中。通過采用讀取文件的方式,得到所有的測試用例集合以及測試用例,然后在前端頁面列舉出來[4]。
前端頁面也能自定義勾選選擇相關的測試用例集和測試用例進行執(zhí)行,加入到會執(zhí)行列表中,進行執(zhí)行。
4.2 后臺的實現(xiàn)
基于自動化測試的分層思想,本文論述的自動化測試在實現(xiàn)上分為4 層,分別為公共處理層、業(yè)務處理層、測試用例層、執(zhí)行結果表現(xiàn)層。
1) 公共處理層是一些通用的基本功能,如初始化配置文件、日志處理模塊、webdriver驅動模塊、文件讀取與解析、常用的頁面操作方法封裝、數(shù)據(jù)庫操作封裝、生成隨機數(shù)據(jù)等功能,和測試結果數(shù)據(jù)或測試報告文件的存放信息。
2) 業(yè)務處理層是以PageObject設計模式展開,包含了以頁面為單位封裝的操作和屬性。包含了該頁面的每個頁面元素的定位屬性或者定位表達式,以及每個頁面元素的操作方法。在PageObject設計模式中,元素定位屬性和頁面元素的操作是分開定義的,減少了自動化框架的耦合性。當頁面元素的屬性發(fā)生變化時,只需要修改頁面元素的定位屬性,而不需要操作方法。該層的實現(xiàn)是為了測試用例執(zhí)行的時候簡化調用和減少重復代碼。
3) 測試用例層含有測試用例套件和測試用例兩個部分。該層是自動化測用例執(zhí)行的主入口。測試的數(shù)據(jù)是通過數(shù)據(jù)驅動的方式發(fā)送,執(zhí)行時首先對數(shù)據(jù)驅動方法進行執(zhí)行,得到測試數(shù)據(jù)。數(shù)據(jù)的輸入采用的是Pytest框架的數(shù)據(jù)驅動,它是一款由Pytest自動化測試框架自帶的一個數(shù)據(jù)驅動。它是由pytest.emtrairzke()方法實現(xiàn)的 。Pytest.mark.param-etrize是pytest的一個內置裝飾器,允許在class類和函數(shù)function上定義多組參數(shù)后者通過fixture裝飾器擴展數(shù)據(jù)驅動來實現(xiàn)驅動。根據(jù)業(yè)務功能點編寫自動化測試用例文檔,再在相應的測試套件中,根據(jù)測試用例文檔編寫自動化測試用例。最后獲取斷言的實際結果,與期望結果進行斷言對比。在執(zhí)行自動化測試用例的過程中,能夠在不同的測試套件中挑選自動化測試用例進行組合。
4)執(zhí)行結果表現(xiàn)層是通過pytest框架來實現(xiàn),Py-test是Python第三方的測試庫。提供了比unittest更加強大更靈活的測試機制。通過pytest-repeat和pytest-xdist框架實現(xiàn)了重復測試和并行測試。對于結果顯示本文使用的是pytest和allure來實現(xiàn)的,通過pytest和allure結合實現(xiàn)漂亮的測試報告。Allure是一個輕量級語言測試報告工具,它具有靈活性的特點,能夠將測試結果以簡潔的報告呈現(xiàn)出來。同時也將測試用例的步驟生成了運行日志模塊,可記錄測試用例的執(zhí)行過程和執(zhí)行情況,通過日志也可以查詢測試用例失敗的原因。也可以為自動化測試用例的維護和優(yōu)化提供依據(jù)。同時有眾多的插件可以實現(xiàn)更多測試場景[5]。同時,也將測試用例的執(zhí)行結果插入數(shù)據(jù)庫的結果表單中,以保存每次運行的測試結果。
5 自動化框架的應用
5.1 被測系統(tǒng)簡介
被測系統(tǒng)是一款醫(yī)藥批發(fā)網(wǎng)站W(wǎng)eb端,該網(wǎng)站主要包括了前臺和后臺兩個部分:前端商城的功能主要包括有用戶注冊、用戶登錄、商品列表、查詢商品、查看商品詳情、加入購物車、購物車頁面、提交訂單頁面、訂單詳情頁面、取消訂單、個人中心頁面,而后臺管理頁面則包括用戶管理、商品管理、訂單管理、營銷活動模塊等功能。
5.2 測試需求
本文將以用戶采購藥品流程為例子,測試的步驟包括下面幾點。
1) 用戶注冊
點擊注冊鏈接,進入“用戶注冊”頁面,在該頁面中填入用戶名和密碼等必填信息,點擊提交按鈕。由于驗證碼需要手機查看,所以本例子中使用的是開發(fā)設定的固定驗證碼來解決該問題。
2) 用戶登錄
在用戶登錄頁面中,使用創(chuàng)建好的用戶名、密碼和驗證碼進行登錄。登錄頁面中的驗證碼,與用戶注冊頁面相同,采用的是開發(fā)設定的固定驗證碼。
3) 查詢商品
登錄成功后,進入列表頁面,在商品查詢頁面上輸入商品信息,點擊查詢按鈕。
4) 驗證商品價格
查詢到商品后,驗證該商品的原價與促銷價是否正確。
5) 加入購物車
將該商品加入購物車,在購物車頁面中,驗證該商品的原價和促銷價格。
6) 提交訂單。
在購物車中勾選商品信息,然后點擊提交訂單按鈕,進行下單操作。在訂單頁面中,驗證該訂單提交成功。
5.3 測試過程
1) 構建測試框架。
安裝測試環(huán)境,安裝Python環(huán)境,安裝相關的Py? thon庫包文件,pytest、selenium、allure。安裝MySQL同時創(chuàng)建好相關的數(shù)據(jù)庫表,安裝Vue 前端開發(fā)架構軟件。
2) 分析需求。
分析該條測試用例,涉及的頁面有用戶注冊頁面、用戶登錄頁面、查詢商品頁面,商品詳情頁面,購物車頁面以及提交訂單頁面。在設計模式中涉及的PageObject應該有6個頁面。
第一個頁面是用戶注冊頁面,其中包含的操作有:① 點擊注冊按鈕;② 用戶名的定位,用戶名的清除與輸入操作;③ 密碼的元素定位、密碼的清除與輸入操作;④ 驗證碼的元素定位,驗證碼的清除與輸入操作;⑤ 點擊注冊按鈕;⑥ 注冊成功彈框提示期望值獲取。
第二個頁面是用戶登錄頁面,該頁面中包含的操作有:① 點擊登錄按鈕;② 用戶名的定位,用戶名的清除與輸入操作;③ 密碼的元素定位、密碼的清除與輸入操作;④ 驗證碼的元素定位,驗證碼的清除與輸入操作;⑤ 點擊登錄按鈕;⑥ 登錄成功彈框提示期望值獲取。
第三個頁面是查詢商品頁面,在頁面中包含的操作有:① 按照傳入的參數(shù),獲取指定的商品所在的位置;② 得到商品的總條數(shù)。
第四個頁面是商品詳情頁面,在該頁面中包含的操作有:① 商品的名稱定位;② 商品的原價價格定位、商品的原價獲取操作;③ 商品的促銷價定位、商品的促銷價獲取操作;④ 加入購物車。
第五個頁面是加入購物車頁面,在該頁面中包含的操作有:① 定位商品的信息元素、點擊指定的商品加入購物車;② 點擊“提交訂單”按鈕。
第六個頁面是提交訂單頁面,在該頁面中包含的操作有:① 定位付款方式位“余額抵扣”“確認提交”元素;② 選擇付款方式為“余額抵扣”;③點擊“確認提交”按鈕。
3)實現(xiàn)自動化測試用例平臺。
系統(tǒng)模塊:醫(yī)藥批發(fā)網(wǎng)站,設計到的模塊有:用戶注冊頁、首頁、查詢商品頁面、商品詳情頁面、購物車頁面和提交訂單頁面。
概述:實現(xiàn)了一個訂單流程的測試用例:自動化測試用例中用戶注冊、用戶登錄以及下訂單的一個測試用例。
目標:驗證一個訂單的流程的實現(xiàn)。通過標準的框架結構為前提,通過PageObject框架結構,將每個頁面分成了數(shù)據(jù)、元素和動作腳本三個腳本。使腳本易讀取,易集成且便于維護,相關的方法還能重復調用,降低了維護的成本,同時也提高了代碼利用率[5]。在pytest中編寫測試用例,通過頁面元素的獲取,得到實際結果,與期望結果進行對比,來驗證測試用例結果。自動化的測試用例的結果報告通過Allure可以生成。
對應的測試用例步驟如下:
①建立WebDriver初始類,其中包含了初始化瀏覽器驅動。同時打開初始化界面“首頁”;
②新建一個Common文件,在該文件中新建二個類:第一個類是建立用于存放元素操作的基本操作的類,例如:點擊、清除、先清除再輸入數(shù)據(jù)、輸入數(shù)據(jù)、滑動頁面、讀取頁面元素數(shù)據(jù)、讀取頁面表格元素、點擊表格中指定列的元素。第二個類是建立用于存放文件讀取操作的類,例如:讀取excel和csv操作、讀取文件操作、寫入excel和csv文件操作、寫入文件操作。通過該類可以讀取和寫入文件數(shù)據(jù)。
③創(chuàng)建PageObject文件夾,在每個頁面中新建兩個文件,以供在測試用例中調用。一個用于存放數(shù)據(jù)和控件元素,另外一個用于存放頁面操作的文件。當頁面元素的定位或者數(shù)據(jù)發(fā)生變化的時候,只需要更新該控件元素的路徑或數(shù)據(jù)值;
④創(chuàng)建TestCases文件平,創(chuàng)建測試用例集TestOrder類下創(chuàng)建測試方法test_order,該方法中用到的測試數(shù)據(jù)是通過pytest.mark.parametrize()來設置的,在本測試用例中用到的測試數(shù)據(jù)有:用戶名、密碼、驗證碼、藥品名“感冒藥”,商品商量為“1”,單價為“20”,促銷價為“18”。
在該類中依次調用如下方法:
①點擊注冊鏈接:調用“首頁”中的點擊“注冊”方法;
②注冊新用戶:調用“注冊”頁面中的先清除再輸入用戶名、密碼和確認密碼,點擊“確定”按鈕方法;
③登錄用戶:調用“首頁”中點擊“登錄”按鈕,調用登錄框中的先清除再輸入用戶名和密碼操作,調用登錄框中的點擊“登錄”按鈕操作;
④查詢商品,調用“首頁”中的先清除和再輸入值搜索框方法,調用“首頁”中的點擊“查詢”按鈕方法;
⑤驗證查詢結果:商品詳情頁面,調用“查詢結果”中的點擊“第一行記錄”方法,進入商品詳情頁;調用商品詳情頁中的獲取商品名稱方法,得到期望的商品名稱。在這一步中進行第一次驗證,驗證商品是否查詢正確;
⑥加入購物車:調用“商品詳情”頁中的點擊“加入購物車”圖標;調用“商品詳情”頁中的點擊“購物車”圖標;
⑦下訂單:調用“購物車”頁面中的點擊“提交訂單”按鈕;
⑧驗證訂單是否提交成功:調用“訂單”頁面中的點擊“待付款”訂單頁面;調用“代付款”頁面中的訂單信息,如:商品與價格,驗證訂單是否正確。
在Vue實現(xiàn)的前端頁面中列出所有的測試用例方法,并勾選出相關的測試用例集下的測試用例,寫入記事本文件中。新建執(zhí)行run_testcases 的執(zhí)行文件,在該文件中通過pytest.main中的方法“pytest.main (‘[ -s,‘-v,‘-k ,‘從記事本中讀取相關的測試方法路徑,‘–alluredir,‘./report/xml])”運行指定的測試用例,并將結果生成allure數(shù)據(jù)集合,再通過Python 命令os. system“( allure generate ./temp -o ./report -- clean”)生成相關的allure 數(shù)據(jù)集合生成allure 報告文檔。
6 結束語
隨著軟件技術越來越成熟,Web應用的發(fā)展通常采用了迭代快和周期短的敏捷開發(fā)模式,Web自動化測試用例的發(fā)展的也成為必然趨勢,隨著自動化測試技術的深入,如何有效地提高內部測試人員的效率,降低成本,具有很高的使用價值,但是該Web自動化平臺依然還有很多值得改進的地方,例如:加入Jen? kins和Ant技術后,能夠每日在指定的時間自動運行測試用例,這樣能使運行時間更加靈活,希望在日后的使用過程中更加完善。