平台服务器测试3—接口测试工具实现
?? ?平臺服務(wù)器的接口測試用例及測試數(shù)據(jù)準(zhǔn)備完畢后,接下來的工作就是如何去進(jìn)行接口功能測試了,如果使用客戶端來進(jìn)行平臺服務(wù)器的接口測試,不但某些測試用例無法進(jìn)行覆蓋(例如上傳不合法的版本號),而且有的輸入值需要通過客戶端復(fù)雜的操作才能實(shí)現(xiàn),現(xiàn)在我們需要能方便定制輸入數(shù)據(jù)的工具來協(xié)助進(jìn)行接口測試。
一、工具頁面設(shè)計(jì)
開始對所需要的接口功能測試工具進(jìn)行設(shè)計(jì),根據(jù)測試人員能夠?qū)γ總€測試接口輸入定制的測試數(shù)據(jù)、然后能夠查看輸出結(jié)果,平臺服務(wù)器接口通訊遵循HTTP和HTTPS協(xié)議,因此測試工具可以使用Web瀏覽器來做為測試數(shù)據(jù)的通訊載體,使用Dreamweaver工具進(jìn)行測試工具的布局設(shè)計(jì):
?? ?左側(cè)是待測試接口的集合,通過表格進(jìn)行排列,點(diǎn)擊左側(cè)的接口名稱,將會在右側(cè)顯示相應(yīng)的接口頁面,測試人員在輸入?yún)?shù)欄中進(jìn)行測試數(shù)據(jù)的設(shè)置,點(diǎn)擊【提交】按鍵即將接口測試值發(fā)給平臺服務(wù)器,響應(yīng)消息將會在輸出結(jié)果欄中直接顯示。具體代碼見:
1 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">2 <html xmlns="http://www.w3.org/1999/xhtml">
3 <head>
4 <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
5 <title>平臺服務(wù)器接口測試工具</title>
6 </head>
7 <frameset rows="60,*" cols="*" frameborder="no" border="0" framespacing="0">
8 <frame src="head.html" name="topFrame" scrolling="no" noresize="noresize" id="topFrame" title="topFrame" />
9 <frameset rows="*" cols="280,*" framespacing="0" frameborder="no" border="0">
10 <frame src="left.html" name="leftFrame" scrolling="auto" noresize="noresize" id="leftFrame" title="leftFrame" />
11 <frame src="userLogin.html" name="mainFrame" id="mainFrame" title="mainFrame" />
12 </frameset>
13 </frameset>
14 <noframes><body></body></noframes>
15 </html>
『備注』
?? 接口功能測試工具沒有平臺服務(wù)器IP地址的設(shè)置,是因?yàn)槠脚_服務(wù)器是通過域名訪問,可以修改hosts文件來訪問指定的平臺服務(wù)器。
二、測試工具實(shí)現(xiàn)
1、接口消息數(shù)據(jù)封裝
?? ?Web瀏覽器盡管能夠幫助我們進(jìn)行發(fā)送和接收HTTP消息操作、但是每個接口HTTP消息體內(nèi)容通過web瀏覽器無法進(jìn)行封裝,因此我將使用jQuery庫、通過javascript腳本來進(jìn)行接口數(shù)據(jù)封裝操作,以用戶登錄接口為例,數(shù)據(jù)封裝代碼為:
1 <script type="text/javascript" src="jquery-1.4.js"></script>2 <script type="text/javascript">
3 function showXml(){
4 $.ajaxSetup({cache:false});
5 $.ajax({
6 url:'http://www.ceshi.com/outer/server.action', //異步方法
7 type: 'GET',
8 dataType: 'xml', //這里可以不寫,但千萬別寫text或者h(yuǎn)tml!!!
9 data: $('#userLoginForm').serialize(), //傳入的測試參數(shù)
10 error: function(){ //返回失敗
11 alert('Error loading XML document');
12 },
13
14 success: function(xml){ //返回成功
15 var text='';
16 var webKey=$(xml).find("webKey").text();
17 var userID=$(xml).find("userID").text();
18 var resultCode=$(xml).find("resultCode").text();
19 //如果成功,寫入webkey到cookie
20 if('0'==resultCode){
21 document.cookie='webKey='+webKey;
22 document.cookie='userID='+userID;
23 }
24 text+='<res>'+'\n';
25 text+='<resultCode>'+$(xml).find("resultCode").text()+'</resultCode>'+'\n';
26 text+='<userID>'+$(xml).find("userID").text()+'</userID>'+'\n';
27 text+='<loginName>'+$(xml).find("loginName").text()+'</loginName>'+'\n';
28 text+='<nickName>'+$(xml).find("nickName").text()+'</nickName>'+'\n';
29 text+='<webKey>'+$(xml).find("webKey").text()+'</webKey>'+'\n';
30 text+='<emailstatus>'+$(xml).find("emailstatus").text()+'</emailstatus>'+'\n';
31 text+='<gymkanaCodes>'+$(xml).find("gymkanaCodes").text()+'</gymkanaCodes>'+'\n';
32 text+='<talkenable>'+$(xml).find("talkenable").text()+'</talkenable>'+'\n';
33 text+='<watchenable>'+$(xml).find("watchenable").text()+'</watchenable>'+'\n';
34 text+='<userMemberType>'+$(xml).find("userMemberType").text()+'</userMemberType>'+'\n';
35 text+='<vipExpireDate>'+$(xml).find("vipExpireDate").text()+'</vipExpireDate>'+'\n';
36 text+='</res>';
37 document.getElementById('showXmlText').value=text;
38 }
39 });
40 }
41 </script>
?? ?用戶每次成功登錄平臺時,會由平臺服務(wù)器通過(userID+系統(tǒng)時間串+隨機(jī)數(shù))再經(jīng)MD5算法計(jì)算出一個唯一值webkey,如果測試基本資料查詢、密碼修改、好友信息查詢、游戲經(jīng)驗(yàn)值查詢等接口時,都需要在被調(diào)用接口中輸入登錄時的userID和webkey,如果在測試這些接口時,都需要人工先調(diào)用用戶登錄接口,再將userID、webkey的值copy到被調(diào)用接口的輸入項(xiàng)中將會非常繁瑣,因此將通過cookie來進(jìn)行userID、webkey的自動填充。
?? ?在使用接口功能測試工具時,都需先通過用戶登錄接口進(jìn)行一次登錄,然后在測試用戶基本資料查詢、密碼修改、好友信息查詢、游戲經(jīng)驗(yàn)值查詢等接口時,無需用戶輸入userID和webkey,將會通過javascript腳本將cookie中登錄生成的userID和webkey取出,并自動填充被測試接口的userID和webkey相應(yīng)項(xiàng)。
登錄成功寫入userID和webkey到cookie中的代碼可見:用戶登錄接口的消息封裝腳本;自動調(diào)用userID和webkey的腳本代碼為:
1 function getCookieByName(name){2 //獲取cookie字符串
3 var strCookie=document.cookie;
4 //將多cookie切割為多個名/值對
5 var arrCookie=strCookie.split("; ");
6 //遍歷cookie數(shù)組,處理每個cookie對
7 for(var i=0;i<arrCookie.length;i++){
8 var arr=arrCookie[i].split("=");
9
10 //找到名稱為userId的cookie,并返回它的值
11 if(name==arr[0]){
12 if( typeof arr[1]=='undefined')return '';
13 return arr[1];
14 }
15 }
16 return '';
17 }
18
19 function showUseIdAndWebKey(){
20
21 setElementVal('webKey');
22 setElementVal('userID');
23
24 }
25
26 function setElementVal(elementName){
27 var webkeys=document.getElementsByName(elementName);
28 if( typeof webkeys=='undefined')return '';
29 if(webkeys&&webkeys.length>0){
30 var webkey=getCookieByName(elementName);
31 webkeys[0].value=webkey;
32 }
33
34
35 }
36 window.οnlοad=showUseIdAndWebKey;
在用戶基本資料查詢、密碼修改、好友信息查詢、游戲經(jīng)驗(yàn)值查詢等需要自動填充userID和webkey的接口頁面加入調(diào)用上述腳本的語句即可。
『備注』
?? 接口如果涉及到驗(yàn)證碼,其實(shí)現(xiàn)原理和webkey類似,通過記錄在cookie中,然后需要時通過腳本調(diào)出自動填充即可。
3、鑒權(quán)有效時間
?? ?現(xiàn)在接口測試工具的關(guān)鍵代碼實(shí)現(xiàn)已經(jīng)完成,但還面臨一個問題:接口輸入中的webkey是通過客戶端間隔5分鐘發(fā)送的心跳包到平臺服務(wù)器來保證其有效性,如果服務(wù)器在規(guī)定時間內(nèi)未收到客戶端相應(yīng)userID發(fā)送的心跳包,則超時之后webkey將無效,接口發(fā)送無效webkey將會讓平臺服務(wù)器返回鑒權(quán)不通過響應(yīng)。
?? ?此項(xiàng)鑒權(quán)功能如果通過接口測試工具代碼解決的話,將會比較麻煩:1)需要在用戶登錄接口頁面中加入成功后自動發(fā)送心跳包的代碼;2)如果測試人員想更換userID和webkey時,還需要先停止心跳包的發(fā)送,因此跟服務(wù)器開發(fā)人員溝通后,平臺服務(wù)器增加webkey有效時間的設(shè)置,測試人員在進(jìn)行平臺服務(wù)器接口功能測試時,可通過配置來將服務(wù)器未收到心跳包在判斷webkey無效的超時時間加長,此項(xiàng)功能開發(fā)人員的工作量并不大,鑒權(quán)有效時間問題解決,測試過程中溝通合作很重要。
?? ?平臺服務(wù)器接口功能測試工具實(shí)現(xiàn)完成,最后需要做的工作就是在測試之前將數(shù)據(jù)庫表及數(shù)據(jù)進(jìn)行備份,在每輪次功能測試開始時,可重新導(dǎo)入進(jìn)行數(shù)據(jù)庫還原,避免上次測試數(shù)據(jù)對預(yù)計(jì)測試結(jié)果的干擾,然后就可以按照設(shè)計(jì)的接口用例和準(zhǔn)備好的測試數(shù)據(jù)進(jìn)行功能測試了。
后續(xù)工作:后期會對平臺服務(wù)器接口測試工具進(jìn)行功能擴(kuò)展,需要擴(kuò)展的功能有:
1)每個接口頁面添加“保存”功能,測試人員可以將此接口設(shè)置的測試數(shù)據(jù)與服務(wù)器返回的輸出結(jié)果進(jìn)行保存,并且要加上之前調(diào)用用戶登錄接口時的數(shù)據(jù);
2)每個接口頁面添加“打開”功能,測試人員將保存的測試數(shù)據(jù)和測試結(jié)果讀出;
3)主頁面添加“批量執(zhí)行”功能,測試人員通過勾選已有保存好的測試數(shù)據(jù)接口,然后工具將自動執(zhí)行接口測試,并將接口返回結(jié)果與保存的測試結(jié)果進(jìn)行比對,不一致的話批量執(zhí)行完畢后顯示出來。祝愿我的思路能夠成功!
轉(zhuǎn)載于:https://www.cnblogs.com/xunmi/archive/2011/10/19/2216739.html
總結(jié)
以上是生活随笔為你收集整理的平台服务器测试3—接口测试工具实现的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SharePoint 2007 用户创建
- 下一篇: 利用proc 实现内核和用户态交换数据