不管是做爲專職開發或測試人員,相信你們在編寫測試時都遇到過如下難題:python
咱們這裏拿傳統 Web 測試舉個栗子 ( 開發人員設計單元測試同理 ):數組
咱們對某移動端 Web 網站設計了 5 個 測試用例,而且須要對其進行不一樣 IOS 大版本 ( >=10 ) 以及 最新主流瀏覽器 的 兼容性測試。因而咱們共有 3 個測試維度:瀏覽器
想要實現參數組合全覆蓋的話,一共須要覆蓋 5 x 4 x 5 = 100 種組合、若是實現了自動化測試這倒不算什麼問題,若是是手工測試的話那就比較蛋疼了。函數
那麼有沒有辦法能夠以最少的用例作到儘量全面的覆蓋呢???單元測試
答案固然是確定的~測試
咱們能夠採起 pairwise ( 結對測試 ) 的測試策略進行用例設計,減小測試組合的同時最大化用例性價比。網站
pairwise 是一種組合測試的設計策略,保證對各個參數兩兩組合的全覆蓋 (通過實踐,遍歷參數兩兩組合能夠找出絕大部分的 Bug )
,能夠有效提升用例設計與執行性價比。 -- 筆者
複製代碼
請看下文 實現~spa
這裏咱們直接引用一個簡單實用的 python 庫 - allpairspy 。設計
安裝過程很是簡單:3d
pip install allpairspy==2.4.1
複製代碼
咱們這裏將用代碼實現上文中提到的 Web 測試場景下的用例參數組合設計~
if __name__ == "__main__":
# 導入庫
from allpairspy import AllPairs
# 列出全部參數
parameters = [
["Ie", "Firefox", "Chrome", "UC", "QQ"],
["Ios10", "Ios11", "Ios12", "Ios13"],
["用例1", "用例2", "用例3", "用例4", "用例5"]
]
# 輸出 pairwise 參數組合
if __name__ == '__main__':
print("PAIRWISE:")
for i, pairs in enumerate(AllPairs(parameters)):
print("{:2d}: {}".format(i, pairs))
複製代碼
控制檯輸出以下:
PAIRWISE:
0: ['Ie', 'Ios10', '用例1']
1: ['Firefox', 'Ios11', '用例1']
2: ['Chrome', 'Ios12', '用例1']
3: ['UC', 'Ios13', '用例1']
4: ['QQ', 'Ios13', '用例2']
5: ['QQ', 'Ios12', '用例3']
6: ['UC', 'Ios11', '用例3']
7: ['Chrome', 'Ios10', '用例3']
8: ['Firefox', 'Ios10', '用例2']
9: ['Ie', 'Ios13', '用例3']
10: ['Ie', 'Ios12', '用例2']
11: ['Firefox', 'Ios12', '用例4']
12: ['Chrome', 'Ios11', '用例2']
13: ['UC', 'Ios10', '用例4']
14: ['QQ', 'Ios11', '用例4']
15: ['QQ', 'Ios10', '用例5']
16: ['UC', 'Ios12', '用例5']
17: ['Chrome', 'Ios13', '用例4']
18: ['Firefox', 'Ios13', '用例5']
19: ['Ie', 'Ios11', '用例5']
20: ['Ie', 'Ios11', '用例4']
21: ['Firefox', 'Ios11', '用例3']
22: ['Chrome', 'Ios11', '用例5']
23: ['UC', 'Ios11', '用例2']
24: ['QQ', 'Ios11', '用例1']
Process finished with exit code 0
複製代碼
能夠很清晰的看出,咱們成功輸出了全部 pairwise 策略下的參數組合,將用例總數從 100 條減小至 25 條, 整整減小了 3/4 ! (當參數愈來愈多時,效果會更明顯)
當測試參數組合很是龐大時,使用 pairwise 策略不失爲一種恰當的用例設計方法,不管是做爲測試亦或是開發,我以爲都應該掌握這門技術。
但願你們能從本篇文章有所收穫~
給你們推薦一下個人公衆號 「智能測試開發」,歡迎你們掃描下方海報二維碼領取 進階教程~