“如何讓有限的測試具有代表整體的測試覆蓋率”
在測試工作中眷射,經(jīng)常會遇到這樣的場景:一個軟件功能有多個輸入項妖碉,每個輸入項有多個可選項欧宜;一個接口有多個參數(shù),每個參數(shù)有多個值匹中。這樣的情況在平時非常常見挂绰,如果按照排列組合焊切,得到的測試用例數(shù)目非常龐大专肪。
舉個直觀的例子就很容易明白了。有一個接口函數(shù)芽死,該函數(shù)有3個參數(shù)关贵,每個參數(shù)又可以取值4個揖曾,那如果要驗證所有參數(shù)傳入情況的話則需要測試4*4*4=64種情況炭剪。如果參數(shù)和取值狀態(tài)更多話奴拦,那將是一個災難绿鸣。
有沒有一種更好的辦法枚驻,少做一些測試再登,同時可以滿足測試覆蓋率呢锉矢?答案是有的,就是我們今天要講的“因子組合測試覆蓋Pairwise”绵估,下面先來簡單的介紹一下什么Pairwise国裳。
Pairwise是L.L.Thurstone(29 May1887–30 September 1955)在1927年首先提出來的。他是美國的一位心理統(tǒng)計學家渺杉,Pairwise也正是基于數(shù)學統(tǒng)計和對傳統(tǒng)的正交分析法進行優(yōu)化后得到的產(chǎn)物是越。
Pairwise基于如下2個假設(shè):每一個維度都是正交的挽放,即每一個維度互相都沒有交集辑畦;根據(jù)數(shù)學統(tǒng)計分析,73%的缺陷(單因子是35%暂筝,雙因子是38%)是由單因子或2個因子相互作用產(chǎn)生的,19%的缺陷是由3個因子相互作用產(chǎn)生的鸵赖。因此,Pairwise基于覆蓋所有2因子的交互作用產(chǎn)生的用例集合性價比最高而產(chǎn)生的茫打。
軟件測試分為黑盒測試和白盒測試,Pairwise算法是針對軟件測試中的黑盒測試提出來的一個行之有效的測試方法抬旺。
概念往往是晦澀難懂的荣堰,下面舉一個簡單的例子振坚,看完你就明白Pairwise算法是怎么挑選測試case的。
現(xiàn)有接口S宏娄,有三個輸入變量X窥淆、Y扛伍、Z,取值分別為:D(X)?=?{x1, x2}; D(Y)?=?{y1, y2}; D(Z)?=?{z1,z2}作媚,如下圖:
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在此表中已找不到重復的值,所以保留沟堡。依此方法侧但,最后得到的測試用例集如上面的右圖。很明顯航罗,經(jīng)過Pairwise過程禀横,測試用例數(shù)減少了一半。
那么如果每次都要進行手工計算除了非常浪費時間外粥血,也容易出錯燕侠,一旦參數(shù)多起來的話手工也無能為力了。那是不是可以開發(fā)一個自動化程序立莉,讓它自動輸出結(jié)果绢彤。這個想法非常好,但是不需要我們在重復造輪子了蜓耻,市面上已經(jīng)有了非常好用的工具茫舶,那就是PICT工具。
安裝與使用
進入安裝目錄刹淌,在目錄下新建一個txt文件如text.txt饶氏。
有一個登錄頁面,有用戶名有勾、密碼疹启、驗證碼、是否保存密碼選項蔼卡,其中用戶名喊崖、密碼、驗證最多只有1個為空雇逞。如果組合的話有5*3*4*2-3=117種情況荤懂,在txt中輸入與測試用例相關(guān)的所有參數(shù),如下圖1所示:
test.txt的參數(shù)內(nèi)容塘砸,如下:
username:? 手機號,郵箱, 昵稱, 非空字符, 空
password: ? 正確密碼, 錯誤密碼, 空
captcha: ? ? 正確驗證碼, 錯誤驗證碼, 超時正確驗證碼, 空
save_password:? 是, 否
在安裝目錄運行cmd命令符节仿,輸入pict test.txt,結(jié)果如下圖:
看起來不是很美觀掉蔬,可以通過命令pict test.txt >test.xls命令將結(jié)果輸出到text.xls文檔中廊宪,結(jié)果如下:
是從要求中知道矾瘾,用戶名、密碼箭启、驗證碼最多只有1個為空壕翩,那怎么處理呢?這個時候就需要用到PICT的約束條件了册烈。
PICT約束:
子模型約束: ?
{ Para1, Para2, Para3 } @ 2? #必須覆蓋任意的兩兩參數(shù)組合情況戈泼,不能有分號
條件約束(LIKE, IN, AND, OR, NOT)婿禽,必須分號結(jié)束:
[username]<>“空”;
[age] < 120 ;
[username]<>“空”O(jiān)R [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中的參數(shù)約束條件如下:
輸出結(jié)果如下,可以發(fā)現(xiàn)沒有用戶名膛壹、密碼驾中、驗證碼最多只有1個為空的情況:
如果要求覆蓋所有用戶名、密碼模聋、驗證碼組合測試項該怎么處理肩民?可以增加如下參數(shù)約束:
以上就是關(guān)于約束的內(nèi)容了,在編輯test.txt文件的時候切記一定不要在中文情況下編輯空格链方、冒號持痰、逗號,否則會一直報錯無法得到正確的結(jié)果祟蚀。
上面的組合都是兩兩兩組合覆蓋工窍,如果要更改組合組合順序參數(shù)值怎么辦?這個時候只需要將在運行命令的時候增加參數(shù) /o:3即可,如pict test.txt /o:3前酿。其它的命令參數(shù)選項含義如下:
/ o :N ?- 組合數(shù)患雏,默認值為2
/ d :C ?- 值與值之間的分隔符,默認為逗號(,)
/ a :C ?-別名間的分隔符罢维,默認是管道符(|)
/ n :C ?- 無效數(shù)值或者是非法數(shù)值的前綴淹仑,默認值為(~)
/ e :file - 定義種子文件,作用是可以指定組合方式
/ r [:N]? - 隨機生成肺孵,N -種子
/ c?????? - 參數(shù)的值完全區(qū)分大小寫
/ s?????? - 顯示模型統(tǒng)計數(shù)據(jù)