首頁(yè)技術(shù)文章正文

Postman怎么實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)?【軟件測(cè)試培訓(xùn)】

更新時(shí)間:2020-04-08 來源:黑馬程序員 瀏覽量:

實(shí)現(xiàn)Postman的數(shù)據(jù)驅(qū)動(dòng),主要分為五個(gè)大步驟

第一步:什么是數(shù)據(jù)驅(qū)動(dòng)?

第二步:設(shè)計(jì)測(cè)試用例

第三步: 在Postman中編寫測(cè)試用例腳本

第四步:分析腳本,設(shè)計(jì)數(shù)據(jù)文件,并通過參數(shù)化關(guān)聯(lián)匹配數(shù)據(jù)參數(shù)

第五步:引用數(shù)據(jù)文件,執(zhí)行測(cè)試用例,實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)測(cè)試。推薦了解傳智播客軟件測(cè)試課程



一. 什么是數(shù)據(jù)驅(qū)動(dòng)?

目標(biāo):理解數(shù)據(jù)驅(qū)動(dòng)的概念

步驟:無

執(zhí)行測(cè)試用例的過程,本質(zhì)上是執(zhí)行的不同數(shù)據(jù),不同輸入輸出的過程。所以,在計(jì)算機(jī)中,我們可以使用預(yù)先設(shè)定好的數(shù)據(jù)文件,來執(zhí)行測(cè)試用例,實(shí)現(xiàn)覆蓋測(cè)試點(diǎn)。

本文主要以TPshop商城的登陸接口為例,實(shí)現(xiàn)自動(dòng)化測(cè)試的數(shù)據(jù)驅(qū)動(dòng)登陸接口的測(cè)試。

二. 設(shè)計(jì)測(cè)試用例

目標(biāo):完成TPshop登陸接口的部分測(cè)試用例設(shè)計(jì)

步驟:分析登陸接口請(qǐng)求數(shù)據(jù)和響應(yīng)數(shù)據(jù),設(shè)計(jì)測(cè)試用例

對(duì)登陸模塊進(jìn)行單接口測(cè)試點(diǎn)設(shè)計(jì)測(cè)試用例,用例設(shè)計(jì)情況如下:

(注意:本文的驗(yàn)證碼驗(yàn)證部分,采用了萬能驗(yàn)證碼 )

Postman做數(shù)據(jù)驅(qū)動(dòng)01


三. 編寫測(cè)試用例腳本

目標(biāo):使用Postman實(shí)現(xiàn)TPshop的登陸腳本編寫

步驟:

· 編寫TPshop商城的測(cè)試集和目錄結(jié)構(gòu)

·實(shí)現(xiàn)測(cè)試用例腳本

1.編寫TPshop商城的測(cè)試集

編寫TPshop商城的測(cè)試集有3個(gè)小步驟

? 新建一個(gè)測(cè)試集,名稱為TPshop商城

? 添加一個(gè)文件夾,名稱為登陸模塊

? 在登陸模塊文件夾下,新建5個(gè)文件夾,如圖所示

Postman做數(shù)據(jù)驅(qū)動(dòng)02

? 根據(jù)測(cè)試用例設(shè)計(jì),在每個(gè)文件夾下添加獲取驗(yàn)證碼接口和登陸接口,未展示部分依次類推

Postman做數(shù)據(jù)驅(qū)動(dòng)03


2.實(shí)現(xiàn)測(cè)試用例

按照我們的用例設(shè)計(jì),主要有5個(gè)用例和1個(gè)前置條件需要實(shí)現(xiàn),用例詳情如下:

? 實(shí)現(xiàn)獲取驗(yàn)證碼接口(登陸的前置條件)

? 實(shí)現(xiàn)登陸成功測(cè)試用例腳本

? 實(shí)現(xiàn)用戶名不存在測(cè)試用例腳本

? 實(shí)現(xiàn)密碼錯(cuò)誤測(cè)試用例腳本

? 實(shí)現(xiàn)用戶名長(zhǎng)度超出11位測(cè)試用例腳本

? 實(shí)現(xiàn)密碼為空測(cè)試用例腳本

登陸的前置接口:獲取驗(yàn)證碼接口的實(shí)現(xiàn)

