原創(chuàng)|使用教程|編輯:鄭恭琳|2020-05-27 15:06:07.070|閱讀 524 次
概述:連續(xù)運(yùn)行自動(dòng)化測(cè)試似乎很容易。CI系統(tǒng)是關(guān)鍵,可為敏捷開(kāi)發(fā)團(tuán)隊(duì)提供對(duì)其應(yīng)用程序運(yùn)行狀況的及時(shí)可見(jiàn)性。如果自動(dòng)測(cè)試通過(guò),則該應(yīng)用程序運(yùn)行狀況良好。如果測(cè)試失敗,則應(yīng)用程序會(huì)以某種方式損壞。還是?不幸的現(xiàn)實(shí)是,自動(dòng)化測(cè)試并不總是給我們這樣的信心,特別是在運(yùn)行Selenium測(cè)試時(shí)。
# 界面/圖表報(bào)表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
相關(guān)鏈接:
連續(xù)運(yùn)行自動(dòng)化測(cè)試似乎很容易。CI系統(tǒng)是關(guān)鍵,可為敏捷開(kāi)發(fā)團(tuán)隊(duì)提供對(duì)其應(yīng)用程序運(yùn)行狀況的及時(shí)可見(jiàn)性。如果自動(dòng)測(cè)試通過(guò),則該應(yīng)用程序運(yùn)行狀況良好。如果測(cè)試失敗,則應(yīng)用程序會(huì)以某種方式損壞。還是?不幸的現(xiàn)實(shí)是,自動(dòng)化測(cè)試并不總是給我們這樣的信心,特別是在運(yùn)行Selenium測(cè)試時(shí)。Selenium測(cè)試可能由于多種原因而失敗,無(wú)論應(yīng)用程序是否以任何方式損壞或更改。這些問(wèn)題在上一篇博客文章(UI測(cè)試自動(dòng)化:輕松擺脫Selenium問(wèn)題)中進(jìn)行了詳細(xì)介紹。在這里,我將說(shuō)明如何修改CI/CD管道以自動(dòng)解決這些問(wèn)題,從而提高對(duì)CI系統(tǒng)測(cè)試結(jié)果的信心。
CI/CD放大了Selenium測(cè)試問(wèn)題。讓我們看看這是怎么發(fā)生的。首先,開(kāi)發(fā)會(huì)進(jìn)行一些代碼更改。CI系統(tǒng)檢測(cè)到更改并觸發(fā)構(gòu)建管道。編譯模塊,運(yùn)行并通過(guò)單元測(cè)試(是!),然后打包應(yīng)用程序以進(jìn)行部署。接下來(lái),部署管道將觸發(fā)下一步,搭建測(cè)試環(huán)境,部署被測(cè)應(yīng)用程序,然后啟動(dòng)集成測(cè)試,其中許多測(cè)試是使用Selenium編寫(xiě)的。并非所有Selenium測(cè)試都通過(guò)了這一點(diǎn),CI系統(tǒng)會(huì)通過(guò)電子郵件將測(cè)試失敗通知各個(gè)人。這些人會(huì)做出反應(yīng),有時(shí)會(huì)花費(fèi)大量時(shí)間進(jìn)行調(diào)查和故障排除。產(chǎn)品所有者、經(jīng)理和其他相關(guān)方也可以在儀表板上看到故障,從而將注意力從其他方面轉(zhuǎn)移到其他方面。知道Selenium測(cè)試本身是不穩(wěn)定的,那么誰(shuí)能相信CI/CD報(bào)告了真正的回歸或缺陷?排查誤報(bào)浪費(fèi)了多少時(shí)間?
簡(jiǎn)單地改進(jìn)Selenium測(cè)試可能并非易事,有時(shí)涉及反復(fù)試驗(yàn),尤其是在問(wèn)題斷斷續(xù)續(xù)或難以重現(xiàn)時(shí)。從一個(gè)構(gòu)建到另一個(gè)構(gòu)建,可能會(huì)四處走動(dòng)的故障,沒(méi)有任何可歸咎的測(cè)試。它們可能是系統(tǒng)問(wèn)題,也可能是環(huán)境問(wèn)題。CI系統(tǒng)可以使用性能特性不一致的VM或基于云的執(zhí)行程序。測(cè)試在開(kāi)發(fā)人員工作站上運(yùn)行并通過(guò),但CI自動(dòng)化失敗。聽(tīng)起來(lái)有點(diǎn)耳熟?
開(kāi)發(fā)是為了幫助應(yīng)對(duì)此類挑戰(zhàn)。Selenic可以自動(dòng)分析和糾正Selenium測(cè)試問(wèn)題,提供對(duì)這些問(wèn)題的修復(fù)或洞察力,并在CI系統(tǒng)通知人類時(shí)使這些發(fā)現(xiàn)可用。負(fù)擔(dān)轉(zhuǎn)移到CI系統(tǒng),而不是對(duì)來(lái)自CI系統(tǒng)通知的人員做出反應(yīng)。僅需兩個(gè)簡(jiǎn)單的步驟,即可使用自動(dòng)完成將Selenium測(cè)試作為CI/CD管道的一部分進(jìn)行修復(fù)的過(guò)程。
要集成,您可以對(duì)現(xiàn)有的測(cè)試執(zhí)行腳本進(jìn)行單行更改。假設(shè)我在管道中有一個(gè)Maven執(zhí)行步驟正在驅(qū)動(dòng)基于Java的Selenium測(cè)試。通常,我指定兩個(gè)Maven目標(biāo):“清除”和“測(cè)試”,這兩個(gè)目標(biāo)作為命令行參數(shù)傳遞給Maven。在這里,您只是添加了一個(gè)額外的Maven命令行參數(shù):
-DargLine=-javaagent:${SELENIC_HOME}/selenic_agent.jar=selfHealing=true,sessionId=${BUILD_TAG}
在Jenkins CI中,這可能看起來(lái)像這樣:
現(xiàn)在,只要在“SELENIC_HOME”變量所引用的位置安裝并許可了Selenic,就可以將Selenic代理注入到測(cè)試執(zhí)行過(guò)程中。Selenic代理可以做各種事情,但是出于穩(wěn)定測(cè)試的目的,我僅啟用“自我修復(fù)”功能,該功能試圖實(shí)時(shí)識(shí)別和修復(fù)Selenium測(cè)試問(wèn)題。
要仔細(xì)考慮的一件事是您的Selenium測(cè)試是否全部存在于一個(gè)模塊中,或者是否存在多個(gè)模塊中的測(cè)試。通常出于組織目的將測(cè)試分為多個(gè)模塊。為了讓Selenic聚合來(lái)自多個(gè)測(cè)試模塊的信息,必須配置“sessionId”參數(shù)。在上面的示例中,我使用的是“BUILD_TAG”,它是Jenkins CI系統(tǒng)中的一個(gè)預(yù)定義變量,可以很好地實(shí)現(xiàn)此目的。無(wú)論使用哪種CI系統(tǒng),我的建議都是使用CI系統(tǒng)提供的變量來(lái)構(gòu)造唯一的會(huì)話標(biāo)識(shí)符。
進(jìn)行了單行更改后,Selenic會(huì)自動(dòng)識(shí)別并糾正測(cè)試穩(wěn)定性問(wèn)題,使每個(gè)人對(duì)CI系統(tǒng)發(fā)布的測(cè)試結(jié)果更有信心。但是,我建議再集成一個(gè)Selenic組件。
我們?nèi)绾沃?/span>Selenic發(fā)現(xiàn)了什么問(wèn)題或糾正了什么問(wèn)題?我應(yīng)該對(duì)Selenium測(cè)試進(jìn)行一些更改,以避免Selenic發(fā)現(xiàn)的問(wèn)題嗎?要獲取此信息,您可以將Selenic Analyzer運(yùn)行為管道中的另一個(gè)執(zhí)行步驟。這是第二個(gè)單行更改,但仍然微不足道:
java -jar $SELENIC_HOME/selenic_analyzer.jar -report target/selenic-reports -sessionId ${BUILD_TAG}
在Jenkins CI中,這可能看起來(lái)像這樣:
Selenic Analyzer收集早期由Selenic Agent記錄的信息,對(duì)數(shù)據(jù)執(zhí)行一些附加分析,然后構(gòu)建一些報(bào)告,然后由CI系統(tǒng)將其存檔。默認(rèn)情況下,分析器處理來(lái)自最新會(huì)話的信息,但出于魯棒性的考慮,我建議使用配置Selenic Agent時(shí)使用的相同值顯式配置“-sessionId”參數(shù)。
Selenic Analyzer默認(rèn)情況下將報(bào)告寫(xiě)入當(dāng)前工作目錄中。但是,為了使報(bào)告的歸檔更加容易,您應(yīng)該添加“-report”參數(shù)來(lái)指示Selenic將報(bào)告寫(xiě)入項(xiàng)目的構(gòu)建輸出目錄中的“selenic-reports”文件夾中。完成此操作后,您將在管道中再添加一個(gè)步驟來(lái)存檔“target/selenic-reports/**”:
現(xiàn)在,通過(guò)CI系統(tǒng),每個(gè)人都可以使用該報(bào)告文件。對(duì)于Jenkins CI,可以通過(guò)穩(wěn)定的URL方便地訪問(wèn)報(bào)告:
//{ci_server}/job/{test_job}/lastSuccessfulBuild/artifact/target/selenic-reports/report.html
//{ci_server}/job/{test_job}/lastSuccessfulBuild/artifact/target/selenic-reports/report.json
第一個(gè)URL指向可以在Web瀏覽器中直接查看的Selenic HTML報(bào)告。第二個(gè)URL指向JSON報(bào)告,開(kāi)發(fā)人員可以將其提供給Selenic IDE插件,以從上一次自動(dòng)測(cè)試運(yùn)行中導(dǎo)入建議。
Selenic還有許多其他選項(xiàng),您可以考慮根據(jù)測(cè)試環(huán)境和其他特定需求啟用它們。
Selenic記錄每個(gè)測(cè)試會(huì)話的數(shù)據(jù)。記錄的數(shù)據(jù)可作為知識(shí)庫(kù),使Selenic能夠隨著時(shí)間的推移學(xué)習(xí)并做出更好的自我修復(fù)決策和建議。默認(rèn)情況下,此數(shù)據(jù)存儲(chǔ)在執(zhí)行測(cè)試的計(jì)算機(jī)上。因此,如果您有一個(gè)執(zhí)行程序池,那么您希望此數(shù)據(jù)位于所有執(zhí)行程序都可以訪問(wèn)的共享文件夾中。可以通過(guò)將“data={path}”參數(shù)傳遞給Selenic Agent和將“-data {path}”參數(shù)傳遞給Selenic Analyzer來(lái)顯式配置數(shù)據(jù)位置,其中“{path}”將是共享文件夾的文件系統(tǒng)路徑。在Windows上,這可能是UNC路徑,例如\\HostName\SharedFolder。除非受到約束,否則記錄的數(shù)據(jù)還將無(wú)限期累積。最終可能導(dǎo)致高磁盤(pán)使用率。可以通過(guò)將“maxSessionDaysToKeep={num_days}”參數(shù)傳遞給Selenic代理來(lái)配置記錄的測(cè)試會(huì)話數(shù)限制。“{num_days}”是記錄數(shù)據(jù)的天數(shù),而不是日歷天。換句話說(shuō),Selenic不會(huì)計(jì)算沒(méi)有記錄測(cè)試會(huì)話數(shù)據(jù)的任何日子。如果不經(jīng)常地、以不固定的間隔運(yùn)行測(cè)試,或者由于服務(wù)器停機(jī)而導(dǎo)致您錯(cuò)過(guò)了幾天的運(yùn)行測(cè)試,這將很有幫助。
Selenic還可以配置為以各種粒度級(jí)別捕獲其他診斷信息。例如,可以將Selenic配置為捕獲每個(gè)Selenium操作或僅針對(duì)失敗操作的屏幕截圖。要啟用有關(guān)測(cè)試失敗的屏幕截圖,您可以將“screenshot= failures”參數(shù)傳遞給Selenic Agent。 Selenic Analyzer生成的HTML報(bào)告中提供了失敗的屏幕截圖。
的構(gòu)建旨在使用Selenium作為CI/CD的一部分來(lái)加速敏捷開(kāi)發(fā)。開(kāi)發(fā)人員和測(cè)試人員可以提高生產(chǎn)效率,減少追尋Selenium“幽靈”的時(shí)間,而將更多的時(shí)間用于處理真實(shí)事物。使用Selenic增強(qiáng)對(duì)Selenium測(cè)試結(jié)果的信心。。
本站文章除注明轉(zhuǎn)載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉(zhuǎn)載,但請(qǐng)務(wù)必注明出處、不得修改原文相關(guān)鏈接,如果存在內(nèi)容上的異議請(qǐng)郵件反饋至chenjj@fc6vip.cn