第六篇 native 版本的Postman如何經過代理服務器錄製Web及手機APP請求

第四篇主要介紹了chrome app版本的postman如何安裝及如何錄製Web腳本,比較簡單。javascript

可是chrome app 版本和native 版本相比,對應chrome app 版本官方已經放棄支持了,不少內容都集成到了native版本上。css

一. 列舉幾個本人在使用過程當中發現的主要區別:html

1. native版本不在支持Interceptor,沒法像第四篇那樣介紹的很方便的錄製腳本java

2. 在自動化測試過程當中,常常須要些Tests腳本,Pre-Request Script 腳本,腳本語法有不一樣node

    (1)native app上特有的語法在chrome app上不支持;mysql

    (2)native app 是向下兼容的,能夠兼容chrome app上的語法。jquery

var jsonData = JSON.parse(responseBody)

下面都是設置環境變量:

// (1)是native postman支持的語法
pm.environment.set("Authorization_BMZY",jsonData.data)

// (2)chrome app版本的postman支持的語法
postman.setEnvironmentVariable("Authorization_BMZY", jsonData.data);  

3. 腳本調試上:ajax

(1)chrome app 沒有直接繼承控制檯,腳本調試沒法直接直觀的看到輸出內容,可是也有解決辦法:sql

  1) chrome 瀏覽器輸入:chrome://flags/,  --> 搜索:packed  ---> 啓用 Enabledchrome

  

  2) 在chrome app上,任意空白位置,右鍵 --> 檢查, 也能夠彈出一個Console,進行腳本調試

          

(2)native app 能夠直接打開Console 控制檯,腳本調試直觀方便

4. 腳本語言支持上

(1)chrome app 支持JavaScript語言,但不支持cheerio 庫,對於返回內容爲Html,但願從html裏提取數據做爲測試參數時,很不方便,至於能不能提取我暫時尚未找打經過JavaScript能夠提取的方法,若是有知道怎麼作的能夠留言給我,很是感謝。

(2)native app 上內置了cheerio 庫,可使用相似jquery的語法,很方便的從Html裏提取數據

下面是測試中遇到的一個坑,花了一天半才找到這種解決方法。

下面是在公司項目中的Response,敏感信息已刪除,但不影響內容提取