獲取驗(yàn)證碼接口使用的是Get請(qǐng)求,只有URL的請(qǐng)求參數(shù),沒有請(qǐng)求體,請(qǐng)求頭不用修改,Postman默認(rèn)會(huì)填寫

請(qǐng)求方法、請(qǐng)求URL截圖:

Postman做數(shù)據(jù)驅(qū)動(dòng)04


獲取驗(yàn)證碼接口的斷言分析

分析返回?cái)?shù)據(jù),發(fā)現(xiàn)返回的是一個(gè)圖片

Postman做數(shù)據(jù)驅(qū)動(dòng)05


根據(jù)HTTP協(xié)議,服務(wù)器返回的圖片數(shù)據(jù)類型一般在響應(yīng)頭中查看Content-Type,如下圖所示,發(fā)現(xiàn)響應(yīng)頭中的Content-Type的類型為image/png

Postman做數(shù)據(jù)驅(qū)動(dòng)06


綜上,斷言代碼可以對(duì)請(qǐng)求頭中的Content-Type進(jìn)行斷言,判斷是否為一個(gè)圖片,可以這么寫:

Postman做數(shù)據(jù)驅(qū)動(dòng)08


設(shè)計(jì)“登陸成功”測(cè)試案例

設(shè)置請(qǐng)求方法,請(qǐng)求URL和請(qǐng)求體

Postman做數(shù)據(jù)驅(qū)動(dòng)09


請(qǐng)求頭:

請(qǐng)求頭需要設(shè)置為:application/x-www-form-urlencoded(其實(shí)也是點(diǎn)擊上圖中的x-www-form-urlencoded就能自動(dòng)生成)

其他相關(guān)請(qǐng)求頭參數(shù)使用Postman默認(rèn)設(shè)置的

Postman做數(shù)據(jù)驅(qū)動(dòng)10

登陸成功的返回值為:

Postman做數(shù)據(jù)驅(qū)動(dòng)11


根據(jù)返回值分析,可以簡(jiǎn)單的斷言status和msg以及http響應(yīng)狀態(tài)碼就可以簡(jiǎn)單判斷是否登陸成功(這里為了簡(jiǎn)化流程,并未判斷數(shù)據(jù)準(zhǔn)確性)

所以斷言代碼可以按照下圖進(jìn)行設(shè)計(jì):

Postman做數(shù)據(jù)驅(qū)動(dòng)12


設(shè)計(jì)“用戶名不存在測(cè)試用例”

接下來的4個(gè)接口測(cè)試用例腳本,都是一樣的模式

設(shè)置請(qǐng)求頭、請(qǐng)求體、URL請(qǐng)求參數(shù)、請(qǐng)求方法如圖所示:

Postman做數(shù)據(jù)驅(qū)動(dòng)13


用戶名不存在的斷言代碼:

Postman做數(shù)據(jù)驅(qū)動(dòng)14


設(shè)計(jì)“密碼錯(cuò)誤”測(cè)試案例

請(qǐng)求頭,請(qǐng)求體,URL請(qǐng)求參數(shù),請(qǐng)求方式:

Postman做數(shù)據(jù)驅(qū)動(dòng)15


密碼錯(cuò)誤的斷言代碼:

Postman做數(shù)據(jù)驅(qū)動(dòng)17


設(shè)計(jì)“用戶名長(zhǎng)度超出11位”測(cè)試案例

請(qǐng)求頭,請(qǐng)求體,URL請(qǐng)求參數(shù),請(qǐng)求方式:

Postman做數(shù)據(jù)驅(qū)動(dòng)18


用戶名超出11位的斷言代碼


Postman做數(shù)據(jù)驅(qū)動(dòng)18


設(shè)計(jì)密碼為空的測(cè)試案例

請(qǐng)求頭,請(qǐng)求體,URL請(qǐng)求參數(shù),請(qǐng)求方式:

Postman做數(shù)據(jù)驅(qū)動(dòng)19


密碼為空的返回值為:

Postman做數(shù)據(jù)驅(qū)動(dòng)20


密碼為空斷言代碼:

Postman做數(shù)據(jù)驅(qū)動(dòng)21


