<th id="uz6zr"><table id="uz6zr"><sub id="uz6zr"></sub></table></th> <tbody id="uz6zr"></tbody>
  • <menuitem id="uz6zr"><dfn id="uz6zr"></dfn></menuitem><menuitem id="uz6zr"><strong id="uz6zr"></strong></menuitem>
      1. 淺談接口測試(五)再談postman

        發表于:2020-10-22 09:46  作者:繭城寒舍   來源:簡書

        字體: | 上一篇 | 下一篇 |我要投稿 | 推薦標簽: Postman

          假設我們的需求發生了改變,增加了如下一個限制條件:
          只有登錄用戶,返回數據
          非登錄用戶,訪問返回指定提示,不返回列表數據
          根據這個分析,我嫩可能采取一下的方式來實現:
          創建一個登錄接口,登錄成功返回指定信息作為登錄憑證
          getList訪問時,攜帶獲取的憑證作為參數,沒有該參數,或者參數校驗失敗,返回空列表和提示信息
          有了以上的分析結果,我們來創建一個登錄接口文件(login.php)如下:
        <?php

        // 告訴瀏覽器返回為json類型
        header('Content-Type:application/json; charset=utf-8');

        // 較密用的key
        $key = 'zhqzs';

        // 獲取參數
        $name = $_GET['name'];
        $pwd = $_GET['pwd'];

        /**
         * 在真正的開發過程中,會操作數據庫,我們暫時用一個多維數組代替
         */
        $users = array(
            array('name' => 'zhq','pwd' => '123456','nick' => '天下第一帥'),
            array('name' => 'tom','pwd' => '654321', 'nick' => '帥的不明顯')
        );

        $tokens = array(
            'zhq' => 'db16f83919890274272f4517fbba9d76',
            'tom' => 'e10adc3949ba59abbe56e057f20f883e'
        );

        foreach($users as $key=>$value){

            if($value['name']==$name && $value['pwd']==$pwd){
                // 一通騷操作后,給$token賦值
                $token = $tokens[$name];    // 看門大爺登記,發證
                $nick_name = $value['nick'];
            }
        }

        // 組織的數據
        $data = array(
            'code' => 200,
            'msg' => '請求成功',
            'result' => array(
                'name' => $name,
                'nick' => $nick_name,
                'token' => $token,
            ),
        );

        // PHP數組轉json
        $rst = json_encode($data,JSON_UNESCAPED_UNICODE);

        // 打印結果
        echo $rst;
          1. 接口間的依賴
          如果訪問接口B之前,必須調用A接口,或者滿足A條件,那我管A叫做B的依賴
          我們把相互依賴的接口放到一個集合中,演示中我們仍然放到TestDemo集合中
          我們點擊集合右側的按鈕,然后按照提示可以完成對于集合的請求測試
          我們依然可以運行成功,沒有提示任何錯誤,這是因為我們沒有對于接口getList添加必要的參數和處理的代碼,所喲我們需要修改getList_fix增加以下代碼:
        $token = isset($_GET['token']) ? $_GET['token'] : '';

        if(!$token){
            // 組織的數據
            $data = array(
                'code' => 401,
                'msg' => '未登錄,請先登錄',
                'result' => array()
            );
             // PHP數組轉json
             $rst = json_encode($data,JSON_UNESCAPED_UNICODE);

            // 打印結果
            echo $rst;

            die();
        }
          我們把postman中getList的接口url修改為getList_fix1.php,在此運行集合測試,結果如下圖:
          這個結果,證明了我們的修改生效,下面我們怎樣建立getList對login的依賴呢?
          創建一個環境TestDemo,添加一個變量token
          在兩個接口中的tests(斷言區域)修改代碼
          創建一個環境TestDemo,添加一個變量token
          增加了環境和變量之后,回到postman主界面,下拉為當前集合選擇環境為TestDemo
          在兩個接口中的tests(斷言區域)修改代碼
          對于login的tests修改:
        //獲得token
        var jsonData = pm.response.json();
        var token = jsonData.result.token;
        //設置環境中的token變量為響應結果中的token
        pm.environment.set("token", token);
          對于getList_fix1的修改,只需要在訪問時攜帶token參數,這個參數從環境中獲取即可,具體修改如下圖:
          我們在此執行集合測試,結果如下:
          總結接口之間互相依賴的測試原理是:
          接口A通過代碼 修改環境變量的值
          接口B通過{{變量名}}獲取A設置的變量值
          集合中A----B順序執行
          ps: 其實和依賴相關的還有一個執行順序,條件分支的操作,但是由于過于復雜的測試操作,增加了測試本身的難度和出錯概率,我們在這不講了,有興趣的可以自行查找setNextRequest的關鍵字
          2. 迭代
          對于一個接口來說,當接口的參數發生改變,可能返回不同結果,對于測試來說,設計不同用例,覆蓋盡可能多的場景,我們以login為例,進行分析:
          登錄成功場景
          使用zhq + 正確密碼
          使用tom + 正確密碼
          登錄失敗場景
          使用 zhq + 錯誤密碼
          使用 tom + 錯誤密碼
          使用 lucy + 任意字符
          在進行測試之前,我們先修改login.php為login1.php增加處理登錄失敗場景的代碼:
        // 遍歷完成后使用一個變量記錄狀態,如果存在就是真,如果沒有就是假
        $flag = isSet($token) ? true : false ;


        if($flag){
            // 組織的數據
            $data = array(
                'code' => 200,
                'msg' => '請求成功',
                'result' => array(
                    'name' => $name,
                    'nick' => $nick_name,
                    'token' => $token,
                ),

            );
        }else{
            $data = array(
                'code' => 200,
                'msg' => '賬號或者密碼錯誤',
                'result' => array()
            );
        }
          那么我們針對以上的分析,難道要添加N多個請求嗎?答案是否定的,postman為我們設計了迭代器,下面我們新建一個集合TestDemo2,只針對login1接口進行測試:
          在login1接口tests中增加斷言如下:
        var jsonData = pm.response.json();

        var expect_msg = pm.variables.get("msg");

        var response_msg = jsonData.msg;

        pm.test("返回信息正常", function () {

            pm.expect(response_msg).to.eql(expect_msg);
        });
          修改接口訪問參數,使用{{}}代替:
          當前變量肯定是沒有的,需要在文件中讀取
          創建一個data.csv文件,文件內容如下:
        name,pwd,msg
        zhq,123456,登錄成功
        tom,654321,登錄成功
        zhq,222323,賬號或者密碼錯誤
        tom,ddddd,賬號或者密碼錯誤
        lucy,eeeee,賬號或者密碼錯誤
          點擊集合右側run按鈕,在選擇數據文件界面選擇data.csv
          執行集合測試,查看結果:
          postman作為一款很流程的接口測試軟件,功能自然強大無比,在簡短的文字根本沒有辦法全部交代清除,一些功能還要結合實際應用,在這里就不過多講解了,有需要的同學可自己百度
          下一小節,我們對于接口測試進行一些補充說明
          3. 總結
          使用postman的環境設置變量
          設置接口之間的依賴
          使用postman的迭代器
          集合測試時,使用文件中的數據

          本文內容不用于商業目的,如涉及知識產權問題,請權利人聯系51Testing小編(021-64471599-8017),我們將立即處理。

        評 論

        論壇新帖

        頂部 底部


        建議使用IE 6.0以上瀏覽器,800×600以上分辨率,法律顧問:上海瀛東律師事務所 張楠律師
        版權所有 上海博為峰軟件技術股份有限公司 Copyright©51testing.com 2003-2020, 滬ICP備05003035號
        投訴及意見反饋:webmaster@51testing.com; 業務聯系:service@51testing.com 021-64471599-8017

        滬公網安備 31010102002173號

        51Testing官方微信

        51Testing官方微博

        掃一掃 測試知識全知道

        在线看黄AV免费悠久