亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 操作系統 > 正文

QUnit利用代理測試不同PHP開發服務器的json服務

2024-06-28 13:23:30
字體:
來源:轉載
供稿:網友
QUnit利用代理測試不同php開發服務器的json服務

在手機應用開發過程中,有以下單元測試的需求:

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

如何搭建各種不同的測試環境:

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

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

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

在其上利用curl庫,設置代理來訪問不同的環境;

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

  1. network顯示的http請求數據;
  2. console顯示的調試信息;
  3. qunit界面打印出來的字符串;

執行效果如下:

主要代碼文件如下:

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 // 將非特殊參數全部視為post數據24 foreach ($_REQUEST as $key => $value) {25     if(!in_array($key, array('_url', '_t', '_proxy', '_cookie'))) 26         $data[$key] = $value;27 }28 29 // 測試數據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函數51     $curl = curl_init (); // 啟動一個CURL會話52     if ($proxy && $proxy!="") {53         //以下代碼設置代理服務器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 ); // 對認證證書來源的檢查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 ); // 使用自動跳轉64     // curl_setopt ( $curl, CURLOPT_AUTOREFERER, 1 ); // 自動設置Referer65     curl_setopt ( $curl, CURLOPT_POST, 1 ); // 發送一個常規的Post請求66     curl_setopt ( $curl, CURLOPT_POSTFIELDS, $data ); // Post提交的數據包67     // curl_setopt ( $curl, CURLOPT_COOKIEJAR, $GLOBALS ['cookie_file'] ); // 存放Cookie信息的文件名稱68     // curl_setopt ( $curl, CURLOPT_COOKIEFILE, $GLOBALS ['cookie_file'] ); // 讀取上面所儲存的Cookie信息69     curl_setopt ( $curl, CURLOPT_TIMEOUT, 30 ); // 設置超時限制防止死循環70     curl_setopt ( $curl, CURLOPT_HEADER, 1); // 顯示返回的Header區域內容71     curl_setopt ( $curl, CURLOPT_RETURNTRANSFER, 1 ); // 獲取的信息以文件流的形式返回72     $tmpInfo = curl_exec ( $curl ); // 執行操作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 ); // 關閉CURL會話85     // 如果有cookie,則將cookie放入到返回數據的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; // 返回數據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">本地服務器</a> |15         <a href="?proxy=test.xxxxxx.com:8001">測試服務器</a> |16         <a href="?proxy=test.xxxxxx.com:8002">UAT服務器</a> |17         <a href="?">正式服務器,無代理</a> |18     </div>19     <div id="qunit"></div>20     </body>21 </html>
View Code

