如何做ERP系統(tǒng)的自動(dòng)化測(cè)試

最近,一個(gè)ERP系統(tǒng)的測(cè)試經(jīng)理朋友總和我抱怨,說(shuō)項(xiàng)目上特別忙,但是領(lǐng)導(dǎo)還是給下了一個(gè)新任務(wù)————落地自動(dòng)化測(cè)試。 為了幫助這位朋友的自動(dòng)化測(cè)試,以及有類似需求的測(cè)試經(jīng)理,本文會(huì)介紹如何使用CukeTest自動(dòng)化工具實(shí)現(xiàn)一個(gè)小型ERP系統(tǒng)的自動(dòng)化測(cè)試,實(shí)現(xiàn)錄制=>場(chǎng)景=>參數(shù)化=>數(shù)據(jù)驅(qū)動(dòng)的整個(gè)流程 。
通過這個(gè)介紹,可以讓大家初步了解:
Web自動(dòng)化測(cè)試從錄制
行為驅(qū)動(dòng)框架BDD的開發(fā)
測(cè)試場(chǎng)景的編寫和實(shí)現(xiàn)
參數(shù)化和數(shù)據(jù)驅(qū)動(dòng)

準(zhǔn)備工作
環(huán)境準(zhǔn)備
安裝CukeTest:下載地址為:https://www.cuketest.com/
啟動(dòng)ERP演示系統(tǒng)(CukeTest自帶):在CukeTest主窗口的
工具
菜單下,點(diǎn)擊啟動(dòng)Web樣例
?-?DemoErp
,通過本機(jī)瀏覽器打開ERP應(yīng)用。默認(rèn)的用戶名admin
、密碼admin
。將網(wǎng)址復(fù)制下來(lái)。
創(chuàng)建項(xiàng)目
打開CukeTest,使用"Web"模板創(chuàng)建一個(gè)項(xiàng)目,項(xiàng)目名稱為"orders"。 "Web" 模板提供了Web界面測(cè)試相關(guān)的Feature文件、代碼和 npm 包。


快速開發(fā)
設(shè)計(jì)操作流程
登錄后ERP頁(yè)面中的全部訂單就是本次要測(cè)試的功能模塊。觀察這個(gè)簡(jiǎn)單的頁(yè)面,可以很快的設(shè)計(jì)出來(lái)一個(gè)基本的測(cè)試流程,共四步:
進(jìn)入訂單管理平臺(tái):最基本的登錄操作。允許登錄不同的賬號(hào)。
訂單錄入:自動(dòng)填寫表單并提交。
驗(yàn)證訂單錄入結(jié)果:查驗(yàn)訂單檢查是否有被正確錄入。
刪除訂單:刪除指定的訂單。
錄制Web操作
測(cè)試用例設(shè)計(jì)好后,可以通過CukeTest的錄制功能,將用例中的步驟操作錄制為自動(dòng)化腳本??梢試L試一次性錄制完一個(gè)完整的操作流程,即:
登錄
新建訂單
填寫訂單
刪除訂單
錄制一個(gè)閉環(huán)的自動(dòng)化流程好處非常多,最直觀的好處就是可以重復(fù)運(yùn)行,每次運(yùn)行都會(huì)把新建的測(cè)試數(shù)據(jù)(第2步)刪除(第4步)。
那么現(xiàn)在只需要啟動(dòng)錄制,然后手動(dòng)執(zhí)行一遍上面的操作流程即可。
首先,在主界面點(diǎn)擊錄制設(shè)置,將被測(cè)網(wǎng)頁(yè)的URL填進(jìn)去(也可以先不填寫,開始錄制后在瀏覽器地址欄手動(dòng)輸入即可),就可以開始錄制。

進(jìn)入錄制后,鼠標(biāo)懸停在頁(yè)面中可以看到該網(wǎng)頁(yè)元素的選擇器Selector
,并且用紅色背景標(biāo)記該元素的區(qū)域,接著對(duì)該元素的操作都會(huì)被錄制下來(lái)并生成相應(yīng)的操作代碼,無(wú)論是鼠標(biāo)點(diǎn)擊還是鍵盤輸入。
錄制時(shí)的界面如下:

