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