一 驗收測試
驗收測試的最終目標就是為了驗證應用程序是否提供了用戶所需要的功能。這在單元測試中是體現(xiàn)不出來的,單元測試只是驗證了代碼的某一部分是按照開發(fā)人員的思路運行的。所以去做驗收測試是很有必要的塌衰,對于每一個驗收測試來說,只有其滿足了驗收從條件(功能和非功能性的)注祖,我們才能確定我們真的完成了當前這一用戶故事或需求猾蒂。 驗收測試階段的工作流程:
對項目進行驗收測試是必不可少的,而相對于手工測試來說是晨,自動化驗收測試應該是我們的首先肚菠,它可以帶來:
- 通過合理的創(chuàng)建和維護自動化驗收測試套件,其成本遠小于手工驗收
- 發(fā)布高質(zhì)量軟件
二 創(chuàng)建自動化驗收測試
1罩缴、分析人員和測試人員的角色
理想狀況下蚊逢,每個項目開發(fā)團隊中都應該有專門的分析人員和測試人員层扶,而且分析人員在團隊中起著非常重要的作用
- 與客戶一起識別需求,排定優(yōu)先級
- 與開發(fā)人員一起工作烙荷,對開發(fā)人員進行指導镜会,確保開發(fā)人員能改很好的理解應用程序從而交付真正有價值的用戶故事
- 與測試人員一起工作,確保測試人員開發(fā)的驗收條件被合理的闡明出來
但在真實的情況下终抽,很多的項目團隊并沒有專業(yè)的分析人員和測試人員戳表,那么這種情況下,開發(fā)人員便應該去做分析人員的工作或者是測試人員去做分析人員的工作昼伴,又或者團隊在一起擔任分析人員的角色匾旭。
2、迭代開發(fā)項目中的分析工作
迭代開發(fā)的核心就是部署流水線線圃郊,即“在任何時候都可以讓應用程序運行在選定的環(huán)境上”价涝,為了達成這一目的。分析人員和測試人員應該積極的協(xié)作一起編寫有效的驗收測試持舆,編寫完成后應該和客戶進一步的確定色瘩,避免扭曲了用戶的需求。而開發(fā)人員在分析需求時也應該積極且頻繁的去詢問分析人員逸寓。
3居兆、將驗收條件變成可執(zhí)行的規(guī)格說明書
既然是迭代開發(fā)的項目,那么也就意味著需求的變動也會比較頻繁竹伸,那么需求規(guī)格說明書的編寫者便會非常的痛苦了史辙。所以行為驅(qū)動開發(fā)(BDD)的理念就誕生了,即驗收測試應該以用戶期望的應用程序行為的方式來書寫佩伤。也就是說我們應該把驗收條件直接在應用程序上編寫并運行,這樣就可以很好的驗證其是否滿足規(guī)格說明了晦毙。
4生巡、應用程序驅(qū)動層
程序應用驅(qū)動層是一個知道如何與應用程序(即被測試的系統(tǒng))打交道的層次。應用程序驅(qū)動層所用的 API 是以某種領域語言表達的见妒,可以認為是一種針對它自己的領域?qū)僬Z言孤荣。
DSL(Domain-Specific Language,領域?qū)僬Z言)是一種計算機編程語言须揣,用于解決某個具體問題域的某個問題盐股,它與通用編程語言不同,因為它無法像通用編程語言那樣可以解決很多類型的問題耻卡,它專門為解決某個專屬問題域的問題而設計疯汁。
DSL 分為兩種:內(nèi)部的和外部的,外部的 DSL 在其指令被執(zhí)行之前就需要明確的解析卵酪。而內(nèi)部的 DSL 需要直接在代碼中表達幌蚊。
5谤碳、窗口驅(qū)動器模式,讓測試和 GUI 解耦
窗口驅(qū)動器模式是通過提供一個抽象層(相應的測試工具)溢豆,減少驗收測試和被測試系統(tǒng) GUI 之間的耦合蜒简。這樣我們在對 UI 進行了修改后,只需要對窗口驅(qū)動器做相應的應該即可漩仙,不需要去修改測試搓茬。
三 實現(xiàn)驗收測試
1、驗收測試中的狀態(tài)
由于驗收測試要模擬用戶在真實的應用場景下與系統(tǒng)進行交互队他,那么這個時候便會建立并依賴系統(tǒng)中所管理的狀態(tài)信息卷仑,這也就是說在進行測試前,系統(tǒng)就應可處于一個特定的已知狀態(tài)漱挎。面對這種情況系枪,我們應該去編寫一組腳本(存儲在版本庫中)用于初始化當前的狀態(tài)。其次我們應該讓我們的測試具有原子性的(創(chuàng)建自己的初始條件磕谅,結(jié)束時將環(huán)境清理干凈)私爷,保證每個測試都盡量的和其它的測試隔離。從而可以得到快速的反饋膊夹。
2衬浑、過程邊界、封裝和測試
盡量避免為了方便測試而去編寫后門放刨。
3工秩、管理異步與超時問題
4、使用測試替身對象
四 驗收測試階段
1进统、確保驗收測試一直處于通過狀態(tài)
2助币、部署測試
驗收測試的環(huán)境應該盡量和生產(chǎn)環(huán)境保持一致,或者使用虛擬技術來模擬生產(chǎn)環(huán)境螟碎。在部署測試前我們應選擇運行一次冒煙測試用來證明我們的配置環(huán)境是否和期望一致眉菱。一旦部署測試失敗,我們應該讓整個驗收測試失敗掉分。
五 驗收測試的性能
1俭缓、重構通用任務
比如設計測試共用的 API
2、共享昂貴資源
比如在創(chuàng)建一個空白的應用程序?qū)嵗止瑢⑼ㄓ玫膶嵗M行統(tǒng)一的創(chuàng)建华坦,最后統(tǒng)一的銷毀。
3不从、并行測試