web自動(dòng)化測試-HTTP層面的Web Service自動(dòng)化測試(2)
圖4 接口二輸出輸出中的ResHeader也是SOAP包的header,是所有接口的公共輸出。getAccountInfoResponse和getChangedIdResponse是SOAP包的body,各自的字段是真正要準(zhǔn)備的預(yù)期結(jié)果數(shù)據(jù)。3.分析從上面給出的例子可以看出,基于SOAP層面的數(shù)據(jù)組織,需要準(zhǔn)備的數(shù)據(jù)就是本地類的輸入和輸出字段值,因而數(shù)據(jù)構(gòu)造無需考慮SOAP包的格式,比較直觀和簡單。但是不同接口的字段個(gè)數(shù)不同,字段名稱和類型也不同,所以數(shù)據(jù)的讀取比較麻煩,要針對(duì)不同的接口有不同的數(shù)據(jù)讀取程序。測試程序測試程序包含本地代理類和調(diào)用代理類的程序。本地類的生成通常借助于工具(比如java的Axis2)。調(diào)用本地代理類的程序?qū)τ诿總€(gè)接口都不同,因?yàn)槊總€(gè)接口需要調(diào)用不同的函數(shù),在接口比較多的情況下比較麻煩,并且接口有變動(dòng)都需要修改本地類和測試程序。結(jié)果對(duì)比這里的結(jié)果就是本地函數(shù)的返回值。在輸入和期望輸出都讀入內(nèi)存的情況下,結(jié)果對(duì)比很簡單,就是逐個(gè)字段比較期望輸出和實(shí)際輸出。HTTP層面的Web Service自動(dòng)化測試HTTP層面的Web Service測試步驟比較簡單:準(zhǔn)備數(shù)據(jù),使用HTTP發(fā)送請(qǐng)求數(shù)據(jù)包,使用HTTP方式接受響應(yīng),解析響應(yīng)并驗(yàn)證結(jié)果。數(shù)據(jù)組織HTTP層面的數(shù)據(jù)是完整的SOAP包(由于大多數(shù)SOAP協(xié)議基于XML,所以實(shí)際上是一個(gè)XML包)。1.輸入數(shù)據(jù)比如之前的兩個(gè)接口,對(duì)應(yīng)的輸入XML包分別是:圖5 接口一輸入XML包圖6 接口二輸入XML包2.期望輸出期望輸出同樣是兩個(gè)XML包,只是內(nèi)容不同,這里就不再舉例。3.分析通過上面的例子可以看出,HTTP層面的數(shù)據(jù)就是一個(gè)個(gè)XML包。對(duì)比SOAP層面的數(shù)據(jù)構(gòu)造,只知道幾個(gè)字段值并不能得到一個(gè)XML包,需要自己考慮這個(gè)XML包的格式。優(yōu)點(diǎn)就是數(shù)據(jù)的讀取很簡單,只需要將整個(gè)XML文件的內(nèi)容讀入內(nèi)存即可。并且很方便構(gòu)造錯(cuò)誤格式的輸入。測試程序基于HTTP層面的測試程序很簡單:以輸入的SOAP包為body構(gòu)造HTTP請(qǐng)求,發(fā)送給Web Service Server;接收響應(yīng),讀取響應(yīng)的HTTP包的body(就是一個(gè)SOAP包)。從這個(gè)過程可以看出,所有接口的測試程序都一樣。因而新增加接口或者原有接口發(fā)生變化都不會(huì)影響測試程序。結(jié)果對(duì)比在HTTP層面上,輸入和輸出都是一個(gè)XML包。因而結(jié)果對(duì)比可以將輸入和輸出XML包讀入到兩個(gè)字符串中,進(jìn)行字符串對(duì)比。改進(jìn)思路根據(jù)上文的分析,HTTP層面的Web Service測試的優(yōu)勢是數(shù)據(jù)格式靈活,易于讀取,測試程序擴(kuò)展性強(qiáng),可以適用于所有的接口。但是缺點(diǎn)也很明顯:數(shù)據(jù)構(gòu)造麻煩,還容易格式出錯(cuò);結(jié)果對(duì)比比較機(jī)械,無法選擇性的對(duì)比某些字段(有時(shí)候返回結(jié)果中包含有時(shí)間相關(guān)的量,這個(gè)量在每次測試的時(shí)候返回值都是不一樣的,因而在結(jié)果對(duì)比的時(shí)候需要忽略這些字段)。針對(duì)這兩個(gè)缺點(diǎn)我做了相應(yīng)的改進(jìn):改進(jìn)數(shù)據(jù)構(gòu)造數(shù)據(jù)構(gòu)造的難點(diǎn)在于無法從幾個(gè)字段構(gòu)造出符合格式的XML包。首先我們分析輸入數(shù)據(jù)。再來看之前給出的兩個(gè)接口的輸入:圖7 接口一輸入分析圖8 接口二輸入分析可以看出這兩個(gè)XML包有相同的部分,就是在圖中用紅色框起來的部分。這部分就是SOAP包的header。一個(gè)標(biāo)準(zhǔn)的SOAP包具有這樣的格式:圖9 SOAP包格式分析輸入Header部分通常包含用戶認(rèn)證的信息,不同接口的Header格式都相同;Body保存的是真正的數(shù)據(jù),各個(gè)接口不同。通常不同的接口使用的Header只有少量的幾個(gè)(通常只是用一個(gè)或者少量幾個(gè)用戶做測試),因此我們可以把Header部分的構(gòu)造提取出來。以dr-api為例,輸入的Header主要有username、password和token三個(gè)字段(還有一個(gè)target字段是選填的),那么我們只需要準(zhǔn)備幾組username/password/token即可。輸入Body由于是接口相關(guān)的,沒有統(tǒng)一的方法構(gòu)造。但是我們可以結(jié)合SoapUI工具手動(dòng)構(gòu)造,這樣比直接寫XML包更方便。參考圖1,是SoapUI界面的“Form”標(biāo)簽內(nèi)容。在這個(gè)標(biāo)簽下輸入Body里需要填寫的字段值,然后選擇“XML”標(biāo)簽,SoapUI會(huì)顯示出對(duì)應(yīng)的發(fā)送XML包。從中拷貝出Body的內(nèi)容保存到XXX.input.xml里即可。輸出Header通常包含接口無關(guān)的信息,比如處理時(shí)間,操作數(shù),錯(cuò)誤代碼等等(至少從百度推廣API和google adwords API來看都是如此)。那么我們也可以將輸出Header提取出來,在準(zhǔn)備數(shù)據(jù)的時(shí)候只需要給出幾個(gè)字段即可。由于不同接口的這幾個(gè)字段的名稱和類型都一樣,所以很方便程序讀取。準(zhǔn)備輸出Body也可以借助于SoapUI。但是和輸入Body的準(zhǔn)備不同,后者只需要有wsdl文件即可構(gòu)造,輸出Body需要Web Service已經(jīng)提供,使用SoapUI發(fā)送一次請(qǐng)求得到返回,這樣才能得到輸出Body。因而實(shí)際中輸出Body的準(zhǔn)備通常直接用手動(dòng)的方式構(gòu)造,不使用SoapUI。改進(jìn)結(jié)果對(duì)比Web Service的測試中有相當(dāng)一部分是測試錯(cuò)誤代碼(以百度推廣API V2版本為例,現(xiàn)在一共有約300個(gè)錯(cuò)誤代碼)。這樣的測試不需要關(guān)注返回包的Body,只需要關(guān)注返回包Header中的錯(cuò)誤代碼,那么我們不需要專門構(gòu)造預(yù)期輸出的XML包,只需要提供一個(gè)錯(cuò)誤代碼即可。類似的,如果我們只關(guān)注返回包Header里的信息,那么就省去了構(gòu)造預(yù)期輸出XML包的過程,結(jié)果對(duì)比也很簡單。如果測試關(guān)注于業(yè)務(wù)數(shù)據(jù),也就是返回包的Body部分,除了字符串對(duì)比之外暫時(shí)還沒有更好更通用的解決方法。改進(jìn)總結(jié)改進(jìn)的結(jié)果就是每個(gè)case的數(shù)據(jù)包含三個(gè)文件:input.xml、output.xml和一個(gè)配置文件properties。Input.xml包含了輸入包的Body,output.xml包含了輸出包的Body,配置文件則配置了輸入輸出的header,還有這個(gè)case對(duì)應(yīng)的url等信息。整體思路總體思路如下:讀取所有case的數(shù)據(jù),生成用例列表(包含用例數(shù)據(jù)和調(diào)用的接口);對(duì)每一個(gè)用例,使用http發(fā)送數(shù)據(jù)包,按照XML的解析方法解析返回SOAP包,進(jìn)行結(jié)果驗(yàn)證;使用ficus以用例列表為輸入進(jìn)行數(shù)據(jù)驅(qū)動(dòng)測試。如下圖所示:圖10 測試整體思路設(shè)計(jì)與實(shí)現(xiàn)數(shù)據(jù)組織數(shù)據(jù)組織的主要目的有兩點(diǎn):一是做到自描述,通過數(shù)據(jù)可以得到輸入和期望輸出,還有請(qǐng)求的url;二是減少冗余數(shù)據(jù),比如將soap的header信息提取出來。為了達(dá)到這兩個(gè)目的,我們使用了一個(gè)配置文件和一個(gè)數(shù)據(jù)文件夾。配置文件主要存放元數(shù)據(jù)和公用的數(shù)據(jù),數(shù)據(jù)文件夾存放真正的分散的數(shù)據(jù)。配置文件的內(nèi)容如下:圖11 全局配置文件
頁:
[1]