<!DOCTYPE html>
<html lang="en">
    <head>
        <title>結算系統</title>
        <META charset="UTF-8" />
        <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=utf-8" />
        <META HTTP-EQUIV="Pragma" CONTENT="no-cache" />
        <META HTTP-EQUIV="Cache-Control" CONTENT="no-cache" />
        <META HTTP-EQUIV="Expires" CONTENT="0" />
        <link href="/settle-center-app/htdocs/css/bootstrap/bootstrap.css" rel="stylesheet" media="screen" />
        <LINK href="/settle-center-app/htdocs/css/app.css" type="text/css" rel="stylesheet" />
        <link href="/settle-center-app/htdocs/css/bootstrap/bootstrap-responsive.css" rel="stylesheet" media="screen" />
        <link href="//netdna.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" rel="stylesheet">
        <style type="text/css">
    body {
      padding-top: 60px;
      padding-bottom: 40px;

    }
    .table {
      word-break: break-all;
    }
    .table-detail td {
      width:50%;
    }
    .table-print {
      border:1px solid black;
    }
    .table-print tr{
      border:1px solid black;
    }
    .table-print td{
      border:1px solid black;
    }
    .spanTitle {
      display:block;
      float:left;
      width:120px;
      text-align: right;
    }
    @media print{
      .table table{border:1px solid #F00}
    }


  </style>
        <script src="/settle-center-app/htdocs/scripts/common.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/menuHover.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/bootstrap/jquery-1.8.3.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/jquery.nyroModal.custom.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/bootstrap/bootstrap.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/app.js" type="text/javascript"></script>
        <script type="text/javascript">

  </script>
        <script src="/settle-center-app/htdocs/scripts/jquery.bgiframe.min.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/jquery.idTabs.min.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/jquery.maxlength.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/datepick/jquery.datepick.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/datepick/jquery.datepick-zh-CN.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/qtip/jquery.qtip-1.0.0.min.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/jquery.autocomplete.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/jquery.form.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/ajaxfileupload.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/scripts/layer-v3.1.1/layer/layer.js" type="text/javascript"></script>
        <script src="/settle-center-app/htdocs/My97DatePicker/WdatePicker.js" type="text/javascript"></script>

    </head>
    <body>
        <div class="container">
            <div class="box-content" style="margin-top:25px;" id="searchBox">
                <div id="blankDiv" class="container">
                    <div class="box-header well" data-original-title="">
                        <h2>通常付款管理</h2>

                    </div>
                    <form id="orderForm" name="orderForm" action="fundOutList.htm" method="post" accept-charset="UTF-8">
                        <input id="partner" name ="partner" type="hidden" value=""/>
                        <input id="amountSize" name ="amountSize" type="hidden" value="0"/>
                        <table class="table table-striped table-bordered">
                            <tr>
                                <td>
                    精確查詢:
                </td>
                                <td>
                                    <select class="newbord ntxt2" id="accurateQuery" name="accurateQuery" onchange="changeType();">
                                        <option value="tradeVoucherNo">付款單編號</option>
                                        <option value="bizOrderNo" selected="selected">業務訂單號</option>
                                        <option value="contractNo">合同編號</option>
                                        <option value="custName">車主姓名</option>
                                        <option value="inBankAccountNo">收款帳號</option>
                                        <option value="submitUser">提交人姓名</option>
                                        <option value="submitMobile">提交人手機號</option>
                                        <option value="inAccountName">收款帳戶名稱</option>

                                    </select>
                                    <input type="text" class="newbord ntxt2" id="tradeVoucherNo" name="tradeVoucherNo" value=""/>
                                    <input type="text" class="newbord ntxt2" id="bizOrderNo" name="bizOrderNo" value="20180928106519"/>
                                    <input type="text" class="newbord ntxt2" id="contractNo" name="contractNo" value=""/>
                                    <input type="text" class="newbord ntxt2" id="custName" name="custName" value=""/>
                                    <input type="text" class="newbord ntxt2" id="inBankAccountNo" name="inBankAccountNo" value=""/>
                                    <input type="text" class="newbord ntxt2" id="submitUser" name="submitUser" value=""/>
                                    <input type="text" class="newbord ntxt2" id="submitMobile" name="submitMobile" value=""/>
                                    <input type="text" class="newbord ntxt2" id="inAccountName" name="inAccountName" value=""/>

                                </td>
                                <td>
                    付款類型:
                </td>
                                <td>
                                    <select class="newbord ntxt2" id="bizType" name="bizType" value="BAOMAI_CHEKUAN">
                                        <option value="">請選擇</option>
                                        <option value="BAOMAI_CHEKUAN" selected="selected" >保賣車款</option>
                                        <option value="BAOZHENGJIN_CHEKUAN">保證金退款</option>
                                        <option value="TAOCHEPAI_TIXIAN">淘車拍提現</option>
                                        <option value="SHANGHU_JIESUAN">商戶結算</option>
                                        <option value="JINRONGDAN_FANGKUAN">金融單放款</option>
                                        <option value="RENGONG_FUKUAN">人工付款</option>
                                        <option value="ZIJIN_DIAOBO">資金調撥</option>
                                        <option value="RENGONG_TUIKUAN">人工退款</option>
                                        <option value="PILIANG_DAIFU">批量代付</option>
                                        <option value="YIBAN_ZHUANZHANG">通常轉帳</option>
                                        <option value="YANZHENG_DAKUAN">驗證打款</option>
                                        <option value="SHOUXUFEI">手續費</option>
                                        <option value="MENDIAN">門店付款</option>
                                        <option value="OTHER">其餘</option>

                                    </select>

                                </td>


                            </tr>
                            <tr>
                                <td>
                    審批狀態:
                </td>
                                <td>
                                    <select class="newbord ntxt2" id="approveStatus" name="approveStatus" value="0">
                                        <option value="">請選擇</option>
                                        <option value="0" selected="selected">待審批</option>
                                        <option value="100">審批經過</option>
                                        <option value="902">審批拒絕</option>

                                    </select>

                                </td>
                                <td>
                    付款狀態:
                </td>
                                <td>
                                    <select class="newbord ntxt2" id="paymentStatus" name="paymentStatus" value="">
                                        <option value="">請選擇</option>
                                        <option value="101">付款中</option>
                                        <option value="102">提交失敗</option>
                                        <option value="401">付款成功</option>
                                        <option value="901">付款失敗</option>

                                    </select>

                                </td>


                            </tr>
                            <tr>
                                <td>
                    收款帳戶類型:
                </td>
                                <td>
                                    <select class="newbord ntxt2" id="bankType" name="bankType" value="">
                                        <option value="">請選擇</option>
                                        <option value="BANK">銀行帳戶</option>
                                        <option value="TAOCHEPAY">內部帳戶</option>


                                    </select>

                                </td>
                                <td>
                    建立時間:
                </td>
                                <td>
                                    <input id="startTime" name ="startTime" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" readonly value=""/>
<input id="endTime" name ="endTime" onclick="WdatePicker({dateFmt:'yyyy-MM-dd HH:mm:ss'})" readonly value=""/>

                                </td>

                            </tr>
                            <tr>
                                <td>
                    商戶名稱:
                </td>
                                <td>
                                    <select class="newbord ntxt2" id="partnerId" name="partnerId" value="">
                                        <option value="">請選擇</option>

                                    </select>

                                </td>

                            </tr>
                            <tr>
                                <td colspan="4" style="text-align:center;">
                                    <button class="btn" type="button" id="submitButton" onclick="checkParam()">查詢</button>
                                    <button class="btn" type="button" id="resetButton" onclick="cleanAll();">重置</button>

                                </td>

                            </tr>

                        </table>

                    </form>
                    <div class="box-header well" data-original-title>
                        <div class="box-icon">
                            <button type="button" onclick="exportExcel()">導出</button>

                        </div>

                    </div>
                    <div id="logList" class="box-content">
                        <table id="Gv_MainList" class="table table-striped table-bordered" >
                            <tr>
                                <th width="5%">商戶名稱</th>
                                <th width="5%">付款單編號</th>
                                <th width="8%">外部交易憑證號</th>
                                <th width="8%">業務訂單號</th>
                                <th width="8%">付款金額(元)
                                    <i id="sortAmount" onclick="sortAmount()" class="fa fa-sort" aria-hidden="true"></i>

                                </th>
                                <th width="5%">付款類型</th>
                                <th width="5%">合同編號</th>
                                <th width="5%">車主姓名</th>
                                <th width="5%">收款帳戶類型</th>
                                <th width="5%">收款銀行</th>
                                <th width="10%">收款方開戶行</th>
                                <th width="5%">收款行帳戶名稱</th>
                                <th width="5%">收款帳號</th>
                                <th width="5%">審批狀態</th>
                                <th width="5%">付款狀態</th>
                                <th width="5%">建立時間</th>
                                <th width="70px">操做</th>

                            </tr>
                            <tr>
                                <td>
                                    <span>平臺方</span>
                                </td>
                                <td>
                                    <span>20180928010000040523</span>
                                </td>
                                <td>
                                    <span>ea8d034f9b174c97be16d95251382845</span>
                                </td>
                                <td>
                                    <span>20180928106519</span>
                                </td>
                                <td>
                                    <span>868000.00</span>
                                </td>

                                </td>

                            </tr>

                        </table>
                    </div>

                </div>
            </div>
        </div>

    <script src="jquery-3.1.1.js"></script>
    
        <!--jQuery 提取方法-->
    <script>
        var s = $("#Gv_MainList tr td span").eq(1).css("color","red");
        console.log(s.text());

    </script>


    </body>
</html>
請求返回是個html對象,刪減版

使用cheerio庫的基本操做

// 1.加載返回對象,$獲得的是個function類型
const $ = cheerio.load(responseBody);

// 獲取<title>標籤裏的文字
$('title').text(); 

// 2.獲取整個網頁,結果是String類型 
var str = $.html();

解決我遇到的問題,須要從response裏提取到須要的值,並設置爲變量,做爲後面請求的參數

固然,這種方式仍是不夠健壯的,比較容易出現問題,不過經過增長請求條件進行限定,能較好的規避一些問題;

其實更好的解決方法是能夠經過postman + nodejs + xmysql查詢到值更好,可是每每跨系統業務中,其餘項目組的數據庫不給你開放,無奈的選擇只能從

頁面裏提取,此處心裏戲有感的同窗能夠腦補。

// 1.加載返回對象,$獲得的是個function類型
const $ = cheerio.load(responseBody);
console.log(typeof $);

// 2.獲得一個相似jquery的object,這一步很關鍵,以前失敗了不少次,就是沒有用這一步將$ 轉換爲object,也就無從談起下面的元素定位
var s = $('html');

// 先經過id=Gv_MainList定位,而後是該id下的tr下的td下的全部span標籤,取第二個sapn
var s1 = $("#Gv_MainList tr td span").eq(1);
// console.log(s1.text());

// 3. 獲取該span的text文本,並設置爲變量
postman.setEnvironmentVariable("tradeVoucherNo", s1.text());

二. native版本設置代理,錄製手機APP腳本

 1. File -->Settings --> Proxy --> 開啓 Use System Proxy

       

  

 

 Settings-> General-> 開啓SSL

        

2. 鏈接代理服務器

        

 3. PC端 ---> cmd ---> ipconfig, 獲取IP地址

 4. 手機端配置代理,以下圖

         

5. 在手機端操做APP,請求就被記錄在postman的History下面了

         

6. 篩選你須要的請求,能夠保存到Collection裏

至此,手機端錄製http請求就OK啦

三. native版本錄製Web端腳本

1. postman的配置都同上面一致

2. 以Firefox爲例,配置瀏覽器的代理設置,具體配置過程以下圖所示: 

    

備註:

開了代理後,對於HTTP請求,能夠正常的在APP端或者WEB端訪問,可是對於HTTPS的請求,因爲證書問題,沒法訪問。

相關文章
相關標籤/搜索