平台服务器测试3—接口测试工具实现
?? ?平臺服務器的接口測試用例及測試數據準備完畢后,接下來的工作就是如何去進行接口功能測試了,如果使用客戶端來進行平臺服務器的接口測試,不但某些測試用例無法進行覆蓋(例如上傳不合法的版本號),而且有的輸入值需要通過客戶端復雜的操作才能實現,現在我們需要能方便定制輸入數據的工具來協助進行接口測試。
一、工具頁面設計
開始對所需要的接口功能測試工具進行設計,根據測試人員能夠對每個測試接口輸入定制的測試數據、然后能夠查看輸出結果,平臺服務器接口通訊遵循HTTP和HTTPS協議,因此測試工具可以使用Web瀏覽器來做為測試數據的通訊載體,使用Dreamweaver工具進行測試工具的布局設計:
?? ?左側是待測試接口的集合,通過表格進行排列,點擊左側的接口名稱,將會在右側顯示相應的接口頁面,測試人員在輸入參數欄中進行測試數據的設置,點擊【提交】按鍵即將接口測試值發給平臺服務器,響應消息將會在輸出結果欄中直接顯示。具體代碼見:
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>平臺服務器接口測試工具</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>
『備注』
?? 接口功能測試工具沒有平臺服務器IP地址的設置,是因為平臺服務器是通過域名訪問,可以修改hosts文件來訪問指定的平臺服務器。
二、測試工具實現
1、接口消息數據封裝
?? ?Web瀏覽器盡管能夠幫助我們進行發送和接收HTTP消息操作、但是每個接口HTTP消息體內容通過web瀏覽器無法進行封裝,因此我將使用jQuery庫、通過javascript腳本來進行接口數據封裝操作,以用戶登錄接口為例,數據封裝代碼為:
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或者html!!!
9 data: $('#userLoginForm').serialize(), //傳入的測試參數
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>
?? ?用戶每次成功登錄平臺時,會由平臺服務器通過(userID+系統時間串+隨機數)再經MD5算法計算出一個唯一值webkey,如果測試基本資料查詢、密碼修改、好友信息查詢、游戲經驗值查詢等接口時,都需要在被調用接口中輸入登錄時的userID和webkey,如果在測試這些接口時,都需要人工先調用用戶登錄接口,再將userID、webkey的值copy到被調用接口的輸入項中將會非常繁瑣,因此將通過cookie來進行userID、webkey的自動填充。
?? ?在使用接口功能測試工具時,都需先通過用戶登錄接口進行一次登錄,然后在測試用戶基本資料查詢、密碼修改、好友信息查詢、游戲經驗值查詢等接口時,無需用戶輸入userID和webkey,將會通過javascript腳本將cookie中登錄生成的userID和webkey取出,并自動填充被測試接口的userID和webkey相應項。
登錄成功寫入userID和webkey到cookie中的代碼可見:用戶登錄接口的消息封裝腳本;自動調用userID和webkey的腳本代碼為:
1 function getCookieByName(name){2 //獲取cookie字符串
3 var strCookie=document.cookie;
4 //將多cookie切割為多個名/值對
5 var arrCookie=strCookie.split("; ");
6 //遍歷cookie數組,處理每個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;
在用戶基本資料查詢、密碼修改、好友信息查詢、游戲經驗值查詢等需要自動填充userID和webkey的接口頁面加入調用上述腳本的語句即可。
『備注』
?? 接口如果涉及到驗證碼,其實現原理和webkey類似,通過記錄在cookie中,然后需要時通過腳本調出自動填充即可。
3、鑒權有效時間
?? ?現在接口測試工具的關鍵代碼實現已經完成,但還面臨一個問題:接口輸入中的webkey是通過客戶端間隔5分鐘發送的心跳包到平臺服務器來保證其有效性,如果服務器在規定時間內未收到客戶端相應userID發送的心跳包,則超時之后webkey將無效,接口發送無效webkey將會讓平臺服務器返回鑒權不通過響應。
?? ?此項鑒權功能如果通過接口測試工具代碼解決的話,將會比較麻煩:1)需要在用戶登錄接口頁面中加入成功后自動發送心跳包的代碼;2)如果測試人員想更換userID和webkey時,還需要先停止心跳包的發送,因此跟服務器開發人員溝通后,平臺服務器增加webkey有效時間的設置,測試人員在進行平臺服務器接口功能測試時,可通過配置來將服務器未收到心跳包在判斷webkey無效的超時時間加長,此項功能開發人員的工作量并不大,鑒權有效時間問題解決,測試過程中溝通合作很重要。
?? ?平臺服務器接口功能測試工具實現完成,最后需要做的工作就是在測試之前將數據庫表及數據進行備份,在每輪次功能測試開始時,可重新導入進行數據庫還原,避免上次測試數據對預計測試結果的干擾,然后就可以按照設計的接口用例和準備好的測試數據進行功能測試了。
后續工作:后期會對平臺服務器接口測試工具進行功能擴展,需要擴展的功能有:
1)每個接口頁面添加“保存”功能,測試人員可以將此接口設置的測試數據與服務器返回的輸出結果進行保存,并且要加上之前調用用戶登錄接口時的數據;
2)每個接口頁面添加“打開”功能,測試人員將保存的測試數據和測試結果讀出;
3)主頁面添加“批量執行”功能,測試人員通過勾選已有保存好的測試數據接口,然后工具將自動執行接口測試,并將接口返回結果與保存的測試結果進行比對,不一致的話批量執行完畢后顯示出來。祝愿我的思路能夠成功!
轉載于:https://www.cnblogs.com/xunmi/archive/2011/10/19/2216739.html
總結
以上是生活随笔為你收集整理的平台服务器测试3—接口测试工具实现的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SharePoint 2007 用户创建
- 下一篇: 利用proc 实现内核和用户态交换数据