使用Collection Runner批量運(yùn)行編寫的測(cè)試用例

保存后,我們?cè)贑ollection Runner中運(yùn)行設(shè)計(jì)的測(cè)試用例腳本

Postman做數(shù)據(jù)驅(qū)動(dòng)22


進(jìn)入Collection Runner后,什么都不用改,直接點(diǎn)擊底部的藍(lán)色按鈕運(yùn)行(注意要翻到最底部才能看見運(yùn)行按鈕):

Postman做數(shù)據(jù)驅(qū)動(dòng)23


查看運(yùn)行效果:

可以看到,5個(gè)測(cè)試用例,獲取驗(yàn)證碼的斷言有5個(gè);其他測(cè)試接口有15個(gè),一共20個(gè)斷言,都測(cè)試通過了!

Postman做數(shù)據(jù)驅(qū)動(dòng)24


這樣,設(shè)計(jì)接口測(cè)試用例就完成了


四. 數(shù)據(jù)驅(qū)動(dòng)

目標(biāo):使用數(shù)據(jù)文件驅(qū)動(dòng)登陸接口的用例

步驟:

·分析用例數(shù)據(jù),設(shè)計(jì)數(shù)據(jù)文件

·在TPshop測(cè)試腳本中,使用參數(shù)關(guān)聯(lián)技術(shù),關(guān)聯(lián)參數(shù)到數(shù)據(jù)文件中的數(shù)據(jù)

1、分析用例數(shù)據(jù),設(shè)計(jì)數(shù)據(jù)文件

根據(jù)之前的用例設(shè)計(jì),登陸接口中,我們需要傳入服務(wù)器的數(shù)據(jù)有3條,分別是

? username

? password

? verify_code

斷言需要校驗(yàn)的數(shù)據(jù)有3條,分別是

? HTTP響應(yīng)狀態(tài)碼

? status

? msg。

按照分析,我們的數(shù)據(jù)文件也需要包括這幾個(gè)參數(shù),分別用于HTTP請(qǐng)求的輸入和輸出后的預(yù)期結(jié)果校驗(yàn)。

根據(jù)Postman數(shù)據(jù)的格式要求,可以分為CSV和Json,這里使用CSV來設(shè)計(jì),

根據(jù)上文分析,最終得出了如圖所示的數(shù)據(jù)文件:

Postman做數(shù)據(jù)驅(qū)動(dòng)25


username:登陸的手機(jī)號(hào)碼

password:密碼

verify_code:登陸的驗(yàn)證碼(萬能驗(yàn)證碼)

httpresponsecode:http響應(yīng)狀態(tài)碼

status:請(qǐng)求成功后,返回的json數(shù)據(jù)中status的值

msg:請(qǐng)求成功后,返回的json數(shù)據(jù)中msg的值

case_name:描述我們這一組數(shù)據(jù)的測(cè)試點(diǎn)

這樣我們的數(shù)據(jù)文件就設(shè)計(jì)好了,接下來,要把數(shù)據(jù)文件引入到我們的TPshop商城項(xiàng)目的測(cè)試腳本中。


2、在TPshop測(cè)試腳本中,使用參數(shù)關(guān)聯(lián)技術(shù),關(guān)聯(lián)參數(shù)到數(shù)據(jù)文件中的數(shù)據(jù)。

我們的目標(biāo)就是把數(shù)據(jù)文件中的6個(gè)參數(shù),分別關(guān)聯(lián)到請(qǐng)求數(shù)據(jù)和斷言數(shù)據(jù)中,怎么做呢,這里要介紹兩個(gè)方法

? 請(qǐng)求參數(shù)可以通過{{var}}來引用

? 斷言中的數(shù)據(jù),由于是在Tests中寫入的腳本,并不能直接通過{{var}}來引用,所以需要引用Postman的相關(guān)API進(jìn)行調(diào)用,如:pm.variables.get("var")

登陸接口請(qǐng)求體參數(shù)化,修改登陸接口的請(qǐng)求數(shù)據(jù),如圖所示:


Postman做數(shù)據(jù)驅(qū)動(dòng)26

注意參數(shù)名稱要和數(shù)據(jù)文件中的名稱保持一致

