上面講的都是利用Postman進(jìn)行手工測(cè)試的操作埋酬,如果我們想提高測(cè)試效率惦积,或可以在測(cè)試過程中假如自動(dòng)化的代碼枝笨,將代替一分部的手工操作层宫。利用Postman進(jìn)行自動(dòng)化測(cè)試通常是兩種方式:
一種是利用Postman自身js代碼執(zhí)行沙盒谐丢,在發(fā)送請(qǐng)求之前寫一些設(shè)置發(fā)送消息的代碼爽航。比如產(chǎn)生隨機(jī)數(shù)字,填入當(dāng)前日期時(shí)間到參數(shù)里乾忱,在接收到響應(yīng)之后讥珍,寫一些判斷接收數(shù)據(jù)的代碼。比如某個(gè)字段是否存在饭耳,某個(gè)字段的值串述,是否和預(yù)期的一樣等。
二是利用Postman自動(dòng)生成其他編程語(yǔ)言代碼寞肖,比如使用requests庫(kù)的Python代碼纲酗,直接發(fā)送相應(yīng)的HTTP請(qǐng)求消息。當(dāng)然我們同樣可以使用Python代碼新蟆,對(duì)請(qǐng)求消息加入一些動(dòng)態(tài)的數(shù)值觅赊,并且檢查接收的響應(yīng)消息。
9.1 使用js腳本
Postman內(nèi)置一個(gè)js語(yǔ)言的解釋器琼稻,我們可以在API請(qǐng)求發(fā)送接收的前后吮螺,加入一些js代碼,如下圖所示的Pre-request Script
便簽頁(yè)里面可以加入的代碼postman.setEnvironmentVariable('cureTime',new Date())
,就是在發(fā)送請(qǐng)求之前執(zhí)行的js代碼鸠补。下圖的代碼就是將環(huán)境里面的變量timestampHeader
值設(shè)置為當(dāng)前的時(shí)間
cureTime
是變量名萝风,new Date()
是js生成時(shí)間方法。點(diǎn)擊send
發(fā)送的時(shí)候就會(huì)先執(zhí)行這段代碼紫岩,就會(huì)生成當(dāng)前時(shí)間的變量名(cureTime)规惰,我們就可以在請(qǐng)求的消息體使用上這個(gè)時(shí)間。比如我們有一個(gè)用例泉蝌,添加一門課程并且這個(gè)課程不存在
歇万,有一種方法就是在課程名里面加上一個(gè)隨機(jī)的字符串,如果我加上當(dāng)前的時(shí)間戳勋陪,這個(gè)課程名是不可能重復(fù)的
然后我們不修改請(qǐng)求多發(fā)送幾次請(qǐng)求發(fā)現(xiàn)都是成功的贪磺, 我們發(fā)送列出課程的接口,看看有哪些課程
大家可以看到數(shù)據(jù)都是不重復(fù)的诅愚,但是有個(gè)缺點(diǎn)名稱太長(zhǎng)寒锚,其實(shí)有把js代碼轉(zhuǎn)換成年月日的形式
代碼:
var d = new Date();
var strDate = d.getFullYear().toString()+"-"+((d.getMonth()+1).toString().length==2?(d
.getMonth()+1).toString():"0"+(d.getMonth()+1).toString())+"-"+(d.getDate().toString
().length==2?d.getDate().toString():"0"+d.getDate().toString());
postman.setEnvironmentVariable('cureTime',strDate);
我這里cureTime
是放在環(huán)境的變量里面,一旦執(zhí)行之后呻粹,就會(huì)放在環(huán)境里面
這里要了解一下,會(huì)python的同學(xué)就不需要用這個(gè)方法了壕曼,后面我們會(huì)有python代碼的操作。有的同學(xué)會(huì)疑問這個(gè)能不能放在全局變量里面等浊,當(dāng)然是可以的我們看右邊SNIPPETS
SNIPPETS
就是代碼的片段腮郊,比如我們要寫在全局變量里面我們可以點(diǎn)擊Set a global variable
就會(huì)自動(dòng)生成全局變量的代碼,我們只要稍作修改就好了
然后在請(qǐng)求中使用就OK了
postman還有一個(gè)檢查的功能Tests
筹燕,不僅僅可以生成一個(gè)動(dòng)態(tài)的數(shù)據(jù)轧飞,還可以發(fā)送之后接收的結(jié)果他可以做一個(gè)簡(jiǎn)單的檢查,比如我們檢查結(jié)果里面是否有retcode
字段撒踪,我們可以看下SNIPPETS
有沒有檢查过咬,他這里有Response body:Contains string
就是響應(yīng)的消息體中是否包含了某一個(gè)字符串,我們點(diǎn)擊一下就會(huì)生成相應(yīng)的代碼
稍作修改制妄,就是檢查消息體中是否包含了retcode
大家注意以前我們?cè)趫?zhí)行Postman掸绞,執(zhí)行完了之后這個(gè)Test Result
是沒有結(jié)果的
現(xiàn)在我們?cè)谶\(yùn)行一下
Test Result
就有結(jié)果了,我們可以看到是PASS
耕捞,就是里面包含retcode
衔掸,還有一些檢查點(diǎn),大家可以自己去了解下
總結(jié):
Postman不適合做自動(dòng)化測(cè)試
自動(dòng)化測(cè)試應(yīng)該做到
1.自動(dòng)化用例能夠完成所有的測(cè)試步驟
2.每個(gè)用例的輸入數(shù)據(jù)(API請(qǐng)求中的數(shù)據(jù))俺抽,必須要自動(dòng)填入
3.每個(gè)用例的結(jié)果檢查(多個(gè)步驟)敞映,必須可以用代碼自動(dòng)完成
4.初始化、清除功能主要使用場(chǎng)景
1.手工測(cè)試
2.半自動(dòng)化測(cè)試(可以做一些請(qǐng)求數(shù)據(jù)的動(dòng)態(tài)生成磷斧,用例結(jié)果做一些自動(dòng)化代碼的檢查)可以做一些振愿,但是很多情況下光靠他還不行捷犹,還得我們?nèi)说母深A(yù),我們要認(rèn)清Postman冕末,最主要是手工測(cè)試萍歉,適合沒有編碼能力的測(cè)試