Postman +Newman+Jenkins+釘釘 實現(xiàn)持續(xù)集成的接口自動化

本文已被51測試網(wǎng)收錄:https://mp.weixin.qq.com/s/j1OZOiqmYQ5Yc2hFZrTP8g

目錄

一、<a href="#1">postman 基礎(chǔ)知識 </a>
二、<a href="#2">postman 變量與集合</a>
三、<a href="#3">postman 腳本應(yīng)用(sandbox)</a>
四、<a href="#4">postman 接口自動化實現(xiàn)</a>
五、<a href="#5">postman 與第三方框架結(jié)合</a>
六、<a href="#6">實戰(zhàn)演練(合同系統(tǒng))</a>

<a name ="1" id="1">

一、postman 基礎(chǔ)知識

文檔:官方文檔
工具:下載頁面

1. postman 版本選擇

postman分為chrome插件版和native版本,插件版的有很多功能都受限制:
比如native必須要安裝擴展才可以操作cookie,headers設(shè)置受限制,
沒有native版本的Postman console,非常不方便調(diào)試

2.為什么選擇postman作為自動化框架

優(yōu)點: 門檻低,上手快,界面操作簡潔方便
優(yōu)點: 使用js語言編寫腳本,語法簡單
優(yōu)點: 自帶各種代碼模塊,按需使用即可
優(yōu)點: 自動化框架有命令行版本:newman,方便放在服務(wù)器上運行,做持續(xù)集成
優(yōu)點: 支持抓包,保存歷史記錄,多終端,多用戶同步測試用例
優(yōu)點: 支持讀取數(shù)據(jù)文件,json,csv
優(yōu)點: 如果項目有Swagger生成API文檔,JSON文件可以直接導(dǎo)入Postman來生成用例

不支持:通過url搜索用例,通過命令行傳參修改環(huán)境變量,不能指定執(zhí)行失敗的測試用例
不理想:不能操作文件相關(guān)的操作,不能讀寫數(shù)據(jù)庫,不能使用非HTTP協(xié)議
不理想:不方便調(diào)試自動化代碼。

3. 賬號和數(shù)據(jù)同步

用戶免費注冊賬號后可以獲得以下權(quán)限:
①同步和備份歷史、集合、環(huán)境、與指頭
②輕松處理來自不同機器的postman實例


image.png

4. 發(fā)送請求

強調(diào)點:需要發(fā)送上傳文件的請求,在body中選擇選擇form-data ,選擇File選項后即可選擇文件


image.png

強調(diào)點:設(shè)置請求頭和管理請求頭


image.png

5. 代理抓包

由于postman不是類似fiddle這種專門用于抓包的軟件,所以需要手動打開代理設(shè)置
①點擊右上角的攔截圖標(biāo),打開【Capture requests】,設(shè)置Port和Target

image.png

②打開瀏覽器的代理設(shè)置,設(shè)置相同端口


image.png

手機端設(shè)置方法:https://learning.getpostman.com/docs/postman/sending_api_requests/capturing_http_requests

6. postman 控制臺

打開左下角打開【postman console】控制臺,方便查看接口調(diào)試的打印信息


image.png

<a name ="2" id="2">

二、postman 變量與集合

1. 變量

為什么要使用變量,如果某個參數(shù)值只需要在某個獨立接口的使用一次,那么我們可以不使用變量,但是如果變量需要在多個位置重復(fù)使用,或者發(fā)生接口傳遞(即前一個接口的返回值用于下一個接口的請求參數(shù)),那么借助變量,postman就可以實現(xiàn)業(yè)務(wù)邏輯與測試數(shù)據(jù)分離,幫助我們建立健壯的測試用例。

2. 變量作用域:

全局變量(Global):主要用于需要在多個位置重復(fù)使用的幾乎不改變的數(shù)據(jù)
環(huán)境變量(environment):主要用于接口傳遞的參數(shù)
局部變量(local):集合/文件/接口中 某個js腳本中的變量
數(shù)據(jù)變量(data):主要用于并發(fā)測試(json/csv文件)

同變量名的情況下,優(yōu)先級范圍:局部變量> 環(huán)境變量> 全局變量

3 . 設(shè)置變量:

① 在postman的ui上進(jìn)行定義


image.png
image.png

② 使用腳本定義 pm.environment.set("new_name", "zhougang");

image.png

4. 使用變量:

① Builder中的使用:{{varname}}

image.png

② js 腳本中的使用:pm.environment.get("variable_key");

5. 集合

為什么要使用集合?
①組織業(yè)務(wù)邏輯:分類和存儲接口
②方便一鍵運行:在runner中選擇要運行的collection或者里面的文件夾進(jìn)行運行
③方便導(dǎo)入導(dǎo)出:導(dǎo)出和導(dǎo)入json文件,如使用newman在命令行執(zhí)行(集合和變量的導(dǎo)出是分開的)
③方便分享:分享至自己團(tuán)隊的共享目錄下

image.png
image.png

<a name ="3" id="3">

三、postman 腳本應(yīng)用(sandbox)

postman支持js語言,它允許用戶向請求和集合添加動態(tài)行為。通過使用js腳本,可以構(gòu)建包含動態(tài)參數(shù)的請求,在請求之間傳遞數(shù)據(jù)。用戶可以在下面兩個事件流中添加js代碼。
①在請求發(fā)送前,在“pre-request script”選項卡下輸入腳本,主要用于設(shè)置測試需要的測試參數(shù)
②在請求發(fā)送后,在“test”選項卡下輸入腳本,主要用于做斷言


