自動化接口測試之Postman

一粱甫、Postman介紹

Postman官網(wǎng)上這樣介紹它:"Manage all of your organization's APIs in Postman, with the industry's most complete API development environment."看的出來Postman是功能強(qiáng)大的專門針對API測試的工具
?
Postman 提供功能強(qiáng)大的 Web API 和 HTTP 請求的調(diào)試葵蒂,它能夠發(fā)送任何類型的HTTP 請求 (GET, POST, PUT, DELETE...)皂岔,并且能附帶任何數(shù)量的參數(shù)和 Headers勺爱。不僅如此但两,它還提供測試數(shù)據(jù)和環(huán)境配置數(shù)據(jù)的導(dǎo)入導(dǎo)出媒熊,付費的 Post Cloud 用戶還能夠創(chuàng)建自己的 Team Library 用來團(tuán)隊協(xié)作式的測試溯祸,并能夠?qū)⒆约旱臏y試收藏夾和用例數(shù)據(jù)分享給團(tuán)隊。

二本姥、Postman下載及安裝

Postman有2種安裝方式肩袍,一種是作為Chrome的拓展程序,另一種是客戶端形式婚惫,建議使用客戶端的方式安裝
?

  1. Postman下載
    官網(wǎng)下載地址:https://www.getpostman.com/downloads/

  2. 安裝過程
    默認(rèn)安裝即可氛赐,安裝完成后,建議注冊賬號便于以后將腳本保存到云端

三先舷、Postman功能視圖

詳細(xì)功能可以參考Postman官方 文檔,
打開軟件艰管,就可以看到Postman主界面,如下圖所示:

postman界面.png

  1. Collections:在Postman中蒋川,Collection類似文件夾牲芋,可以把同一個項目的請求放在一個Collection里方便管理和分享,Collection里面也可以再建文件夾捺球。如果做API文檔的話缸浦,可以每個API對應(yīng)一條請求,如果要把各種輸入都測到的話懒构,就需要每條測試一條請求了餐济。這里我新建了一個example用于介紹整個流程,五個API對應(yīng)五條請求胆剧。這個Collection可以通過https://www.getpostman.com/collections/c8f98a1120357e0d4a5a 導(dǎo)入你自己的Postman中絮姆。

  2. 上面的黑字注冊是請求的名字醉冤,如果有Request description的話會顯示在這下面。下面的藍(lán)字是保存起來的請求結(jié)果篙悯,點擊可以載入某次請求的參數(shù)和返回值蚁阳。我會用這個功能給做客戶端的同事展示不同情況下的各種返回值。保存請求的按鈕在15.

  3. 選擇HTTP Method的地方鸽照,各種常見的不常見的非常全螺捐。

  4. 請求URL,兩層大括號表示這是一個環(huán)境變量矮燎,可以在16的位置選擇當(dāng)前的environment定血,環(huán)境變量就會被替換成該environment里variable的值。

  5. 點擊可以設(shè)置URL參數(shù)的key和value

  6. 點擊發(fā)送請求

  7. 點擊保存請求到Collection诞外,如果要另存為的話澜沟,可以點擊右邊的下箭頭

  8. 設(shè)置鑒權(quán)參數(shù),可以用OAuth之類的

  9. 自定義HTTP Header峡谊,有些因為Chrome愿意不能自定義的需要另外裝一個插件Interceptor茫虽,在16上面一行的衛(wèi)星那里

  10. 設(shè)置Request body,13那里顯示的就是body的內(nèi)容

  11. 在發(fā)起請求之前執(zhí)行的腳本既们,例如request body里的那兩個random變量濒析,就是每次請求之前臨時生成的。

  12. 在收到response之后執(zhí)行的測試啥纸,測試的結(jié)果會顯示在17的位置

  13. 有四種形式可以選擇号杏,form-data主要用于上傳文件。x-www-form-urlencoded是表單常用的格式脾拆。raw可以用來上傳JSON數(shù)據(jù)

  14. 返回數(shù)據(jù)的格式馒索,Pretty可以看到格式化后的JSON莹妒,Raw就是未經(jīng)處理的數(shù)據(jù)名船,Preview可以預(yù)覽HTML頁面

  15. 點擊這里把請求保存到2的位置

  16. 設(shè)置environment variables和global variables,點擊右邊的x可以快速查看當(dāng)前的變量旨怠。

  17. 測試執(zhí)行的結(jié)果渠驼,一共幾個測試,通過幾個鉴腻。

四迷扇、測試工具

測試工具主要包括三部分,在發(fā)起請求之前運行的Pre-request爽哎,在收到應(yīng)答之后運行的Test蜓席,和一次運行所有請求的Collection Runner

  1. Pre-request
    預(yù)請求腳本是與在發(fā)送請求之前執(zhí)行的收集請求相關(guān)聯(lián)的代碼片段。


    pre.png

