国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 操作系統(tǒng) > 正文

QUnit利用代理測試不同PHP開發(fā)服務(wù)器的json服務(wù)

2024-06-28 13:23:30
字體:
供稿:網(wǎng)友
QUnit利用代理測試不同php開發(fā)服務(wù)器的json服務(wù)

在手機(jī)應(yīng)用開發(fā)過程中,有以下單元測試的需求:

  1. 服務(wù)器用PHP代碼寫,自身沒有好的單元測試框架;
  2. 服務(wù)器有:本地服務(wù)器,測試服務(wù)器,UAT服務(wù)器,正式服務(wù)器等不同環(huán)境;
  3. 測試腳本,利用qunit,寫在js代碼中;login腳本會(huì)設(shè)置cookie,某些api調(diào)用的時(shí)候,需要將cookie帶回;

如何搭建各種不同的測試環(huán)境:

本地服務(wù)器、測試服務(wù)器、UAT服務(wù)器、正式服務(wù)器,都配置了vhost,將域名對應(yīng)到各自本地的php目錄。

正式的域名www.xxxxxx.com,指向正式服務(wù)器的ip,其他的開發(fā)服務(wù)器,通過指定代理IP來測試。

js代碼訪問服務(wù)器的時(shí)候,利用Ajax訪問,其自身沒有指定代理的功能,為了簡化測試客戶端的配置,制作PRoxy.php,

在其上利用curl庫,設(shè)置代理來訪問不同的環(huán)境;

在測試的過程中,有幾個(gè)地方可以診斷信息:

  1. network顯示的http請求數(shù)據(jù);
  2. console顯示的調(diào)試信息;
  3. qunit界面打印出來的字符串;

執(zhí)行效果如下:

主要代碼文件如下:

proxy.php

 1 <?php 2 /* 3 parameters: 4 url ==> call url; ex:http://a.xxxxxx.com/login.php 5 data ==> post data; ex:{"u":"abcd", "p":"passWord"} 6 cookie ==> cookie, can empty; ex:PHPSESSID=oh965kppina5fjdi6gv1c2mls5 7 proxy ==> proxy info, can empty; ex:test.xxxxxx.com:8001 8 */ 9 10 // phpinfo();11 // die();12 13 /*模擬瀏覽器*/14 $user_agent = "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.2; .NET CLR 1.1.4322)";15 16 $t = isset($_REQUEST['_t'])?$_REQUEST['_t']:null;17 $url = isset($_REQUEST['_url'])?$_REQUEST['_url']:"";18 // $data = isset($_REQUEST['data'])?$_REQUEST['data']:"";19 $proxy = isset($_REQUEST['_proxy'])?$_REQUEST['_proxy']:"";20 $cookie = isset($_REQUEST['_cookie'])?$_REQUEST['_cookie']:"";21 22 $data = array();23 // 將非特殊參數(shù)全部視為post數(shù)據(jù)24 foreach ($_REQUEST as $key => $value) {25     if(!in_array($key, array('_url', '_t', '_proxy', '_cookie'))) 26         $data[$key] = $value;27 }28 29 // 測試數(shù)據(jù)30 if($t) {31     $url = "http://a.ajmide.com/login.php";32     $data = array("u"=>"aabbcc", "p"=>"123456");33     $proxy = "test.xxxxxx.com:8001";34     $cookie = "";35 } else {36     // $data = json_decode($data);37 }38 // 修改agent39 $user_agent = "ajmd/test (".$proxy.")";40 $content = vcurl($url, $data, $cookie, $proxy);41 // print_r($content);42 echo($content);43 // // $content = $content . "test";44 45 // $content = json_decode($content);46 // print_r($content);47 // echo("test");48 // print_r(json_encode($content, JSON_UNESCAPED_UNICODE));49 50 function vcurl($url, $data, $cookie, $proxy) { // 模擬登錄獲取Cookie函數(shù)51     $curl = curl_init (); // 啟動(dòng)一個(gè)CURL會(huì)話52     if ($proxy && $proxy!="") {53         //以下代碼設(shè)置代理服務(wù)器54         curl_setopt ( $curl, CURLOPT_PROXY, $proxy);55     }56     curl_setopt ( $curl, CURLOPT_URL, $url ); // 要訪問的地址57     if($cookie && $cookie!="") {58         curl_setopt($curl, CURLOPT_COOKIE, $cookie);59     }60     // curl_setopt ( $curl, CURLOPT_SSL_VERIFYPEER, 0 ); // 對認(rèn)證證書來源的檢查61     // curl_setopt ( $curl, CURLOPT_SSL_VERIFYHOST, 1 ); // 從證書中檢查SSL加密算法是否存在62     curl_setopt ( $curl, CURLOPT_USERAGENT, $GLOBALS ['user_agent'] ); // 模擬用戶使用的瀏覽器63     // @curl_setopt ( $curl, CURLOPT_FOLLOWLOCATION, 1 ); // 使用自動(dòng)跳轉(zhuǎn)64     // curl_setopt ( $curl, CURLOPT_AUTOREFERER, 1 ); // 自動(dòng)設(shè)置Referer65     curl_setopt ( $curl, CURLOPT_POST, 1 ); // 發(fā)送一個(gè)常規(guī)的Post請求66     curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data ); // Post提交的數(shù)據(jù)包67     // curl_setopt ( $curl, CURLOPT_COOKIEJAR, $GLOBALS ['cookie_file'] ); // 存放Cookie信息的文件名稱68     // curl_setopt ( $curl, CURLOPT_COOKIEFILE, $GLOBALS ['cookie_file'] ); // 讀取上面所儲(chǔ)存的Cookie信息69     curl_setopt ( $curl, CURLOPT_TIMEOUT, 30 ); // 設(shè)置超時(shí)限制防止死循環(huán)70     curl_setopt ( $curl, CURLOPT_HEADER, 1); // 顯示返回的Header區(qū)域內(nèi)容71     curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 獲取的信息以文件流的形式返回72     $tmpInfo = curl_exec ( $curl ); // 執(zhí)行操作73     if (curl_errno ( $curl )) {74         echo 'call curl error. ' . curl_error ( $curl );75     }76     $info = curl_getinfo($curl);77     $httpHeaderSize = $info['header_size'];78     $pHeader = substr($tmpInfo, 0, $httpHeaderSize);79     $pContent = substr($tmpInfo, $httpHeaderSize);80 // echo "<pre>";81 // // print_r(curl_getinfo($curl));82 // print_r($pHeader);83 // echo "</pre>";84     curl_close ( $curl ); // 關(guān)閉CURL會(huì)話85     // 如果有cookie,則將cookie放入到返回?cái)?shù)據(jù)的sess字段中86     if(preg_match("/Set-Cookie: (.*);/iU", $pHeader, $arr)) {87         $json = json_decode($pContent);88         if($json!=NULL) {89             $json->cookie = $arr[1];90             $pContent = json_encode($json, JSON_UNESCAPED_UNICODE);91         }92     }93 94     // return $tmpInfo; // 返回?cái)?shù)據(jù)95     return $pContent;96 }97 ?>