test-msg.js

 1 module("消息系統"); 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("登錄發送消息", 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 });


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品av网站| xxxxxxxxx欧美| 欧美电影电视剧在线观看| 日韩中文在线中文网在线观看| 国产午夜一区二区| 国产日韩欧美电影在线观看| 欧美精品18videos性欧| 成人性教育视频在线观看| 国产精品女人久久久久久| 91久久精品一区| 欧美日韩另类视频| 海角国产乱辈乱精品视频| 亚洲精品国产精品国产自| 国产精品久久久91| 欧美激情视频网站| 国产精品极品美女在线观看免费| 欧美精品亚州精品| 国产精品电影观看| 国产69久久精品成人| 欧美国产亚洲视频| 国产成人一区二区三区| 国产精品自拍小视频| 亚洲美女激情视频| 久久精品中文字幕一区| 中文字幕免费精品一区| 中文字幕av一区二区三区谷原希美| 亚洲成色777777在线观看影院| 国产精品久久久久久久久久东京| 欧美性极品xxxx做受| 一区二区成人av| 国产精品69av| 亚洲视频axxx| 欧美亚洲国产日韩2020| 欧美高跟鞋交xxxxxhd| 亚洲福利视频网站| 日韩av影片在线观看| www亚洲精品| 操人视频在线观看欧美| 日韩在线观看免费av| 亚洲经典中文字幕| 久久久久久久97| 96sao精品视频在线观看| 久久久久久18| 亚洲午夜未满十八勿入免费观看全集| 国产成人精品日本亚洲专区61| 亚洲毛片在线看| 久久久久久这里只有精品| 国产精品免费久久久久影院| 91精品国产91久久久| 亚洲国内精品视频| 国产精品视频一区二区高潮| 国产69久久精品成人| 欧美激情a在线| 日韩欧美亚洲国产一区| 久久精品视频在线观看| 欧美成年人在线观看| 亚州国产精品久久久| 中文字幕亚洲一区二区三区| 欧美在线视频免费| 亚洲欧美资源在线| 日韩在线中文字幕| 日本成人免费在线| 欧美美女15p| 欧美成人亚洲成人日韩成人| 亚洲视频在线播放| 97视频色精品| 日韩av在线播放资源| 69视频在线免费观看| 亚洲午夜精品久久久久久久久久久久| 97在线精品国自产拍中文| 亚洲国产成人久久综合| 在线视频一区二区| 亚洲午夜未删减在线观看| 久久全国免费视频| 精品国产一区二区三区久久狼黑人| 久久久综合av| 久久激情视频久久| 九九热精品视频国产| 日韩视频第一页| 欧美多人爱爱视频网站| 色偷偷av一区二区三区乱| 中文字幕日韩有码| 欧洲一区二区视频| 日韩精品极品毛片系列视频| 日韩69视频在线观看| 亚洲天堂一区二区三区| 2018国产精品视频| 日韩精品在线影院| 国内精品小视频| 一个色综合导航| 日韩av免费在线| 在线视频日本亚洲性| www.欧美视频| 欧美尤物巨大精品爽| 国产精选久久久久久| 中文字幕亚洲一区二区三区| 久久久久久com| 国产精品极品美女在线观看免费| 国内精品久久影院| 欧美成人精品一区| 欧美高清在线播放| 中文字幕日韩av| 欧美成年人视频网站| 成人激情在线观看| 国内偷自视频区视频综合| 国产欧亚日韩视频| 国产精品私拍pans大尺度在线| 92看片淫黄大片看国产片| 欧美肥臀大乳一区二区免费视频| 萌白酱国产一区二区| 午夜精品福利在线观看| 国产精品高清在线观看| 国产精品免费一区| 久久精品人人做人人爽| 欧美日韩人人澡狠狠躁视频| 国产69精品久久久久9| 国产亚洲欧洲高清一区| 国产欧美日韩免费| 国产精品成人品| 日韩欧美国产激情| 日本成人激情视频| 亚洲精品在线不卡| 亚洲一区二区免费在线| 久久精品国产精品亚洲| 国产精品丝袜一区二区三区| 色综合老司机第九色激情| 国产高清视频一区三区| 精品久久久久久电影| 国产精品69精品一区二区三区| 国产精品中文字幕在线观看| 韩国19禁主播vip福利视频| 国产精品吊钟奶在线| 日韩成人网免费视频| 日韩精品999| 久久欧美在线电影| 中文字幕亚洲欧美| 欧美在线视频免费观看| 午夜剧场成人观在线视频免费观看| 国产婷婷97碰碰久久人人蜜臀| 欧洲成人性视频| 91久久精品国产91久久| 精品无人区乱码1区2区3区在线| 中文字幕亚洲图片| 激情av一区二区| 久久精品成人欧美大片古装| 亚洲精品日韩久久久| 国产一区二区三区免费视频| 亚洲韩国青草视频| 日韩免费在线观看视频| 最近中文字幕日韩精品| 97色在线视频| 隔壁老王国产在线精品| 日韩av中文字幕在线免费观看| 久久全国免费视频| 欧美精品18videos性欧美| 欧美日韩国产二区| 亚洲第一网中文字幕| 成人黄色片网站| 国产欧美日韩中文| 日本午夜精品理论片a级appf发布| 日本不卡视频在线播放| 欧美黑人狂野猛交老妇| 日韩在线视频网| 中文字幕av一区二区三区谷原希美|