舉個直觀的例子就很容易明白了。有壹個接口函數,該函數有3個參數,每個參數又可以取值4個,那如果要驗證所有參數傳入情況的話則需要測試4*4*4=64種情況。如果參數和取值狀態更多話,那將是壹個災難。
有沒有壹種更好的辦法,少做壹些測試,同時可以滿足測試覆蓋率呢?答案是有的,就是我們今天要講的“因子組合測試覆蓋Pairwise”,下面先來簡單的介紹壹下什麽Pairwise。
Pairwise是L.L.Thurstone(29 May1887–30 September 1955)在1927年首先提出來的。他是美國的壹位心理統計學家,Pairwise也正是基於數學統計和對傳統的正交分析法進行優化後得到的產物。
Pairwise基於如下2個假設: 每壹個維度都是正交的,即每壹個維度互相都沒有交集 ; 根據數學統計分析,73%的缺陷(單因子是35%,雙因子是38%)是由單因子或2個因子相互作用產生的,19%的缺陷是由3個因子相互作用產生的 。因此,Pairwise基於覆蓋所有2因子的交互作用產生的用例集合性價比最高而產生的。
軟件測試分為黑盒測試和白盒測試,Pairwise算法是針對軟件測試中的黑盒測試提出來的壹個行之有效的測試方法。
概念往往是晦澀難懂的,下面舉壹個簡單的例子,看完妳就明白Pairwise算法是怎麽挑選測試case的。
Pairwise算法過程 :從表的最後壹行開始,如果這行的兩兩組合值能夠在上面的行或此表中找到,那麽這行就可從用例集中刪除。
例如,TC8包含的兩兩組合值為(X2-Y2,X2-Z2,Y2-Z2),X2-Y2在TC7中存在,X2-Z2在TC6中存在,Y2-Z2在TC4中存在,則此行刪除;
TC7包含的兩兩組合值為(X2-Y2,X2-Z1,Y2-Z1),X2-Y2在此表中已找不到重復的值,所以保留。依此方法,最後得到的測試用例集如上面的右圖。很明顯,經過Pairwise過程,測試用例數減少了壹半。
那麽如果每次都要進行手工計算除了非常浪費時間外,也容易出錯,壹旦參數多起來的話手工也無能為力了。那是不是可以開發壹個自動化程序,讓它自動輸出結果。這個想法非常好,但是不需要我們在重復造輪子了,市面上已經有了非常好用的工具,那就是PICT工具。
進入安裝目錄,在目錄下新建壹個txt文件如text.txt。
有壹個登錄頁面,有用戶名、密碼、驗證碼、是否保存密碼選項,其中用戶名、密碼、驗證最多只有1個為空。如果組合的話有5*3*4*2-3=117種情況,在txt中輸入與測試用例相關的所有參數,如下圖1所示:
test.txt的參數內容,如下:
username:? 手機號,郵箱, 昵稱, 非空字符, 空
password: ? 正確密碼, 錯誤密碼, 空
captcha: 正確驗證碼, 錯誤驗證碼, 超時正確驗證碼, 空
save_password:? 是, 否
在安裝目錄運行cmd命令符,輸入pict test.txt,結果如下圖:
看起來不是很美觀,可以通過命令pict test.txt >test.xls命令將結果輸出到text.xls文檔中,結果如下:
是從要求中知道,用戶名、密碼、驗證碼最多只有1個為空,那怎麽處理呢?這 個時候就需要用到PICT的約束條件了。
PICT 約束:
子模型約束: ?
{ Para1, Para2, Para3 } @ 2? #必須覆蓋任意的兩兩參數組合情況,不能有分號
條件約束(LIKE, IN, AND, OR, NOT),必須分號結束:
[username] <> “空”;
[age] < 120 ;
[username] <> “空”OR [age] < 120;
[nickname] LIKE “李*”;
IF [username] = “空”THEN NOT [password] = “空”;
IF [Cluster size] in {512, 1024, 2048} THEN [Compression] = "Off";
IF [username] = “空”THEN ?[password] <> “空”AND [captcha] <>“空”;
所以,為了滿足用戶名、密碼、驗證碼最多只有1個為空,更改text.txt中的參數約束條件如下:
輸出結果如下,可以發現沒有用戶名、密碼、驗證碼最多只有1個為空的情況:
如果要求覆蓋所有用戶名、密碼、驗證碼組合測試項該怎麽處理?可以增加如下參數約束:
以上就是關於約束的內容了,在編輯test.txt文件的時候切記壹定不要在中文情況下編輯空格、冒號、逗號,否則會壹直報錯無法得到正確的結果。
上面的組合都是兩兩兩組合覆蓋,如果要更改組合組合順序參數值怎麽辦?這個時候只需要將在運行命令的時候增加參數 /o:3即可,如pict test.txt /o:3。其它的命令參數選項含義如下:
/ o :N ?- 組合數,默認值為2
/ d :C ?- 值與值之間的分隔符,默認為逗號(,)
/ a :C ?-別名間的分隔符,默認是管道符(|)
/ n :C ?- 無效數值或者是非法數值的前綴,默認值為(~)
/ e :file - 定義種子文件,作用是可以指定組合方式
/ r [:N]? - 隨機生成,N -種子
/ c? - 參數的值完全區分大小寫
/ s? - 顯示模型統計數據