日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

平台服务器测试3—接口测试工具实现

發(fā)布時(shí)間:2024/8/22 编程问答 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 平台服务器测试3—接口测试工具实现 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

?? ?平臺(tái)服務(wù)器的接口測(cè)試用例及測(cè)試數(shù)據(jù)準(zhǔn)備完畢后,接下來的工作就是如何去進(jìn)行接口功能測(cè)試了,如果使用客戶端來進(jìn)行平臺(tái)服務(wù)器的接口測(cè)試,不但某些測(cè)試用例無法進(jìn)行覆蓋(例如上傳不合法的版本號(hào)),而且有的輸入值需要通過客戶端復(fù)雜的操作才能實(shí)現(xiàn),現(xiàn)在我們需要能方便定制輸入數(shù)據(jù)的工具來協(xié)助進(jìn)行接口測(cè)試。

一、工具頁(yè)面設(shè)計(jì)

  開始對(duì)所需要的接口功能測(cè)試工具進(jìn)行設(shè)計(jì),根據(jù)測(cè)試人員能夠?qū)γ總€(gè)測(cè)試接口輸入定制的測(cè)試數(shù)據(jù)、然后能夠查看輸出結(jié)果,平臺(tái)服務(wù)器接口通訊遵循HTTPHTTPS協(xié)議,因此測(cè)試工具可以使用Web瀏覽器來做為測(cè)試數(shù)據(jù)的通訊載體,使用Dreamweaver工具進(jìn)行測(cè)試工具的布局設(shè)計(jì):

?? ?左側(cè)是待測(cè)試接口的集合,通過表格進(jìn)行排列,點(diǎn)擊左側(cè)的接口名稱,將會(huì)在右側(cè)顯示相應(yīng)的接口頁(yè)面,測(cè)試人員在輸入?yún)?shù)欄中進(jìn)行測(cè)試數(shù)據(jù)的設(shè)置,點(diǎn)擊【提交】按鍵即將接口測(cè)試值發(fā)給平臺(tái)服務(wù)器,響應(yīng)消息將會(huì)在輸出結(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>平臺(tái)服務(wù)器接口測(cè)試工具</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>

『備注』

?? 接口功能測(cè)試工具沒有平臺(tái)服務(wù)器IP地址的設(shè)置,是因?yàn)槠脚_(tái)服務(wù)器是通過域名訪問,可以修改hosts文件來訪問指定的平臺(tái)服務(wù)器。

二、測(cè)試工具實(shí)現(xiàn)

1、接口消息數(shù)據(jù)封裝

?? ?Web瀏覽器盡管能夠幫助我們進(jìn)行發(fā)送和接收HTTP消息操作、但是每個(gè)接口HTTP消息體內(nèi)容通過web瀏覽器無法進(jìn)行封裝,因此我將使用jQuery庫(kù)、通過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', //這里可以不寫,但千萬(wàn)別寫text或者h(yuǎn)tml!!!
9 data: $('#userLoginForm').serialize(), //傳入的測(cè)試參數(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>

?? ?用戶每次成功登錄平臺(tái)時(shí),會(huì)由平臺(tái)服務(wù)器通過(userID+系統(tǒng)時(shí)間串+隨機(jī)數(shù))再經(jīng)MD5算法計(jì)算出一個(gè)唯一值webkey,如果測(cè)試基本資料查詢、密碼修改、好友信息查詢、游戲經(jīng)驗(yàn)值查詢等接口時(shí),都需要在被調(diào)用接口中輸入登錄時(shí)的userIDwebkey,如果在測(cè)試這些接口時(shí),都需要人工先調(diào)用用戶登錄接口,再將userIDwebkey的值copy到被調(diào)用接口的輸入項(xiàng)中將會(huì)非常繁瑣,因此將通過cookie來進(jìn)行userIDwebkey的自動(dòng)填充。

?? ?在使用接口功能測(cè)試工具時(shí),都需先通過用戶登錄接口進(jìn)行一次登錄,然后在測(cè)試用戶基本資料查詢、密碼修改、好友信息查詢、游戲經(jīng)驗(yàn)值查詢等接口時(shí),無需用戶輸入userIDwebkey,將會(huì)通過javascript腳本將cookie中登錄生成的userIDwebkey取出,并自動(dòng)填充被測(cè)試接口的userIDwebkey相應(yīng)項(xiàng)。

登錄成功寫入userIDwebkeycookie中的代碼可見:用戶登錄接口的消息封裝腳本;自動(dòng)調(diào)用userIDwebkey的腳本代碼為:

1 function getCookieByName(name){
2 //獲取cookie字符串
3 var strCookie=document.cookie;
4 //將多cookie切割為多個(gè)名/值對(duì)
5 var arrCookie=strCookie.split("; ");
6 //遍歷cookie數(shù)組,處理每個(gè)cookie對(duì)
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)值查詢等需要自動(dòng)填充userIDwebkey的接口頁(yè)面加入調(diào)用上述腳本的語(yǔ)句即可。

1 <script type="text/javascript" src="showWebKey.js"></script>

『備注』

?? 接口如果涉及到驗(yàn)證碼,其實(shí)現(xiàn)原理和webkey類似,通過記錄在cookie中,然后需要時(shí)通過腳本調(diào)出自動(dòng)填充即可。

3、鑒權(quán)有效時(shí)間

?? ?現(xiàn)在接口測(cè)試工具的關(guān)鍵代碼實(shí)現(xiàn)已經(jīng)完成,但還面臨一個(gè)問題:接口輸入中的webkey是通過客戶端間隔5分鐘發(fā)送的心跳包到平臺(tái)服務(wù)器來保證其有效性,如果服務(wù)器在規(guī)定時(shí)間內(nèi)未收到客戶端相應(yīng)userID發(fā)送的心跳包,則超時(shí)之后webkey將無效,接口發(fā)送無效webkey將會(huì)讓平臺(tái)服務(wù)器返回鑒權(quán)不通過響應(yīng)。

?? ?此項(xiàng)鑒權(quán)功能如果通過接口測(cè)試工具代碼解決的話,將會(huì)比較麻煩:1)需要在用戶登錄接口頁(yè)面中加入成功后自動(dòng)發(fā)送心跳包的代碼;2)如果測(cè)試人員想更換userIDwebkey時(shí),還需要先停止心跳包的發(fā)送,因此跟服務(wù)器開發(fā)人員溝通后,平臺(tái)服務(wù)器增加webkey有效時(shí)間的設(shè)置,測(cè)試人員在進(jìn)行平臺(tái)服務(wù)器接口功能測(cè)試時(shí),可通過配置來將服務(wù)器未收到心跳包在判斷webkey無效的超時(shí)時(shí)間加長(zhǎng),此項(xiàng)功能開發(fā)人員的工作量并不大,鑒權(quán)有效時(shí)間問題解決,測(cè)試過程中溝通合作很重要。

?? ?平臺(tái)服務(wù)器接口功能測(cè)試工具實(shí)現(xiàn)完成,最后需要做的工作就是在測(cè)試之前將數(shù)據(jù)庫(kù)表及數(shù)據(jù)進(jìn)行備份,在每輪次功能測(cè)試開始時(shí),可重新導(dǎo)入進(jìn)行數(shù)據(jù)庫(kù)還原,避免上次測(cè)試數(shù)據(jù)對(duì)預(yù)計(jì)測(cè)試結(jié)果的干擾,然后就可以按照設(shè)計(jì)的接口用例和準(zhǔn)備好的測(cè)試數(shù)據(jù)進(jìn)行功能測(cè)試了。

后續(xù)工作:后期會(huì)對(duì)平臺(tái)服務(wù)器接口測(cè)試工具進(jìn)行功能擴(kuò)展,需要擴(kuò)展的功能有:

1)每個(gè)接口頁(yè)面添加“保存”功能,測(cè)試人員可以將此接口設(shè)置的測(cè)試數(shù)據(jù)與服務(wù)器返回的輸出結(jié)果進(jìn)行保存,并且要加上之前調(diào)用用戶登錄接口時(shí)的數(shù)據(jù);

2)每個(gè)接口頁(yè)面添加“打開”功能,測(cè)試人員將保存的測(cè)試數(shù)據(jù)和測(cè)試結(jié)果讀出;

3)主頁(yè)面添加“批量執(zhí)行”功能,測(cè)試人員通過勾選已有保存好的測(cè)試數(shù)據(jù)接口,然后工具將自動(dòng)執(zhí)行接口測(cè)試,并將接口返回結(jié)果與保存的測(cè)試結(jié)果進(jìn)行比對(duì),不一致的話批量執(zhí)行完畢后顯示出來。祝愿我的思路能夠成功!



轉(zhuǎn)載于:https://www.cnblogs.com/xunmi/archive/2011/10/19/2216739.html

總結(jié)

以上是生活随笔為你收集整理的平台服务器测试3—接口测试工具实现的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。