Pre-request和Test用的語言都是JavaScript课锌,Postman在一個沙盒里執(zhí)行代碼厨内,提供給用戶的庫和函數(shù)可以在這里查看祈秕。而常用的功能都可以通過右邊的Code Snippets實現(xiàn),點擊就可以插入到代碼區(qū)域雏胃。

  1. Test
    使用Postman请毛,您可以使用JavaScript語言為每個請求編寫和運行測試.


    test.png

?

測試?yán)?/em>
設(shè)置環(huán)境變量

pm.environment.set("variable_key", "variable_value");

獲取環(huán)境變量

pm.environment.get("variable_key");

獲取環(huán)境變量(其值是字符串化對象)

var array = JSON.parse(pm.environment.get("array"));
var obj = JSON.parse(pm.environment.get("obj"));

清除環(huán)境變量

pm.environment.unset("variable_key");

設(shè)置全局變量

pm.globals.set("variable_key", "variable_value");

獲取全局變量

pm.globals.get("variable_key");

清除全局變量

pm.globals.unset("variable_key");

得到一個變量
此函數(shù)在全局變量和活動環(huán)境中搜索變量。

pm.variables.get("variable_key");

檢查響應(yīng)主體是否包含字符串

pm.test("Body matches string", function () {
    pm.expect(pm.response.text()).to.include("string_you_want_to_search");
});

檢查響應(yīng)主體是否等于字符串

pm.test("Body is correct", function () {
    pm.response.to.have.body("response_body_string");
});

檢查JSON值

pm.test("Your test name", function () {
    var jsonData = pm.response.json();
    pm.expect(jsonData.value).to.eql(100);
});
//var jsonData = JSON.parse(responseBody);
//tests["list"] = jsonData["lists"][0] == "11";

內(nèi)容類型存在

pm.test("Content-Type is present", function () {
    pm.response.to.have.header("Content-Type");
});

響應(yīng)時間小于200毫秒

pm.test("Response time is less than 200ms", function () {
    pm.expect(pm.response.responseTime).to.be.below(200);
});

代碼名稱包含一個字符串

pm.test("Status code name has string", function () {
    pm.response.to.have.status("Created");
});

成功的POST請求狀態(tài)代碼

pm.test("Successful POST request", function () {
    pm.expect(pm.response.code).to.be.oneOf([201,202]);
});

將XML主體轉(zhuǎn)換為JSON對象

var jsonObject = xml2Json(responseBody);

獲取HTML并取出其中的值

//獲取HTML
const $ = cheerio.load(responseBody);

//獲取input標(biāo)簽中name屬性值為SignValue的數(shù)據(jù)中屬性為value的值
var signvalue=$('input[name=SignValue]').attr('value');

//
//獲取textarea標(biāo)簽中name值為SignValue的數(shù)據(jù)中文本屬性text的值
var signvalue=$('textarea[name=SignValue]').text();

?

  1. Collection Runner
    當(dāng)編寫了很多測試之后瞭亮,就可以使用Collection Runner來自動運行整個Collection了方仿,入口就在主界面最上面一行的Runner。選好Collection统翩、Environment仙蚜,如果有需要還可以載入JSON和CSV作為數(shù)據(jù)源。點擊Start Run厂汗,就可以看到結(jié)果了鳍征。


    Coo.png