完成流程操作后,我們會(huì)得到一段這樣的代碼(注釋有刪改):
錄制生成的腳本可以直接點(diǎn)擊【運(yùn)行腳本】來(lái)回放,如果需要減緩回放的速度來(lái)觀察操作過程,可以在chromium.lauch()
方法中指定一個(gè)slowMo
屬性,單位為毫秒(ms):

改進(jìn)代碼
上面一個(gè)階段完成后,我們有了一份可執(zhí)行的Javascript代碼,已經(jīng)可以完成進(jìn)行特定場(chǎng)景的測(cè)試了。但是錄制的代碼只能完成既定的操作序列,不方便對(duì)運(yùn)行過程做靈活的調(diào)整;使用起來(lái)也不夠高效,無(wú)法在測(cè)試過程中使用不同的參數(shù),也無(wú)法直接生成測(cè)試報(bào)告。
怎么做才能避免以上問題,從而更好地完成自動(dòng)化測(cè)試任務(wù)呢?
對(duì)于這個(gè)問題,我們建議使用場(chǎng)景來(lái)管理腳本,而這需要以一定的格式來(lái)組織腳本來(lái)將場(chǎng)景與腳本匹配起來(lái)。 通過這種方式組織錄好的腳本有以下好處:
使用場(chǎng)景來(lái)管理可以保證當(dāng)測(cè)試項(xiàng)目變大也不會(huì)變得混亂,每個(gè)場(chǎng)景、每個(gè)步驟間的作用域隔離,內(nèi)部不會(huì)產(chǎn)生數(shù)據(jù)錯(cuò)亂。
進(jìn)一步拆分為步驟后還可以使用參數(shù)化、數(shù)據(jù)驅(qū)動(dòng)等測(cè)試功能,并借助CukeTest提供的各種粒度的執(zhí)行來(lái)調(diào)試。
可以使用各種Hook來(lái)在各個(gè)運(yùn)行的特定時(shí)間點(diǎn)插入操作腳本,如截圖、清理、校驗(yàn)等常用的測(cè)試操作。
運(yùn)行結(jié)束后可以看到運(yùn)行報(bào)告,運(yùn)行過程中的所有結(jié)果都會(huì)在報(bào)告中用圖表信息一并呈現(xiàn),方便工程師查看測(cè)試情況。
下面,我們分3個(gè)步驟來(lái)實(shí)現(xiàn):
格式改造
參數(shù)化處理
實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)
格式改造
對(duì)測(cè)試方法比較熟悉的讀者應(yīng)該已經(jīng)發(fā)現(xiàn),這個(gè)格式其實(shí)就是行為驅(qū)動(dòng)開發(fā)(Behavior Drive Development)測(cè)試的格式。因此我們首先需要將一開始定義的測(cè)試流程,變?yōu)橐粋€(gè)劇本文件: 打開項(xiàng)目中的劇本文件feature1.feature
編寫這幾個(gè)場(chǎng)景的測(cè)試用例:
登錄
新建訂單
填寫訂單
刪除訂單
編輯測(cè)試用例時(shí)可以點(diǎn)擊劇本區(qū)域右上角將 CukeTest 切換到文本界面,直接將如下代碼復(fù)制進(jìn)去。
在“訂單錄入”這個(gè)場(chǎng)景中,由于需要表單中填寫的數(shù)據(jù)較多,因此將數(shù)據(jù)維護(hù)在Excel文件中,在填寫時(shí)讀取出來(lái)寫進(jìn)表單里。
在可視模式下打開feature文件,點(diǎn)擊步驟后面的灰色按鈕,會(huì)自動(dòng)為該步驟生成自動(dòng)化腳本樣例,并且按鈕顏色從灰色變?yōu)槌壬?/p>
在 CukeTest 中,若此按鈕以灰色顯示,表示沒有匹配的步驟定義。一旦有了匹配的步驟定義,按鈕顏色將會(huì)改變,標(biāo)識(shí)新的狀態(tài),如果有匹配的步驟定義且定義未實(shí)現(xiàn),會(huì)顯示橙色;如果匹配的步驟定義已經(jīng)實(shí)現(xiàn),則為綠色。