test-core.js

 1 var proxy = ""; 2  3 function login(user, password, proxy, success) { 4     post('http://a.xxxxxx.com/login.php', {u:user, p:password}, null, proxy, success); 5 } 6  7 function post(_url, data, cookie, proxy, success) { 8     var url = 'proxy.php?_url='+_url; 9     if(proxy)10         url = url + "&_proxy=" + proxy;11     if (cookie)12         url = url + "&_cookie=" + encodeURI(cookie);13     console.log("====>", _url, proxy, data);14     $.ajax({15         type: 'POST',16         url: url,17         data: data,18         dataType: 'json'19     })20     .done(function(d, status, xhr){21         console.log("<====", _url, d);22         success(d);23     })24     .fail(function(xhr, status){25         console.log('post error.', status, _url, proxy)26     });27 }28 29 function parseUriP(key) {30     var parts = document.location.search.slice( 1 ).split( "&" ),31         length = parts.length,32         i = 0,33         current,34         value = "";35 36     for ( ; i < length; i++ ) {37         current = parts[ i ].split( "=" );38         if ( current[ 0 ] === key ) {39             value = current[ 1 ];40             break;41         }42     }43     return value;44 }45 46 (function() {47     var p = parseUriP("proxy");48     if(p!="")49         proxy = p;50 })();
View Code

test-msg.html

 1 <!DOCTYPE HTML> 2 <html> 3     <head> 4         <link rel="stylesheet" href="lib/qunit.CSS" type="text/css" media="screen" /> 5         <script src="lib/qunit.js"></script> 6         <script src="lib/jquery-1.11.1.js"></script> 7         <script src="lib/json2.js"></script> 8         <script type="text/javascript" src="test-core.js"></script> 9         <script src="test-msg.js"></script>10         <title>Tests - xxxxxx messge</title>11     </head>12     <body>13     <div id="header">14         <a href="?proxy=localhost:80">本地服務(wù)器</a> |15         <a href="?proxy=test.xxxxxx.com:8001">測試服務(wù)器</a> |16         <a href="?proxy=test.xxxxxx.com:8002">UAT服務(wù)器</a> |17         <a href="?">正式服務(wù)器,無代理</a> |18     </div>19     <div id="qunit"></div>20     </body>21 </html>
View Code

test-msg.js

 1 module("消息系統(tǒng)"); 2 asyncTest("登錄獲取消息", function(){ 3   login('aabbcc', '123456', proxy, function(data){ 4     // var d = JSON.parse(data); 5     equal(data.code, 0, '登錄成功:'+data.cookie); 6     this.cookie = data.cookie; 7     console.log('login sess:', data); 8     post('http://a.xxxxxx.com/msg_get_grouplist.php', {i:0, c:20}, this.cookie, proxy, function(data){ 9       equal(data.code, 0, JSON.stringify(data));10       start();11     });12   });13 });14 15 16 asyncTest("登錄發(fā)送消息", function(){17   login('aabbccdd', '123456', proxy, function(data){18     // var d = JSON.parse(data);19     equal(data.code, 0, '登錄成功:'+data.cookie);20     this.cookie = data.cookie;21     console.log('login sess:', data);22     post('http://a.xxxxxx.com/msg_get_grouplist.php', {i:0, c:20}, this.cookie, proxy, function(data){23       equal(data.code, 0, JSON.stringify(data));24       start();25     });26   });27 });


發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 运城市| 青州市| 卢龙县| 台前县| 贵定县| 垣曲县| 灵寿县| 阿勒泰市| 陇川县| 蛟河市| 神木县| 靖宇县| 五家渠市| 东宁县| 曲沃县| 星座| 大荔县| 奉节县| 上犹县| 洪洞县| 安化县| 顺义区| 娄底市| 大石桥市| 合阳县| 大姚县| 平乡县| 兴国县| 永安市| 大安市| 台南县| 清水河县| 图片| 新安县| 淄博市| 龙泉市| 治多县| 肥西县| 成安县| 麻阳| 任丘市|