五、變化的參數(shù)

  1. 使用變量
    現(xiàn)在使用參數(shù)都是寫死的面徽, 那么如果想要測試賬號密碼參數(shù)使用其它值有沒有異常怎么辦呢艳丛?
    這里就需要使用變量
    引用變量的語法:{{變量名}}
    Pre-request Script 和 Tests都可以設(shè)置變量,區(qū)別在于:Pre-request Script 中的腳本是在執(zhí)行請求之前運行趟紊,而Tests 中的腳本則是在請求完成之后執(zhí)行氮双。
  2. 測試數(shù)據(jù)集
    在執(zhí)行Collection Runner時可以選擇CSV或json格式的文件作為測試數(shù)據(jù)集
    CSV文件格式:


    ![json.png](https://upload-images.jianshu.io/upload_images/17564771-de1d9b5fcfa29a63.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

JSON文件格式:


json.png

在執(zhí)行Collection Runner時使用CSV/JSON文件


runn.png
  1. 定期任務(wù)
    Postman 提供了一個 Monitors (監(jiān)視器)功能,支持我們提交一個測試任務(wù)霎匈,按照設(shè)置的定時器進(jìn)行運行戴差,如每小時測試一次,具體操作如下:


    mo.png

    hour.png

?

六铛嘱、接口依賴的問題

  1. 接口執(zhí)行順序
    首先暖释,說明一下,接下來說的接口都是默認(rèn)屬于同一個集合 (Collections) 中的墨吓。
    接口的執(zhí)行順序其實就是按照這邊目錄中的順序(從上到下)球匕;所以有了這個默認(rèn)的執(zhí)行順序后,那么我們便可以把需要優(yōu)先執(zhí)行的接口放前面即可帖烘,比如把“登錄接口”放在第一個亮曹。
  2. 自定義執(zhí)行順序
    當(dāng)然,如果只有默認(rèn)的一個執(zhí)行順序的話秘症,通常沒法滿足我們復(fù)雜的業(yè)務(wù)需求照卦,所以 Postman 為我們提供了一個函數(shù):postman.setNextRequest("填寫你要跳轉(zhuǎn)的接口名")
    我們可以在 接口的 Tests 功能區(qū)中執(zhí)行跳轉(zhuǎn)代碼,如:


    next.png

這里需要注意幾點:

  • postman.setNextRequest() 只在運行集合測試的時候生效乡摹,也就是說我們單獨運行 (Send) 接口 時役耕,函數(shù)是不起作用的。
  • 當(dāng)我們運行集合測試成功從 Request1 -> Request3 后聪廉,如果 Request3 后面還有接口瞬痘,那么后面的接口仍然繼續(xù)按默認(rèn)順序執(zhí)行氏义,即圖中的接口 Request4 仍會被執(zhí)行。
  • 指定的跳轉(zhuǎn)接口必須屬于同一個集合中图云。
  • setNextRequest() 函數(shù)不管在 Tests 腳本中何處被調(diào)用惯悠,它都只在當(dāng)前腳本最后才被真正執(zhí)行。比如我們將圖中的第二行與第一行互調(diào)后竣况,那么在運行跳轉(zhuǎn)函數(shù)后第二行代碼仍會被執(zhí)行克婶。
  1. 解決依賴的思路
  • 保證 Request1 在 Request3 之前被運行
  • 將 Request1 返回的 access_token 的值添加到環(huán)境變量"參數(shù)集"中。
  • Request3 在請求時引用 access_token 的值

?

五丹泉、參考資料

http://bayescafe.com/tools/use-postman-to-test-api-automatically.html
https://learning.getpostman.com/docs/postman/scripts/test_examples/
https://blog.csdn.net/cai_iac/article/details/81030619

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末情萤,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子摹恨,更是在濱河造成了極大的恐慌筋岛,老刑警劉巖,帶你破解...
    沈念sama閱讀 218,858評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件晒哄,死亡現(xiàn)場離奇詭異睁宰,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)寝凌,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,372評論 3 395
  • 文/潘曉璐 我一進(jìn)店門柒傻,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人较木,你說我怎么就攤上這事红符。” “怎么了伐债?”我有些...
    開封第一講書人閱讀 165,282評論 0 356
  • 文/不壞的土叔 我叫張陵预侯,是天一觀的道長。 經(jīng)常有香客問我峰锁,道長萎馅,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,842評論 1 295
  • 正文 為了忘掉前任祖今,我火速辦了婚禮校坑,結(jié)果婚禮上拣技,老公的妹妹穿的比我還像新娘千诬。我一直安慰自己,他們只是感情好膏斤,可當(dāng)我...
    茶點故事閱讀 67,857評論 6 392
  • 文/花漫 我一把揭開白布徐绑。 她就那樣靜靜地躺著,像睡著了一般莫辨。 火紅的嫁衣襯著肌膚如雪傲茄。 梳的紋絲不亂的頭發(fā)上毅访,一...
    開封第一講書人閱讀 51,679評論 1 305
  • 那天,我揣著相機(jī)與錄音盘榨,去河邊找鬼喻粹。 笑死,一個胖子當(dāng)著我的面吹牛草巡,可吹牛的內(nèi)容都是我干的守呜。 我是一名探鬼主播,決...
    沈念sama閱讀 40,406評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼山憨,長吁一口氣:“原來是場噩夢啊……” “哼查乒!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起郁竟,我...
    開封第一講書人閱讀 39,311評論 0 276
  • 序言:老撾萬榮一對情侶失蹤玛迄,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后棚亩,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體蓖议,經(jīng)...
    沈念sama閱讀 45,767評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,945評論 3 336
  • 正文 我和宋清朗相戀三年讥蟆,在試婚紗的時候發(fā)現(xiàn)自己被綠了拒担。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 40,090評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡攻询,死狀恐怖从撼,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情钧栖,我是刑警寧澤低零,帶...
    沈念sama閱讀 35,785評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站拯杠,受9級特大地震影響掏婶,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜潭陪,卻給世界環(huán)境...
    茶點故事閱讀 41,420評論 3 331
  • 文/蒙蒙 一雄妥、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧依溯,春花似錦老厌、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,988評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至慷嗜,卻和暖如春淀弹,著一層夾襖步出監(jiān)牢的瞬間丹壕,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,101評論 1 271
  • 我被黑心中介騙來泰國打工薇溃, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留菌赖,地道東北人。 一個月前我還...
    沈念sama閱讀 48,298評論 3 372
  • 正文 我出身青樓沐序,卻偏偏與公主長得像盏袄,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子薄啥,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 45,033評論 2 355