登陸接口斷言代碼(圖貼不下)

// HTTP響應(yīng)狀態(tài)碼

var http_response_code = pm.variables.get("http_response_code");

// 獲取返回的status

var response_status = pm.variables.get("status");

// 獲取返回的msg

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

// 引用獲取的HTTP返回狀態(tài)碼進(jìn)行斷言

pm.test("HTTP返回響應(yīng)狀態(tài)碼", function () {

pm.response.to.have.status(http_response_code);

});

// 引用獲取的status的值進(jìn)行斷言

pm.test("返回?cái)?shù)據(jù)中的status值為1", function () {

var jsonData = pm.response.json();

pm.expect(jsonData.status).to.eql(response_status);

});

// 引用獲取的msg的值進(jìn)行斷言

pm.test("返回?cái)?shù)據(jù)中的message值為登陸成功", function () {

var jsonData = pm.response.json();

pm.expect(jsonData.msg).to.eql(response_msg);

});

這樣,我們對(duì)登陸接口進(jìn)行了改動(dòng),使其能夠讀取數(shù)據(jù)文件中的數(shù)據(jù)。

然后我們?cè)偈褂肅ollection Runner 單獨(dú)運(yùn)行登陸成功接口,查看結(jié)果

選擇登陸成功模塊運(yùn)行


Postman做數(shù)據(jù)驅(qū)動(dòng)27


注意和下圖保持一致,只運(yùn)行登陸成功接口

Postman做數(shù)據(jù)驅(qū)動(dòng)28

選擇數(shù)據(jù)文件

點(diǎn)擊下圖中的Data Select File 選擇數(shù)據(jù)文件


Postman做數(shù)據(jù)驅(qū)動(dòng)29


選擇自己構(gòu)造的數(shù)據(jù)文件:tpshop_login.csv

Postman做數(shù)據(jù)驅(qū)動(dòng)30

數(shù)據(jù)文件結(jié)構(gòu)再貼一下

Postman做數(shù)據(jù)驅(qū)動(dòng)31


選擇成功后效果:

Postman做數(shù)據(jù)驅(qū)動(dòng)32

點(diǎn)擊Preview查看數(shù)據(jù)(必須做,如果數(shù)據(jù)文件不能Preview則需要解決數(shù)據(jù)問題,中文亂碼也需要解決)

Postman做數(shù)據(jù)驅(qū)動(dòng)33

然后點(diǎn)擊運(yùn)行,查看結(jié)果:

Postman做數(shù)據(jù)驅(qū)動(dòng)34

運(yùn)行完后,發(fā)現(xiàn)1個(gè)登陸接口運(yùn)行了5次,比我們之前設(shè)計(jì)了5個(gè)測(cè)試用例要簡(jiǎn)便得多,這樣,我們就實(shí)現(xiàn)了通過5條數(shù)據(jù),完成5個(gè)測(cè)試點(diǎn)的驗(yàn)證。

問題:為什么能這么做。。

答:因?yàn)镻ostman每次迭代,會(huì)自動(dòng)讀取下一行數(shù)據(jù),所以第一次迭代,運(yùn)行的是第一條:

Postman做數(shù)據(jù)驅(qū)動(dòng)35


第二次迭代運(yùn)行第二條:

Postman做數(shù)據(jù)驅(qū)動(dòng)36


依次類推,直到數(shù)據(jù)讀完



總結(jié)

通過以上5個(gè)步驟,我們通過使用Postman實(shí)現(xiàn)了數(shù)據(jù)驅(qū)動(dòng)測(cè)試,我們回顧一下每個(gè)步驟的作用:

第一步:理解數(shù)據(jù)驅(qū)動(dòng)的概念

第二步:設(shè)計(jì)測(cè)試用例

第三步:用Postman實(shí)現(xiàn)測(cè)試用例,編寫測(cè)試腳本

第四步:實(shí)現(xiàn)數(shù)據(jù)驅(qū)動(dòng)

看完大家想必已經(jīng)迫不及待想要試一試了,趕快打開Postman來試一試吧!


猜你喜歡:

測(cè)試人員必須掌握的使用linux小技巧

分享到:
在線咨詢 我要報(bào)名
和我們?cè)诰€交談!