接口測(cè)試的兩種方法
其實(shí)無(wú)論用那種測(cè)試方法,接口測(cè)試的原理是通過(guò)測(cè)試程序模擬客戶端向服務(wù)器發(fā)送請(qǐng)求報(bào)文,服務(wù)器接收請(qǐng)求報(bào)文后對(duì)相應(yīng)的報(bào)文做出處理然后再把應(yīng)答報(bào)文發(fā)送給客戶端,客戶端接收應(yīng)答報(bào)文這一個(gè)過(guò)程。
方法一、用LoadRunner實(shí)現(xiàn)接口測(cè)試
大家都知道LoadRunner是一種性能測(cè)試工具,但它也可以用在我們做接口測(cè)試的時(shí)候。開發(fā)人員開發(fā)出來(lái)的接口,提供給測(cè)試人員詳細(xì)的接口使用說(shuō)明書,該說(shuō)明書最基本的要求如下:
接口測(cè)試地址:/SNS/Publish
請(qǐng)求報(bào)文參數(shù)說(shuō)明:
參數(shù)名稱 | 參數(shù)描述 | 字符類型 | 字符值 |
SNSID | 社區(qū)ID | String | 6 |
UserID | 用戶ID | String | 10 |
CommentsTypeID | 評(píng)論類型ID | String | 2 |
CommentsID | 評(píng)論ID | String | 10 |
AuthorID | 作者ID | String | 10 |
CommentsContent | 評(píng)論內(nèi)容 | String | 50 |
請(qǐng)求報(bào)文格式:
<?xml version="1.0" encoding="ISO-8859-1"?> |
應(yīng)答報(bào)文的參數(shù)接口說(shuō)明:
參數(shù)名稱 | 參數(shù)描述 | 字符類型 | 字符值 |
UserID | 用戶ID | String | 10 |
CommentsTypeID | 評(píng)論類型ID | String | 2 |
CommentsID | 評(píng)論ID | String | 10 |
CommentsContent | 評(píng)論內(nèi)容 | String | 50 |
StatusCode | 返回值 | Int | 0代表pass,非0代表fail |
StatusText | 返回信息描述 | String |
|
<?xml version="1.0" encoding="ISO-8859-1"?> < Publish > <UserID>456</ UserID > <CommentsTypeID>2</ CommentsTypeID > <CommentsID>123</CommentsID> <CommentsContent>Don't forget the meeting!</CommentsContent > <StatusCode>0</StatusCode> <StatusText>發(fā)送成功一條評(píng)論</StatusText> </Publish> |
有了上述的說(shuō)明書之后,測(cè)試人員可以根據(jù)文檔的描述在LoadRunner書寫相應(yīng)的接口測(cè)試腳本。
LoadRunner中涉及到向服務(wù)器發(fā)送請(qǐng)求的API方法包括:web_url(),web_submit_form(),web_submit_data(),web_custom_request()。下面介紹兩種我常用的方法:
方法一:使用web_submit_data()
web_submit_data("insert", "Action=http://116.211.23.123/SNS/Publish.htm ", "Method=POST", "Referer=http://116.211.23.123/SNS/Publish.htm ", "Mode=HTML", ITEMDATA, "Name= SNSID ","Value=6601",ENDITEM, "Name= UserID ","Value=123",ENDITEM, "Name= CommentsTypeID ","Value=1",ENDITEM, "Name= CommentsID ","Value=456",ENDITEM, "Name= AuthorID","Value=789",ENDITEM, "Name= CommentsContent ","Value=Just for testing",ENDITEM, LAST); |
方法二:使用web_custom_request()
char str[1000]; strcpy(str,"SNSID=7999&UserID=1&CommentsTypeID=1&CommentsID=1&AuthorID=1&CommentsContent=1"); web_custom_request("Publish", "Url= http://116.211.23.123/SNS/Publish.htm", "Method=POST", "Referer=http://116.211.23.123/SNS/Publish.htm ", "Mode=HTTP", str, LAST); |
這也是一種寫法,可以跟web_submit_data互換。這種寫法更利于拼接參數(shù)。
方法一適合一些xml結(jié)構(gòu)的根元素下的子元素同處于根元素下面,且子元素?cái)?shù)目較少的情況下,如果xml結(jié)構(gòu)比較復(fù)雜,比如說(shuō)根元素下面有多級(jí)子元素,或者xml樹結(jié)構(gòu)分叉較多的時(shí)候,我們可以先把xml拼接成一個(gè)字符串然后通過(guò)web_custom_request()向服務(wù)器發(fā)送請(qǐng)求。
我們?cè)谧鼋涌诠δ軠y(cè)試的時(shí)候會(huì)很注意接口的應(yīng)答報(bào)文的信息,這時(shí)候我們可以通過(guò)LoadRunner的日志信息查看或者可以通過(guò)web_reg_find()或者web_find()這樣的API函數(shù)來(lái)統(tǒng)計(jì)接口的運(yùn)行結(jié)果,推薦使用web_reg_find(),web_reg_find()和web_find()區(qū)別請(qǐng)大家百度一下,詳細(xì)信息太多,在這里不便敘述。
因?yàn)閣eb_reg_find()是注冊(cè)型函數(shù),所以應(yīng)該放在web_submit_data()或者web_custom_request()的前面。
如:
web_reg_find("Text=<StatusCode>0</StatusCode>",//應(yīng)答報(bào)文里邊的信息 "SaveCount= StatusCodeCount", //統(tǒng)計(jì)查詢字段的信息,如果找到值為1,如果未找到值為0 LAST); |
在腳本的最后我們可以對(duì)查詢字段的信息進(jìn)行統(tǒng)計(jì)
// Check result if (atoi(lr_eval_string("{StatusCodeCount }")) > 0){ //判斷如果Welcome字符串出現(xiàn)次//數(shù)大于0 lr_output_message("Send out the comment successfully."); }//在日志中輸出Send out //the comment successfully else{ //如果出現(xiàn)次數(shù)小于等于 lr_error_message("Send out the comment unsuccessfully."); //在日志中輸出Send out //the comment successfully return(0); } |
總結(jié):用LoadRunner做接口測(cè)試無(wú)法做到把接口參數(shù)和程序分理,接口的參數(shù)可以通過(guò)參數(shù)化的方法來(lái)實(shí)現(xiàn)對(duì)同一個(gè)參數(shù)多個(gè)數(shù)據(jù)的測(cè)試。參數(shù)化后的測(cè)試數(shù)據(jù)保存在此腳本的保存位置下。
方法二、通過(guò)Java + Fitnesse實(shí)現(xiàn)接口功能測(cè)試
什么是Fitnesse?
FitNesse是一套軟件開發(fā)協(xié)作工具 FitNesse是幫助大家加強(qiáng)軟件開發(fā)過(guò)程中的協(xié)作的工具。能夠讓客戶、測(cè)試人員和開發(fā)人員了解軟件要做成什么樣,幫助建議軟件最終是否達(dá)到了設(shè)計(jì)初衷。
FitNesse是一套軟件測(cè)試工具 從另外一個(gè)角度看,F(xiàn)itNesse是一個(gè)輕量級(jí)的、開源的框架,能夠幫助開發(fā)團(tuán)隊(duì)方便的定義驗(yàn)收測(cè)試(Acceptance Tests),通過(guò)在web頁(yè)面上簡(jiǎn)單的輸出和預(yù)計(jì)輸出的表格就可實(shí)現(xiàn),并且可以運(yùn)行這些測(cè)試以確定是否通過(guò)。
FitNesse是wiki可以很方便的創(chuàng)建和編輯頁(yè)面 FitNesse是一個(gè)web服務(wù)器不用過(guò)多的安裝配置,很方便使用。
我習(xí)慣使用Eclipse集成開發(fā)工具寫測(cè)試代碼,用fitnesse準(zhǔn)備接口的測(cè)試數(shù)據(jù),由此實(shí)現(xiàn)接口的測(cè)試數(shù)據(jù)和測(cè)試程序的分離。
關(guān)于Fitnesse的使用大家可以參考官方網(wǎng)址。Fitnesse的四種常見表格是:
ColumnFixture,ActionFixture,Decision Table,ScriptTable。在工作中ColumnFixture用的最多。
下面的程序使用的是ColumnFixture表格。
// Java fixtures package info.fitnesse.fixturegallery; import fit.ColumnFixture; public class PublishTest extends ColumnFixture { //通過(guò)url向服務(wù)器發(fā)送請(qǐng)求的程序段省略 public StringSNSID; //對(duì)應(yīng)列名|first part| public StringUserID; //對(duì)應(yīng)列名|second part| private StringCommentsTypeID; private StringAuthorID; private StringCommentsContent; private StringUserID; //對(duì)參數(shù)的set和get方法省略 } ColumnFixture表格里邊的測(cè)試數(shù)據(jù)是: //省略設(shè)置表格的存儲(chǔ)位置信息 |
總結(jié):上述兩種方法都是對(duì)接口做功能測(cè)試的方法,使用LoadRunner做接口測(cè)試的時(shí)候可以不用讓開發(fā)人員提供測(cè)試人員相應(yīng)的UI測(cè)試頁(yè)面,直接調(diào)用接口做測(cè)試,但是測(cè)試程序和數(shù)據(jù)的依賴性太強(qiáng);使用Fitnesse做接口測(cè)試的時(shí)候可以實(shí)現(xiàn)測(cè)試程序和數(shù)據(jù)的分離,只用點(diǎn)擊Fitnesse界面的Test按鈕就可以實(shí)現(xiàn)測(cè)試,測(cè)試消耗時(shí)間比使用LoadRunner做接口測(cè)試少。
以上純屬個(gè)人見解,敬請(qǐng)拍磚!
posted on 2012-05-31 09:50 順其自然EVO 閱讀(54845) 評(píng)論(12) 編輯 收藏