每個測試用例單獨執行的時候,都不會有任何問題,但是兩個放在一起執行的時候,問題就來了,兩個用例創建了同名的文章,這樣就直接導致測試結果的不穩定。為了解決這個問題,也許有人會創建一個隨機生成文章標題的幫助類(Helper Class),這種編碼的難度很大,因為需要確保文章的標題永遠是唯一的(或許可以考慮Guid?)。
2. 節省測試的時間,在用例中執行過多的步驟也會增加測試時間。雖然測試團隊都會在晚上批量執行自動化測試用例,但是在產品開發的過程當中,測試用例通過率不能達到100%是很正常的。對于每一個失敗的測試用例,測試人員都要分析失敗的原因—判斷是產品的缺陷導致的,還是由于測試代碼本身的問題引起的。額外的測試步驟也會相應地增加測試人員分析失敗的時間(一般測試人員都會重新執行一遍測試代碼來找出問題原因)。
3. 增加不必要的測試用例失敗,測試可以分好幾塊,一種是功能測試,也就是驗證產品的功能是否可以正常工作;一種是壓力測試,即測試產品在極端情況下的執行情況;還有其他的例如性能測試,國際化測試等等。一般來說,不同的測試都會有自己的自動化測試用例集合。如果在功能測試當中,用例代碼在系統里面添加了很多冗余數據,執行的測試用例多了,必然導致網站的性能和反應速度會有所下降。而在測試代碼中,一般都會在執行一步操作以后,等待一段時間—等網頁的內容刷新。網站反應速度的下降,直接導致測試失敗。例如本來在編寫測試代碼的時候,3秒鐘肯定會刷新的網頁,在測試執行的環境中,因為過多的冗余數據,30秒可能都打不開一個網頁。當然啦,網站反應速度的下降肯定是產品代碼的缺陷,但是不應該將壓力測試和功能測試混合起來做。
因此,我個人建議,在測試過程中,例如前面舉的評論功能的測試中,完全可以事先在網站的數據庫中先創建好一篇或多篇專門用來做評論測試的文章。而每天晚上,在大規模執行自動化測試用例之前,編寫一個小的腳本,將網站的數據庫替換成這個基準數據庫。
又比如,為了測試用戶權限管理的功能,完全可以事先在網站的數據庫當中先準備好一個管理員帳號,這個管理員帳號和密碼可以當作一個常量,然后測試代碼里都使用這個帳號來執行權限管理的測試。例如下面的代碼:
public class Consts { public const string TimeToWaitForPageToLoad = "30000";
public const string AdminUserName = "administrator";
public const string AdminPassword = "0123456"; }
public class UserHelper : UIHelperBase { public UserHelper(TestLibrary settings) : base(settings) { }
public void LogOnAsAdmin() { LogOn(TestLibrary.Consts.AdminUserName, TestLibrary.Consts.AdminPassword); }
public void LogOn(string username, string password) { if (String.IsNullOrEmpty(username)) throw new CaseErrorException(new ArgumentNullException("username")); if (String.IsNullOrEmpty(password)) throw new CaseErrorException(new ArgumentNullException("password"));
selenium.Open("/"); Thread.Sleep(2000); if (selenium.IsElementPresent("link=Log On")) { selenium.Click("link=Log On"); } if (selenium.IsElementPresent("link=Login")) { selenium.Click("link=Login"); } selenium.WaitForPageToLoad(TestLibrary.Consts.TimeToWaitForPageToLoad); selenium.Type("username", username); selenium.Type("password", password); selenium.Click("//input[@value='Log On']"); selenium.WaitForPageToLoad(TestLibrary.Consts.TimeToWaitForPageToLoad); } } |