接口自動(dòng)化整理
一稠诲、Post與Get區(qū)別
1舵匾、Get?方法通過URL?請求來傳遞用戶的數(shù)據(jù),將表單內(nèi)各字段名稱與其內(nèi)容册赛,以成對(duì)的字符串連接钠导,置于action?屬性所指程序的url?后,
如:[url]http://www.mdm.com/test.asp?name=asd&password=sad[/url]森瘪,數(shù)據(jù)都會(huì) 直接顯示在url?上牡属,就像用戶點(diǎn)擊一個(gè)鏈接一樣;
2扼睬、Post?方法通過HTTP post?機(jī)制逮栅,將表單內(nèi)各字段名稱與其內(nèi)容放置在HTML?表頭(header)內(nèi)一起傳送給服務(wù)器端交由action?屬性能所指的程序處理,該程序會(huì)通過標(biāo)準(zhǔn)輸入(stdin)方式窗宇,將表單的數(shù)據(jù)讀出并加以處理
3措伐、Get?方式需要使用Request.QueryString?來取得變量的值;而Post?方式通過Request.Form?來訪問提交的內(nèi)容
4军俊、Get?方式傳輸?shù)臄?shù)據(jù)量非常小侥加,一般限制在2 KB?左右,但是執(zhí)行效率卻比Post?方法好粪躬;而Post?方式傳遞的數(shù)據(jù)量相對(duì)較大担败,它是等待服務(wù)器來讀取數(shù)據(jù),不過也有字節(jié)限制镰官,這是為了避免對(duì)服務(wù)器用大量數(shù)據(jù)進(jìn)行惡意攻擊提前,根據(jù)微軟方面的說法,微軟對(duì)用Request.Form()?可接收的最大數(shù)據(jù)有限制朋魔,IIS 4?中為80 KB?字節(jié)岖研,IIS 5?中為100 KB?字節(jié)
5、Get?方式提交數(shù)據(jù),會(huì)帶來安全問題孙援,比如一個(gè)登陸頁面害淤,通過Get?方式提交數(shù)據(jù)時(shí),用戶名和密碼將出現(xiàn)在URL?上拓售,如果頁面可以被緩存或者其他人可以訪問客戶這臺(tái)機(jī)器窥摄,就可以從歷史記錄獲得該用戶的帳號(hào)和密碼,所以表單提交建議使用Post?方法础淤;Post?方法提交的表單頁面常見的問題是崭放,該頁面如果刷新的時(shí)候,會(huì)彈出一個(gè)對(duì)話框
二鸽凶、URL組成
2.1圖解
2.2文字描述
1币砂、請求協(xié)議:
http-普通的http請求;https-加密的http請求玻侥,傳輸數(shù)據(jù)更加安全
?雖然HTTP的請求方式有8種决摧,但是我們在實(shí)際應(yīng)用中常用的也就是get和post,其他請求方式也都可以通過這兩種方式間接的來實(shí)現(xiàn)凑兰。
A掌桩、HTTP協(xié)議中共定義了八種方法或者叫“動(dòng)作”來表明對(duì)Request-URI指定的資源的不同操作方式,具體介紹如下:
B姑食、OPTIONS:返回服務(wù)器針對(duì)特定資源所支持的HTTP請求方法波岛。也可以利用向Web服務(wù)器發(fā)送‘*‘的請求來測試服務(wù)器的功能性。
C
音半、HEAD:向服務(wù)器索要與GET請求相一致的響應(yīng)则拷,只不過響應(yīng)體將不會(huì)被返回。這一方法可以在不必傳輸整個(gè)響應(yīng)內(nèi)容的情況下曹鸠,就可以獲取包含在響應(yīng)消息頭中的元信息隔躲。
D
、GET:向特定的資源發(fā)出請求物延。
E
宣旱、POST:向指定資源提交數(shù)據(jù)進(jìn)行處理請求(例如提交表單或者上傳文件)。數(shù)據(jù)被包含在請求體中叛薯。POST請求可能會(huì)導(dǎo)致新的資源的創(chuàng)建和/或已有資源的修改浑吟。
F
、PUT:向指定資源位置上傳其最新內(nèi)容耗溜。
G
组力、DELETE:請求服務(wù)器刪除Request-URI所標(biāo)識(shí)的資源。
H
抖拴、TRACE:回顯服務(wù)器收到的請求燎字,主要用于測試或診斷腥椒。
I、CONNECT:HTTP/1.1協(xié)議中預(yù)留給能夠?qū)⑦B接改為管道方式的代理服務(wù)器候衍。
2笼蛛、請求IP:就是指提供接口的系統(tǒng)所部署的服務(wù)器地址
3、請求端口:默認(rèn)是80
4蛉鹿、接口地址:指系統(tǒng)提供的接口在什么位置
5滨砍、接口參數(shù):參數(shù)在接口路徑后,用“?”來表示接口地址完了妖异,剩下的都是參數(shù)了惋戏,用“&”來區(qū)分參數(shù)個(gè)數(shù)
三、具體介紹
3.1點(diǎn)擊URL處的Params按鈕他膳,會(huì)打開key-value編輯參數(shù)响逢,此處可以編輯URL
3.2、Headers是HTTP請求和相應(yīng)的核心棕孙,它承載了關(guān)于客戶端瀏覽器龄句,請求頁面,服務(wù)器等相關(guān)的信息散罕。
四、配置環(huán)境變量
我們可能需要在多個(gè)環(huán)境下對(duì)同一個(gè)接口進(jìn)行測試傀蓉。比如我們請求的域名欧漱,開發(fā)、測試葬燎、生產(chǎn)環(huán)境误甚,請求參數(shù)。在地址欄谱净、header窑邦、請求參數(shù)、外部數(shù)據(jù)文件里壕探,用{{變量名}}?獲取環(huán)境變量的值
Postman?
的環(huán)境變量分為environment?和global 2種
4.1手動(dòng)設(shè)置環(huán)境變量
1冈钦、點(diǎn)擊設(shè)置按鈕;選擇Manage Environment
2李请、點(diǎn)擊Add
3瞧筛、填寫變量名和變量值
4.2編寫腳本
1、在【OauthToken接口】在請求參數(shù)處點(diǎn)擊Tests导盅,編輯腳本
var jsonData =JSON.parse(responseBody);//獲取body中返回的所有參數(shù)
postman.setEnvironmentVariable("access_token",jsonData.access_token);//把返回參數(shù)中的keys設(shè)置為環(huán)境變量access_token
2较幌、在【獲取各字典的最新版本清單接口】請求參數(shù)處,點(diǎn)擊Headers白翻,輸入驗(yàn)證Token乍炉,此處填寫之前提到的{{access_token}},其他接口同此步;接口之間的返回值的調(diào)用岛琼,可參考token調(diào)用方法
4.3斷言
1底循、在每個(gè)接口斷言之前,
輸入:var jsonData =JSON.parse(responseBody);//獲取body中返回的所有參數(shù)
五衷恭、點(diǎn)擊Runner
六此叠、擴(kuò)展
postman常用方法集合:
//驗(yàn)證本次請求的狀態(tài)碼?
tests["Status code is 200"] = responseCode.code ===?200;
tests["檢查返回的數(shù)據(jù)是否有成功執(zhí)行"] = responseBody.has("成功執(zhí)行");
tests["響應(yīng)時(shí)間不超過500ms"] = responseTime <?500;
//先聲明一個(gè)變量jsonData,調(diào)用JSON.parse()方法將responseBody轉(zhuǎn)換成json的標(biāo)準(zhǔn)格式并賦值給變量jsonData,將返回結(jié)果傳給其他接口使用
//檢測JSON中的某個(gè)值是否等于預(yù)期的值;
//JSON.parse()方法随珠,把json字符串轉(zhuǎn)化為對(duì)象灭袁。parse()會(huì)進(jìn)行json格式的檢查是一個(gè)安全的函數(shù)。
varjsonData =?JSON.parse(responseBody);
varjsonObject = xml2Json(responseBody);
//檢測errcode字段的值是否為0
tests["errcode is 0"] = jsonData.errcode ===?`0`;
檢測errcode字段的長度是否是1
tests["errcode's length"] = jsonData.errcode.length ===1
tests["description is?成功執(zhí)行"] = jsonData.description ===?'成功執(zhí)行'
tests["description's length"] = jsonData.description.length ===4
//檢測description的數(shù)據(jù)類型是否是String
tests["description?的數(shù)據(jù)類型為String"] = _.isString(jsonData.description)
//測試response Headers中的某個(gè)元素是否存在(如:Content-Type)
//getResponseHeader()方法會(huì)返回header的值窗看,如果該值存在
tests["Content-Type is present"] = postman.getResponseHeader("Content-Type");?
//判斷字段的類型
varschema = {
?properties:{
?errcode: {type:?'String'},
?description:{type:'String'}
?}
};
tests["響應(yīng)實(shí)體的類型"] = tv4.validate(responseBody, schema);
1.1清除環(huán)境變量
postman.clearEnvironmentVariable("variable_key");
例子:postman.clearEnvironmentVariable("url");
2.
設(shè)置一個(gè)全局變量
postman.setGlobalVariable("key", "value");?
例子:postman.setGlobalVariable("username", "123@qq.com");
使用全局變量格式:{{variableName}}
2.1
清除一個(gè)全局變量
postman.clearGlobalVariable("key", "value");?
例子:postman.clearGlobalVariable("username", "123@qq.com");?
3.
檢查響應(yīng)體包含一個(gè)字符串
tests["Body matches string"] = responseBody.has("string_you_want_to_search");?
例子:響應(yīng)體包含以下字段"path": "field is read-only",
tests["Body matches string"] = responseBody.has("field is read-only");?
tests["Body matches string"] = responseBody.has("path");?
4.
轉(zhuǎn)換XML身體JSON對(duì)象
var jsonObject = xml2Json(responseBody);
例子:
5.
檢查響應(yīng)體等于一個(gè)字符串
tests["Body is correct"] = responseBody === "response_body_string";?
例子:響應(yīng)體包含以下字段"path": "field is read-only",
tests["Body is correct"] = responseBody === "response_body_string";?
6.
檢查一個(gè)JSON值
var data = JSON.parse(responseBody);?
tests["Your test name"] = data.value === 100;?
7.Content-Type
的存在(不區(qū)分大小寫檢查)
tests["Content-Type is present"] = postman.getResponseHeader("Content-Type"); //Note: the getResponseHeader() method returns the header value, if it exists.?
8.Content-Type
的存在(區(qū)分大小寫)
tests["Content-Type is present"] = responseHeaders.hasOwnProperty("Content-Type");
9.
響應(yīng)時(shí)間小于200ms的
tests["Response time is less than 200ms"] = responseTime < 200;?
10.
狀態(tài)代碼是200
tests["Status code is 200"] = responseCode.code === 200;?
例子:狀態(tài)碼是404
tests["Status code is 404"] = responseCode.code === 404;
11.
代號(hào)包含一個(gè)字符串
tests["Status code name has string"] = responseCode.name.has("Created");?
例子:Status:201 CREATED
tests["Status code is 201"] = responseCode.code === 201;?
tests["Status code name has string"] = responseCode.name.has("Created");?
12.
成功的POST請求的狀態(tài)代碼
tests["Successful POST request"] = responseCode.code === 201 || responseCode.code === 202;?
13.
使用TinyValidator的JSON數(shù)據(jù)
var schema = {
"items": {
"type": "boolean"
}
};
var data1 = [true, false];
var data2 = [true, 123];
console.log(tv4.error);
tests["Valid Data1"] = tv4.validate(data1, schema);
tests["Valid Data2"] = tv4.validate(data2, schema);