步驟腳本生成后,將前面錄制好的自動(dòng)化操作代碼放到對(duì)應(yīng)的步驟腳本中,并刪除return 'pending';
腳本,效果如下:
運(yùn)行項(xiàng)目&獲得報(bào)告
將錄制的腳本放入新的步驟定義腳本中后,就可以作為項(xiàng)目運(yùn)行了。點(diǎn)擊界面上的“運(yùn)行項(xiàng)目”按鈕,可以看到項(xiàng)目順利啟動(dòng),執(zhí)行的操作并沒有發(fā)生變化,但是運(yùn)行結(jié)束后生成了一分運(yùn)行報(bào)告,如下:

這個(gè)報(bào)告中詳細(xì)的記錄了每個(gè)步驟的結(jié)果和狀態(tài),并且可以點(diǎn)開查看更加具體的信息。
參數(shù)化處理
雖然目前項(xiàng)目可以運(yùn)行了,也能夠看到運(yùn)行報(bào)告了,是否任務(wù)就完成了呢?答案是否定的,但是距離終點(diǎn)已經(jīng)不遠(yuǎn)了。 仔細(xì)觀察上面的步驟定義腳本可以發(fā)現(xiàn),劇本的步驟中,使用雙引號(hào)"
包括的字符串變?yōu)榱?code>{string},而這正是CukeTest對(duì)步驟描述的參數(shù)化處理。簡(jiǎn)單來(lái)說(shuō),就是步驟中的字符串會(huì)被作為傳入到后面腳本中的參數(shù)被解析,也就是步驟定義中的arg*
參數(shù),接著你可以在腳本中使用這些參數(shù),以完成靈活的步驟配置。
并且這個(gè)arg*
參數(shù)可以修改為任何你喜歡的變量名,比如下面的“登錄”步驟中的arg1
和arg2
參數(shù)分別代表的是用戶名和密碼,所以可以將其命名為user
和pwd
,下面的腳本中也都是使用此變量名來(lái)編寫的,并且直接將參數(shù)應(yīng)用到腳本中。
我們可以還可以進(jìn)一步優(yōu)化選擇器,將選擇器[placeholder="用戶名: admin or user"]
和[placeholder="密碼: admin"]
,替換成各自輸入框的id
選擇器,則可以寫作:
其它來(lái)源的參數(shù)
了解了步驟描述中的參數(shù)含義,那我們回到“新建訂單”這個(gè)步驟,由于這一步需要將大量數(shù)據(jù)填入到表單中,如果將這些數(shù)據(jù)全部寫在步驟中,那么步驟會(huì)變得非常的長(zhǎng)而且難以復(fù)用。
因此這里選擇將完整數(shù)據(jù)放在一個(gè)Excel文件中(當(dāng)然也可以選擇txt文件或csv文件);這樣在步驟描述里只需要再引入一個(gè)索引值就行,這里選擇的是“訂單編號(hào)”。為了實(shí)現(xiàn)這個(gè)目的,我們需要編寫讀取Excel文件和根據(jù)訂單號(hào)索引數(shù)據(jù)的腳本,借助CukeTest提供的xlsx讀寫庫(kù)可以快速的完成:
其中
filepath
是Excel文件的路徑,orderNo
是訂單號(hào)。而得到的orderData
是Excel中的所有數(shù)據(jù),order
是目標(biāo)訂單的數(shù)據(jù)。
結(jié)合到已有的步驟定義中,就可以寫作:
readXlsx()
方法、formatExcelTime()
是樣例中的自定義函數(shù),具體函數(shù)實(shí)現(xiàn)可以查看學(xué)習(xí)樣例orders
中的utils.js
文件。
到這一步,最困難的一步已經(jīng)邁過,目前的項(xiàng)目已經(jīng)非常完備。但如果需要讓這個(gè)項(xiàng)目真正的代替測(cè)試工作、提高測(cè)試效率,還需要最后一步改進(jìn)——數(shù)據(jù)驅(qū)動(dòng)。
實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)
無(wú)論是測(cè)試需求還是日常工作需求,都要求能夠錄入多條訂單,我們引入場(chǎng)景大綱這個(gè)功能。
所謂場(chǎng)景大綱是一種特殊的場(chǎng)景類型,通過定義一張示例表,場(chǎng)景大綱會(huì)自動(dòng)使用表中的參數(shù)來(lái)運(yùn)行。以下是步驟:
1. 右鍵單擊場(chǎng)景“訂單錄入”的標(biāo)題,選擇“更改場(chǎng)景類型”=>“場(chǎng)景大綱”:這時(shí)步驟中的參數(shù)都會(huì)被匯總到一張表中,我們稱作示例表,是場(chǎng)景大綱運(yùn)行時(shí)的依據(jù)。
2. (可選)更新步驟和示例表中的參數(shù)名稱:為了讓步驟和數(shù)據(jù)表更易讀,可以將默認(rèn)的param*
參數(shù)名改成合適的名稱:
在步驟文本和表格標(biāo)題中將“param2”更改為“orderNo”。
刪除
param1
列。
由于Excel文件路徑是固定的,因此可以刪除掉
param1
列來(lái),減少示例表的維護(hù)數(shù)量。
3. 填充更多數(shù)據(jù):將更多數(shù)據(jù)行添加到示例表中。雙擊表格主體,按Tab鍵直到導(dǎo)航到新行,然后填充一些新數(shù)據(jù)。編輯完成后,整個(gè)場(chǎng)景如下:

你也可點(diǎn)擊劇本區(qū)域右上角將 CukeTest 切換到文本界面,直接將如下代碼復(fù)制進(jìn)去:
這時(shí),如果再次運(yùn)行項(xiàng)目,就可以看到批量生成的場(chǎng)景運(yùn)行結(jié)果:

至此,你就可以通過增加示例表的內(nèi)容來(lái)完成任意多的訂單錄入工作,真正的解放雙手。

正確性保障
當(dāng)然啦,無(wú)論是用自動(dòng)化代替重復(fù)勞動(dòng),還是用自動(dòng)化測(cè)試保證軟件質(zhì)量,都需要保證操作的正確性,這需要我們加入更多的代碼,包括:
驗(yàn)證訂單錄入結(jié)果:應(yīng)該錄入的訂單必須成功錄入;不應(yīng)該錄入的訂單必須錄入失敗。
驗(yàn)證訂單刪除結(jié)果:只刪除目標(biāo)訂單,而不會(huì)刪除掉不相關(guān)的訂單。
截圖或錄屏留檔:在錄制整個(gè)運(yùn)行過程,由于Web自動(dòng)化操作速度較快,還可以在每個(gè)場(chǎng)景結(jié)束后截圖顯示在報(bào)告中。
對(duì)于前兩個(gè)功能的實(shí)現(xiàn)可以查看學(xué)習(xí)樣例orders
中的源碼,第三個(gè)功能可以借助CukeTest提供的API快速完成。
截圖和錄屏
屏幕截圖和錄像對(duì) UI 測(cè)試很有幫助,這使測(cè)試人員確信自動(dòng)化確實(shí)在做期望的工作。
如果希望在場(chǎng)景結(jié)束時(shí)抓取瀏覽器截圖,借助CukeTest左側(cè)“工具箱”標(biāo)簽頁(yè)提供的After Hook
可以非常輕松的寫出來(lái),將“Cucumber” -> “After(function(){})
”拖拽到步驟定義的空白處,代碼如下:
錄屏就跟家簡(jiǎn)單了,在 CukeTest 中,你還可以通過啟動(dòng)運(yùn)行配置中的“錄制視頻”選項(xiàng),在測(cè)試運(yùn)行期間錄制視頻。

總結(jié)
軟件測(cè)試是軟件質(zhì)量保證的關(guān)鍵,直接影響軟件的質(zhì)量評(píng)價(jià)。而ERP系統(tǒng)伴隨著業(yè)務(wù)規(guī)模擴(kuò)大,會(huì)變成體量大、流程復(fù)雜的龐大軟件,無(wú)論是其質(zhì)量保障還是自動(dòng)化都是一種挑戰(zhàn),而CukeTest正是對(duì)抗這種挑戰(zhàn)的工具。
CukeTest作為一站式界面自動(dòng)化測(cè)試工具,不僅支持Windows、Qt、移動(dòng)端,還內(nèi)置了Web庫(kù),可以實(shí)現(xiàn)端到端的腳本錄制和回放,讓W(xué)eb自動(dòng)化輕松完成。 如果你對(duì)CukeTest產(chǎn)品有興趣,歡迎下載體驗(yàn)。如果希望試用全功能版的CukeTest產(chǎn)品,可以聯(lián)系我們申請(qǐng)?jiān)囉谩?/p>