自動化測試之隨機化測試思想

發表于:2017-08-25來源:測試開發棧作者:測試開發棧點擊數: 標簽:自動化測試
自動化測試發展到今天,已經越來越平臺化和智能化了。就平臺化而言,我們可以在平臺上管理元素對象、管理用例、調度執行、生成結果和報告,從而讓我們寫的代碼中更多的只體現

自動化測試發展到今天,已經越來越平臺化和智能化了。
平臺化而言,我們可以在平臺上管理元素對象、管理用例、調度執行、生成結果和報告,從而讓我們寫的代碼中更多的只體現具體用例的實現邏輯,簡單畫個圖表示:


 


智能化而言,我們可以數據驅動測試,關鍵字驅動測試,自定義代碼模板,自動生成測試類和方法,基于模型測試等;

盡管有平臺化和智能化的支持,可是很多時候我們看到的UI自動化測試實際實現方式,仍停留在寫線性代碼,配置指定的專有測試數據,大量使用平臺提供的工具類,寫出的代碼就像流水線生產出來的一樣……這樣的代碼寫出來有時候自己都覺著不太靠譜(回歸自信心不足,還得手工來一遍),自然也存在測試環境和正式環境數據不同就導致測試失敗,界面UI更新自動化代碼改動范圍大等令人頭疼的“尖銳”問題。

在確定和實踐隨機化測試思想之前,我也經歷過上面的種種問題,代碼從最簡單的線性拼湊,到逐漸封裝、數據分離、剝離出框架,使用平臺……自然也遇到過種種數據、環境、UI變動、測試不穩定等問題。經過探索,最終確定了隨機化思路在自動化測試中的應用,其實可以說這就是實現自動化測試智能化的一種手段。從個人角度而言,其實我本人是不太推崇公司或部門搞得自動化測試平臺化,美其名曰:讓小白都可以寫自動化,可是那樣局限了測試代碼編寫人的思路,也限制著代碼能力和自動化技術水平的提高,我建議有一定基礎的同學要逐漸拋棄平臺(但是可以自己試著去構建平臺化),脫離平臺走自己的路,這樣才能體驗代碼重構的樂趣和技術水平飛速提升的愉悅。當然從公司或部門的角度,平臺化可以更好的管理、交接和產出。

說了這么多,好像還沒有說到主題上?其實前面鋪墊那么多,就是想說明的是不能只會用某技術、某框架,要學會或者領悟其思想。本篇主題突出隨機化這個思想,其實很容易理解,數據隨機化,操作隨機化、流程隨機化(暫時只想到這么多),后面會具體說明,那么使用隨機化思想有什么好處呢,減少數據對測試的影響,減少代碼的不穩定性,增加測試覆蓋率,增加測試發現bug的能力……試著理解下,比如驗證按指定日期和某下拉項查詢:
1> 通常用例實現:日期數據固定指定具體某天,下拉項固定某個選項,然后查詢對比結果;
2> 下面我們按隨機化思想來實現:日期隨機取某天(每次隨機的取數都可能不一樣,如果測試執行多次,那么就增加了日期的選擇范圍),下拉項隨機選擇某個選項(同樣增加了下拉選項的覆蓋),然后再查詢對比結果。


 


這就好像抽獎轉盤,有了上面的例子,是不是很好理解了?那么我們看具體如何實現隨機化:

1、測試數據隨機化:
1>這里以Java為例,Python等其他語言肯定也有對應的函數,利用Java已有的Random對象和Math類生成隨機數據,例如:
int randomInt = new Random().nextInt(100); //[0,100)
randomInt = Math.random() * 100;//[0.0,100.0),查看源碼可以發現Math.random()其實等同于new Random().nextDouble();

2>有些時候我們的數據并不是上述簡單的數據,這就需要對數據進行采集,將其放到數組或者集合中進行儲存,再通過隨機生成數組或集合的下標,進而構造相應的隨機數據,例如:需要對一批日期范圍進行隨機,數據采集后定義日期數組:
String[] queryDates = {"今天","昨天","最近7天","最近30天","上一個月","最近一年"};
String randomDate = queryDates[new Random().nextInt(queryDates.length)];

2、測試操作隨機化:
基于數據隨機后,可以更進一步的對界面的元素集合(如:下拉列表框選項集合、復選框集合、單選按鈕集合、數據表格行或列集合、按鈕集合、鏈接集合等)進行隨機指定,例如:
List<WebElement> optionList = driver.findElements(By.xpath("XXXXX"));
int randomIndex = new Random().nextInt(optionList.size());
optionList.get(randomIndex).click();


3、測試流程隨機化:
對于測試流程或者用例步驟的隨機化,可以上升到智能自動化測試領域,比如基于模型的自動化測試(MBT),典型的測試模型有以下幾類:
1>有限狀態機,比如線程狀態圖:


 

2>UML模型
3>馬爾可夫鏈
4>文法模型
在實際應用中, 用得最多的是有限狀態機模型和UML模型,有限狀態機(FSM:Finite State Machine),簡稱狀態機,是表示有限多個狀態以及在這些狀態之間轉移和動作的數學模型,構建有限狀態機模型,常常需要對模塊與模塊、頁面與頁面,甚至元素與元素之間構建出有向狀態圖或有向關系圖,如下圖所示:


 

然后通過算法(最短路徑、最長路徑等)找到一條具體的路徑,進而測試流程就可以按照這個路徑進行。按照最短路徑算法,上圖的有向狀態圖就可以產生如下路徑:
start——>狀態1——>狀態2——>狀態4——>end
start——>狀態1——>狀態3——>狀態4——>end
如果忽略進入條件start,那么對于每一個狀態按最短路徑算法就可以產生路徑:
狀態1——>狀態2——>狀態4——>end
狀態1——>狀態2——>狀態4——>end
狀態2——>狀態4——>end
狀態3——>狀態4——>end
這里具體在代碼中怎么應用,就需要自己寫算法去實現了(如果不記得了,順便回去補下《數據結構》 /斜眼笑,后面我這邊如果有時間且可以整理的出,到時候再寫一篇具體的實現文章)。

OK,又寫了大半晚上,希望能對大家在自動化測試思想上有所幫助和提升,出去面試自動化測試的理解,按上面這么說,絕對讓面試官眼前一亮。



作者:測試開發
鏈接:http://www.jianshu.com/p/2fc1b73bacda
來源:簡書
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請注明出處。

原文轉自:http://www.jianshu.com/p/2fc1b73bacda

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97