image.png
image.png

③右邊會有自帶各種代碼模塊,按需使用即可,常用示例如下:

/** test示例 */
var jsonData = pm.response.json();
pm.test("操作是否成功", function () {
    pm.expect(jsonData.code).to.eql(1);
});
pm.test("接口返回時間是否超過2s", function () {
    pm.expect(pm.response.responseTime).to.be.below(2000);
});

tests["名稱是否正確"] = jsonData.data.name === pm.environment.get("customer_contract_name");
tests["管理人是否正確"] = jsonData.data.manage_user  === pm.environment.get("admin_user_name");
tests["組織是否正確"] = jsonData.data.manage_org_name  === pm.environment.get("org_name");

pm.environment.set("variable_key", "variable_value");
//使用變量{{variable_key}}

如果這里沒有你需要的,可以查看幫助文檔
https://learning.getpostman.com/docs/postman/scripts/postman_sandbox_api_reference/

image.png

image.png

用戶可以將與請求和測試腳本添加到一個集合,一個文件,一個請求中
優(yōu)先級:請求>文件>集合

<a name ="4" id="4">

四、postman 接口自動化實現(xiàn)

1. 使用postman自帶的 runner工具

①在runner中選擇要運行的collection或者里面的文件夾進(jìn)行運行
②enviroment:選擇用例跑的環(huán)境變量集合
③iterations:接口迭代次數(shù)(接口自動化 默認(rèn)使用1就行,1以上一般拿來做并發(fā)測試)
④delay:每個接口發(fā)起請求的的間隔時間(建議200ms)
⑤data:數(shù)據(jù)文件,可以是json格式的,也可以是csv格式的(一般用于并發(fā)測試)
⑤keep variable values: 重點?。。”仨氁瓷?,環(huán)境變量將會更新
⑥start run:運行結(jié)果集,并查看結(jié)果頁,可導(dǎo)出

image.png

執(zhí)行順序設(shè)定(此代碼只在runner和Newman中生效):

 postman.setNextRequest('接口名稱');// 設(shè)定下一請求執(zhí)行路徑

運行結(jié)果頁:


image.png

2. 使用postman插件:Newman

官方說明文檔:https://www.npmjs.com/package/newman(https://www.npmjs.com/package/newman

①首先需要安裝node.js環(huán)境(同時安裝了npm)
下載地址:http://nodejs.cn/download/

image.png

②使用命令行安裝 Newman
npm install -g newman
安裝導(dǎo)出html報告的包: npm install -g newman-reporter-html

③Newman運行命令腳本,一般只需要指定運行集合、運行環(huán)境、間隔時間,數(shù)據(jù)文件,指定輸出報告的模板和位置

原始腳本: newman run xxx.json

添加下述定制化參數(shù):
指定運行環(huán)境變量集合: --environment xxx.environment.json
指定輸出環(huán)境變量集合: --export-environment xxx.environment.json
指定輸出報告形式:-r cli,html
指定輸出報告文件: --reporter-html-export xxx.htm
指定接口間隔時間: --delay-request 100

進(jìn)入腳本所在文件目錄,運行腳本(保存成腳本文件,直接運行即可)
newman run cms_init.postman_collection.json --environment cms-test.environment.json --export-environment cms-test.environment.json -r cli,html --reporter-html-export ./reports/cms_init_html_output.htm --delay-request 120

運行結(jié)果(命令行):


image.png

運行結(jié)果(html格式):


image.png

<a name ="5" id="5">

六、postman 與第三方框架結(jié)合(維護(hù))

1. 與Git結(jié)合 (版本控制)

①將集合的腳本文件導(dǎo)出到目錄下
②然后使用相關(guān)git命令推送到遠(yuǎn)程倉庫即可

備注:多人協(xié)作可同時使用postman的分支管理,更好的維護(hù)接口代碼


image.png

2. 與jenkins結(jié)合 (持續(xù)集成)

當(dāng)我們將代碼推送到git上后,可以使用jenkins直接構(gòu)建任務(wù)即可,省去了腳本打包放到對應(yīng)服務(wù)器再啟用對應(yīng)環(huán)境腳本的麻煩。
參考鏈接:http://www.lxweimin.com/p/18863c609019
參考鏈接:https://blog.csdn.net/qq_16510189/article/details/79074809

①下載jenkins的war包,使用java -jar jenkins.war --httpPort=8080啟動, 按照配置jenkins完成
②在Jenkins中安裝對應(yīng)的插件,Git、NodeJS 插件
③新建job,配置相關(guān)內(nèi)容
git配置

image.png

定時器配置

image.png

構(gòu)建環(huán)境配置

image.png

構(gòu)建腳本

image.png

③選擇構(gòu)建,查看控制臺


image.png

3. 與釘釘機器人結(jié)合

image.png
image.png
image.png
image.png
image.png

<a name ="6" id="6">

六、實戰(zhàn)演練

以合同管理系統(tǒng)為例(演示)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
禁止轉(zhuǎn)載,如需轉(zhuǎn)載請通過簡信或評論聯(lián)系作者。

推薦閱讀更多精彩內(nèi)容