ultraedit26 运行的是试用模式_如何并行运行你的自动化测试?
? 在自動(dòng)化測(cè)試過(guò)程中的某些時(shí)刻,你將遇到一個(gè)共同的問(wèn)題,那就是:需要花費(fèi)很長(zhǎng)時(shí)間去執(zhí)行大量的UI自動(dòng)化測(cè)試用例。最為有效地加速用例執(zhí)行的方式就是并行地運(yùn)行自動(dòng)化測(cè)試。不幸地是,使各個(gè)自動(dòng)化測(cè)試用例并行地執(zhí)行并非一件容易的事情。典型地,線程安全就沒(méi)有融入到自動(dòng)化測(cè)試中去。線程安全可以確保代碼編寫(xiě)完成后,程序可以運(yùn)行并操作各種數(shù)據(jù)結(jié)構(gòu)而不產(chǎn)生意想不到的結(jié)果。
為了測(cè)試可以并行地運(yùn)行,需要滿足一些強(qiáng)制性的要求。這些要求同我們的一些客戶每天用來(lái)幫助運(yùn)行五萬(wàn)條自動(dòng)化測(cè)試用例所需的條件相同。四個(gè)強(qiáng)制要求如下:
1.測(cè)試必須是原子的
你的自動(dòng)化測(cè)試用例應(yīng)該形成一個(gè)單一的不能簡(jiǎn)化的單元。這就意味著你的測(cè)試必須極其集中并且每個(gè)測(cè)試用例只做一件事。一個(gè)單獨(dú)的自動(dòng)化測(cè)試用例應(yīng)該不能測(cè)試端到端的功能。
在我的團(tuán)隊(duì)中使用的一個(gè)比較好的經(jīng)驗(yàn)辦法就是:自動(dòng)化驗(yàn)收測(cè)試在你本地資源上運(yùn)行的時(shí)間不能超過(guò)一分鐘,實(shí)際上當(dāng)然是運(yùn)行越快越好,但是也不要太著急、慢慢來(lái),可以逐步改進(jìn)運(yùn)行時(shí)間。如果你的測(cè)試用例運(yùn)行時(shí)間超過(guò)一分鐘,那將是很危險(xiǎn)的事。
有一個(gè)例子,在這個(gè)存儲(chǔ)庫(kù)中可用的非原子測(cè)試(NAT)。本篇文章將自始至終地引用此測(cè)試庫(kù)中的內(nèi)容。
原子測(cè)試可以快速失敗
為什么要使用原子測(cè)試?首先,它讓你盡早地快速地失敗。這就意味著你將得到及其快速的有針對(duì)性的反饋。如果你想檢查一個(gè)特征功能的狀態(tài),原子測(cè)試只會(huì)花費(fèi)你不到一分鐘的時(shí)間就能讓你拿到結(jié)果。
原子測(cè)試可以降低薄片行為
第二,寫(xiě)原子測(cè)試用例減少了薄片,因?yàn)樗档土藴y(cè)試過(guò)程中可能出現(xiàn)的斷點(diǎn)數(shù)量。薄片是自動(dòng)化測(cè)試領(lǐng)域的一個(gè)概念,它是指測(cè)試展示出一種無(wú)效的測(cè)試結(jié)果,例如原本失敗的用例結(jié)果顯示通過(guò)了或者原本通過(guò)的用例結(jié)果顯示失敗了。一個(gè)沒(méi)有薄片的自動(dòng)化測(cè)試是一個(gè)可以正確傳達(dá)系統(tǒng)狀態(tài)的測(cè)試---無(wú)論被測(cè)系統(tǒng)是否正常運(yùn)行。
原子測(cè)試考慮到了更好的測(cè)試
原子測(cè)試第三點(diǎn)好處就是一旦一個(gè)原子用例失敗了,它不會(huì)阻止你進(jìn)行其他功能的測(cè)試。比如,一個(gè)普通測(cè)試在第25行失敗了,假如你不手動(dòng)執(zhí)行測(cè)試用例去驗(yàn)證剩余的功能話,那么在25行之后的功能點(diǎn)都不會(huì)被測(cè)試到。所造成的結(jié)果就是,如果你正進(jìn)行大范圍的測(cè)試,由于有一些特性沒(méi)有被測(cè)試到,實(shí)際上就降低了測(cè)試覆蓋率。
下圖是一個(gè)從上面的測(cè)試集中摘取的原子測(cè)試用例,如果這個(gè)用例失敗了,你仍然可以接著測(cè)試其他功能點(diǎn),這樣整個(gè)測(cè)試過(guò)程不會(huì)中斷,自然也不會(huì)影響到測(cè)試覆蓋率。
2.測(cè)試必須是自主的
一個(gè)自主的自動(dòng)化測(cè)試是指測(cè)試本身并不依賴其他測(cè)試的結(jié)果。一種常見(jiàn)的反面模式就是將所有的用例連接到一起執(zhí)行以避免重復(fù)執(zhí)行一些測(cè)試步驟,這種反面模式是從加速執(zhí)行測(cè)試集演變而來(lái)的。
例如,你要先執(zhí)行登陸測(cè)試、再執(zhí)行搜索測(cè)試、最后執(zhí)行結(jié)算測(cè)試。為了進(jìn)行結(jié)算場(chǎng)景的測(cè)試,所有的測(cè)試項(xiàng)目都應(yīng)該按照正確的順序進(jìn)行。
這對(duì)于平行化來(lái)說(shuō)就是一個(gè)很大的挑戰(zhàn)了,因?yàn)樗馕吨愕臏y(cè)試永遠(yuǎn)不可能失序的進(jìn)行。如果不按順序執(zhí)行第一步到第三步,那測(cè)試結(jié)果將失---但是這種失敗并不是因?yàn)閼?yīng)用系統(tǒng)里有BUG,而是設(shè)計(jì)邏輯本該如此,是因?yàn)榻Y(jié)算的場(chǎng)景里需要一個(gè)已登錄的用戶,而具體測(cè)試時(shí)由于打亂了三步的順序致使登陸操作是失敗的。
3.正確管理你的測(cè)試數(shù)據(jù)
測(cè)試數(shù)據(jù)的管理對(duì)完成并行測(cè)試來(lái)說(shuō)是非常關(guān)鍵的。管理測(cè)試數(shù)據(jù)最為有效的方式就是使用實(shí)時(shí)數(shù)據(jù)。這就意味著你在測(cè)試過(guò)程中有很多種方式來(lái)創(chuàng)造和銷(xiāo)毀數(shù)據(jù)。一個(gè)RESTFUL風(fēng)格的API接口可以實(shí)現(xiàn)這一功能,并且這是最優(yōu)的方法。
遺憾的是:在我的WEB應(yīng)用里沒(méi)有現(xiàn)成的RESTFUL風(fēng)格的API可供使用。因此,我和開(kāi)發(fā)人員一起合作,容許JavaScript注入來(lái)控制應(yīng)用程序的狀態(tài)和數(shù)據(jù)。這樣我們測(cè)試團(tuán)隊(duì)就可以解決如何在不需要事先登陸、搜索商品、添加商品到購(gòu)物車(chē)的情況下進(jìn)行購(gòu)物車(chē)結(jié)算了。
通過(guò)適當(dāng)?shù)臏y(cè)試數(shù)據(jù)管理,我可以直接打開(kāi)購(gòu)物車(chē)頁(yè)面。結(jié)果就是我可以旁路掉/忽略掉登陸頁(yè)面和搜索商品頁(yè)面。如下圖所示我注入了一個(gè)用戶和一個(gè)商品到購(gòu)物車(chē)?yán)?#xff1a;
現(xiàn)在我就可以使用應(yīng)有程序的UI界面來(lái)完成結(jié)算過(guò)程并且測(cè)試這一功能是否OK,如下圖:
最后,這種方式能夠讓你有能力旁路掉/忽略掉應(yīng)用系統(tǒng)中任何與測(cè)試無(wú)關(guān)的UI界面。在你使用API或者JavaScript操作應(yīng)用程序的狀態(tài)后,你就可以使用任意的UI自動(dòng)化工具執(zhí)行相關(guān)的測(cè)試步驟。
4.不能使用靜態(tài)關(guān)鍵字
這里有一個(gè)一般性的經(jīng)驗(yàn)法則:在你的自動(dòng)化代碼里不要使用靜態(tài)關(guān)鍵字。這既是最簡(jiǎn)單的需要遵循的規(guī)則,同時(shí)也是最危險(xiǎn)的。
在面向?qū)ο蟮某绦蛟O(shè)計(jì)語(yǔ)言中一個(gè)靜態(tài)關(guān)鍵字會(huì)要求程序在代碼運(yùn)行期間內(nèi)給一個(gè)變量分配一個(gè)單獨(dú)的內(nèi)存空間,這就意味代碼運(yùn)行期間這個(gè)空間的內(nèi)容不能改變。任何使用靜態(tài)變量的程序都將信息存儲(chǔ)在單獨(dú)的內(nèi)存空間里。
一個(gè)單一的錯(cuò)位的靜態(tài)關(guān)鍵字實(shí)例會(huì)毀掉你所有并行測(cè)試的希望。也許這個(gè)經(jīng)驗(yàn)法則(指“不要使用靜態(tài)關(guān)鍵字”)會(huì)有很多例外情況,但是確保安全總比意外發(fā)生后懊悔不已好得多。
例如,在你的瀏覽器中創(chuàng)建一個(gè)靜態(tài)的瀏覽器驅(qū)動(dòng)關(guān)鍵字,當(dāng)你嘗試并行地運(yùn)行所有測(cè)試用例時(shí),這些用例都將嘗試使用唯一的瀏覽器驅(qū)動(dòng)。就會(huì)造成一種局面:一個(gè)用例正在準(zhǔn)備鍵入賬號(hào)密碼時(shí),另一個(gè)用例嘗試打開(kāi)一個(gè)不同的頁(yè)面等等,結(jié)果這些用例會(huì)將瀏覽器驅(qū)動(dòng)實(shí)例帶到不同的方向上去,最終造成各種稀奇古怪的錯(cuò)誤。
使測(cè)試又快又準(zhǔn)確
自動(dòng)化需要快速地進(jìn)行才能發(fā)揮它的作用,同時(shí)并行測(cè)試是快速執(zhí)行完測(cè)試用例的一種最好的方式。但是并行運(yùn)行自動(dòng)化測(cè)試的時(shí)候,你需要原子的、非依賴性的用例,并且這些用例里不能包含任何靜態(tài)關(guān)鍵字,并且你需要正確地管理測(cè)試數(shù)據(jù)集。
推薦閱讀點(diǎn)擊閱讀?“肉癮”女孩從軟件測(cè)試工程師到主管的成長(zhǎng)感悟
點(diǎn)擊閱讀?2019年前5大Java自動(dòng)化測(cè)試框架
點(diǎn)擊閱讀?使用TestCafe進(jìn)行Web自動(dòng)化測(cè)試
點(diǎn)擊閱讀?自動(dòng)化測(cè)試和手工測(cè)試結(jié)果匯總小實(shí)踐
點(diǎn)擊閱讀?2019年你不得不知的測(cè)試自動(dòng)化新趨勢(shì)……
戳愛(ài)我請(qǐng)給我好看!總結(jié)
以上是生活随笔為你收集整理的ultraedit26 运行的是试用模式_如何并行运行你的自动化测试?的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: spring bean的创建,生命周期
- 下一篇: Nodejs读写Json文件