接口測試請求方式:get、post、delete、put
get請求與post請求區(qū)別:
1、提交方式得不同:get請求直接在地址欄中輸入?yún)?shù)以及數(shù)據(jù)信息進(jìn)行提交,post得數(shù)據(jù)是放在forms表單中,以表單形式提交接口數(shù)據(jù)來獲取接口響應(yīng);
2、請求數(shù)據(jù)大?。篻et請求的數(shù)據(jù)相對于post請求數(shù)據(jù)要小;
3、安全性不同:get請求方式數(shù)據(jù)信息在地址欄中展示,相對于post請求的數(shù)據(jù)參數(shù)在表單中,安全性要小一些;
接口測試流程:
1、需求討論
2、需求評審
3、場景設(shè)計
4、數(shù)據(jù)準(zhǔn)備
5、執(zhí)行測試
接口測試的條件:
1、服務(wù)器地址;
2、接口地址及端口;
3、接口的請求方式;
4、接口請求頭;
5、接口的參數(shù)以及參數(shù)的約束條件;
6、接口返回的數(shù)據(jù)包括正常以及異常的返回數(shù)據(jù);
接口用例設(shè)計:理清思路,避免漏測,提高測試效率,跟進(jìn)測試進(jìn)度,跟進(jìn)重復(fù)性工作
1、功能:功能是否正常,功能是否按照接口文檔實(shí)現(xiàn)
2、業(yè)務(wù)邏輯:是否有依賴業(yè)務(wù),有些接口需要依賴其他接口后才可以進(jìn)行訪問,比如下單接口需要登陸后進(jìn)行訪問,這個時候需要在下單的接口中增加一個登錄接口的cookie字段以及值,才可以進(jìn)行訪問下單接口
3、異常:
參數(shù)異常:關(guān)鍵字參數(shù)(能否使用代碼中的關(guān)鍵字,比如將用戶名改為echo輸出的關(guān)鍵字)、參數(shù)為空、添加的參數(shù)多增加或減少、填寫錯誤參數(shù)
數(shù)據(jù)異常:關(guān)鍵字參數(shù)(將數(shù)據(jù)更改為NULL)、數(shù)據(jù)為空、長度不一致(查看接口是否有驗證數(shù)據(jù)長度的驗證)、錯誤數(shù)據(jù)
4、安全:
cookie:測試存在依賴關(guān)系的接口時,驗證在不添加cookie字段以及值的時能否訪問成功;
header:有時候在驗證移動端接口的時,特別需要考慮header ,為了安全考慮需要加入header的一些信息,此時就需要驗證加入header 以及不加入時接口的安全性是否符合需求
一、什么是接口:
1、不是所有的接口都可以進(jìn)行調(diào)用,需要有鑒權(quán)碼(token,key,appkey)
2、接口包括:內(nèi)部接口(開發(fā)人員自己開發(fā)的系統(tǒng)內(nèi)部接口),外部接口 (調(diào)用外部:微信,支付寶等)
3、總結(jié):軟件提供給外部的一個服務(wù),用于軟件數(shù)據(jù)的一個傳輸;
4、為什么需要接口:因為接口可以讓內(nèi)部數(shù)據(jù)被外部所調(diào)用以及修改;
5、為什么需要接口測試:
a:現(xiàn)在的開發(fā)項目都是前后端分離,開發(fā)進(jìn)度不一致,需要將一開始開發(fā)出來的接口進(jìn)行測試,這里需要mock模擬數(shù)據(jù);
b:基于安全角度考慮,前端頁面上的驗證很容易通過,此時應(yīng)著重考慮接口,特別是身份驗證銀行卡信息等數(shù)據(jù);
c:現(xiàn)在推崇測試左移,就是今早的進(jìn)行測試;
6、接口測試的本質(zhì):接口測試本質(zhì)就是驗證接口能否正常交換數(shù)據(jù),當(dāng)出現(xiàn)異常數(shù)據(jù)時接口會不會提示異常數(shù)據(jù)信息;

接口交互示意圖.png
二、接口返回數(shù)據(jù)以及json詳解:
1、json格式:三組數(shù)據(jù)
a:code:0;錯誤碼,0表示成功;
b:msg:”success“,對錯誤碼的中文說明;
c:data:真正返回的數(shù)據(jù);
json就是一種數(shù)據(jù)類型
json由兩種組數(shù)據(jù)組成,鍵值對(key-velue)、數(shù)組
2、html格式:返回的是<html><html/>格式的數(shù)據(jù)
3、xml:<?xml?nersion="10.0.0">
三、接口協(xié)議:
1、webservice協(xié)議:接口地址---https://...............?wsdl
restful規(guī)則:get獲取數(shù)據(jù),post發(fā)送數(shù)據(jù),put修改數(shù)據(jù),delete刪除數(shù)據(jù)
2、double:適用于少量數(shù)據(jù)的傳輸,但是也可以承載大并發(fā)
3、http協(xié)議:接口地址:http://.....................
http:端口--80
https:端口--443(http+ssl(安全傳輸協(xié)議))
4、http協(xié)議詳解:超文本傳輸協(xié)議,主要用于瀏覽器與服務(wù)器之間交互,交互由兩部分:
a:請求:get、post、put、delete
b:相應(yīng):1xx相應(yīng)信息、2xx相應(yīng)成功、3xx重定向、4xx客戶端錯誤、5xx服務(wù)器錯誤
一、什么是接口
1、什么是接口?
電腦:USB,投影機(jī)(數(shù)據(jù)傳輸)
軟件:統(tǒng)稱API,application,program,interface,微信提現(xiàn)和充值,支付寶支付,銀聯(lián)支付接口。(鑒權(quán)碼:token,key,appkey)
接口包括:內(nèi)部接口和外部接口
內(nèi)部接口:開發(fā)人員自己開發(fā)的對自身系統(tǒng)提供的接口。
外部接口:開發(fā)系統(tǒng)調(diào)用外部的,微信,支付寶,其他的接口。
總結(jié):接口就是軟件提供給外部的一種服務(wù)。用于做數(shù)據(jù)傳輸。
2、軟件為什么需要接口?
因為接口能夠讓內(nèi)部的數(shù)據(jù)被外部進(jìn)行修改。
3、我們?yōu)槭裁匆鼋涌跍y試?
(1)現(xiàn)在很多系統(tǒng)都是前后端分離,開發(fā)的進(jìn)度不一樣,需要把一開始開發(fā)出來的接口進(jìn)行測試。mock
(2)基于安全考慮,前端有驗證很容易繞過,直接請求接口,特別:身份證信息,銀行卡,金錢交易。
(3)測試推崇的是測試左移,測試盡早的介入。
接口測試的本質(zhì):就是測試接口能否正常的交互數(shù)據(jù),權(quán)限控制以及異常場景。
二、接口返回數(shù)據(jù)和JSON詳解
1.json格式:三組數(shù)據(jù)(80%)
{error_code:0,msg:"提現(xiàn)成功",data:[]}
error_code:錯誤碼,0代表成功, code
msg:對錯誤碼的中文說明
data:真正的返回的數(shù)據(jù)
1.json就是一種數(shù)據(jù)類型,整形,小數(shù),字符串。
2.JSON由兩組數(shù)據(jù)組成
MAP對象,鍵值對,{key:value,key:value}
數(shù)組:[value1,value2,value3]
{ "people":[ {"firstName": "Brett", "lastName":"McLaughlin" }, { "firstName":"Jason","lastName":"Hunter"}]}
2.html格式
<htm>
<title></title>
<body>
<error_code>0</error_code>
....
</body>
</html>
3.xml格式
<?xml?version="1.0" encoding="utf-8">
<error_code>0</error_code>
....
</xml>
三、接口測試協(xié)議
1.webservice協(xié)議:接口地址:http://.......................?wsdl
http://192.168.12.1:8080/addUser
http://192.168.12.1:8080/delUser
http://192.168.12.1:8080/updUser
http://192.168.12.1:8080/selUser
soap協(xié)議,wsdl
restful規(guī)則:
get獲取數(shù)據(jù),post提交數(shù)據(jù),put修改數(shù)據(jù),delete刪除數(shù)據(jù)。
http://192.168.12.1:8080/user
2.dubbo協(xié)議:接口地址以dubbo://......
適用于少量數(shù)據(jù)的傳輸。大并發(fā)。
3.http協(xié)議:接口地址:http:// 80%
https=http+ssl安全傳輸協(xié)議 端口:443
http:端口80
什么是http協(xié)議?
http是超文本傳輸協(xié)議,主要用于瀏覽器和服務(wù)器之間交互數(shù)據(jù),交互有兩個部分:
請求:get,post,put,delete
響應(yīng):1XX信息,2XX成功,3XX重定向(跳轉(zhuǎn)不傳值),4XX客戶端錯誤,5XX服務(wù)器錯誤。
請求部分包含:
請求行:請求方式,請求地址,協(xié)議
POST http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun HTTP/1.1
請求頭:
Accept: application/json, text/javascript, */*; q=0.01(客戶端可以接收的數(shù)據(jù)格式)
X-Requested-With: XMLHttpRequest(異步請求)
User-Agent: PostmanRuntime/7.26.5(客戶端的用戶)
Cache-Control: no-cache
Postman-Token: 14a45257-b900-46e4-b760-e45c1a2ac824
Host: 47.107.116.139(請求的主機(jī)地址)
Accept-Encoding: gzip, deflate, br(壓縮方式)
Connection: keep-alive(保持活躍)
Cookie: wNq_lastvisit=1029%091605272358%09%2Fphpwind%2F;
wNq_visitor=pVVS4zEbzW%2F5x0XgEQQ4F20ipEcBIXS8AU0DopI6Xoj7L3SmaUYR%2Fw%3D%3D;
csrf_token=68bd2c7857e99ca7(請求cookie信息)
Content-Length: 0(內(nèi)容的長度)
空一行
請問正文
響應(yīng)的部分:
響應(yīng)行:協(xié)議,響應(yīng)碼,響應(yīng)信息
HTTP/1.1 200 OK
響應(yīng)頭:
Server: nginx
Date: Fri, 13 Nov 2020 12:59:22 GMT
Content-Type: text/html; charset=UTF-8
Connection: keep-alive
X-Powered-By: PHP/5.6.36
Set-Cookie: wNq_lastvisit=1033%091605272362%09%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin%26a%3Ddorun;
expires=Sat, 13-Nov-2021 12:59:22 GMT; Max-Age=31536000; path=/
Vary: Accept-Encoding(響應(yīng)的)
Content-Length: 196
空一行
響應(yīng)的內(nèi)容
{"referer":"http%3A%2F%2F47.107.116.139%2Fphpwind%2Findex.php%3Fm%3Du%26c%3Dlogin","refresh":false,"state":"fail","message":
["\u5e10\u53f7\u6216\u5bc6\u7801\u4e0d\u80fd\u4e3a\u7a7a"],"__error":""}
四、企業(yè)接口測試的流程和方案?
1.拿到api接口文檔,熟悉接口的業(yè)務(wù),接口地址,鑒權(quán),入?yún)ⅲ鰠?,錯誤碼。
2.接口計劃和方案
思路:
正例:輸入正常的入?yún)?,查看接口是否返回成功? 反例:
鑒權(quán)反例:鑒權(quán)為空,鑒權(quán)碼錯誤,鑒權(quán)碼已過期.....
參數(shù)反例:參數(shù)空,參數(shù)類型異常,參數(shù)長度異常。
錯誤碼的覆蓋。
其他場景:分頁異常。
3.編寫用例和評審
4.執(zhí)行接口測試
5.輸出接口測試報告。
五、接口測試工具以及Postman介紹
接口測試工具:
postman,jmeter,soupui,apipost,fiddler,charles
請求部分的頁簽:
Params:用于在get請求傳參
Authorization:postman自帶的鑒權(quán)功能
Headers:請求頭
Body:post請求傳參
none:沒有參數(shù)
form-data:即有文件又有鍵值對。
x-www-form...只傳輸鍵值對
raw:創(chuàng)Json,txt,xml,html,js
binary:把文件以二進(jìn)制的方式傳輸
Pre-request Sciprt:接口請求之前的腳本。js
Tests:斷言的代碼
Cookies:Postman的cookie的管理器
code:生產(chǎn)接口自動化腳本。
響應(yīng)部分的頁簽:
Body:返回的數(shù)據(jù)
Pretty:以json格式展示
Raw:以文本的格式展示
Preview:以網(wǎng)頁的格式展示
cookie返回的cookie信息
Headers響應(yīng)頭
TestResults:斷言結(jié)果
status:狀態(tài)碼
time消耗的時間
szie:字節(jié)數(shù)
六、Postman內(nèi)置的動態(tài)參數(shù)
企業(yè)當(dāng)中做接口測試的時候經(jīng)過會出現(xiàn)接口不能把參數(shù)寫死。
時間戳:{{$timestamp}}
生成0-1000的隨機(jī)整數(shù):{{$randomInt}}
生成一個GUID的字符串:{{$guid}} 很長的一個字符串
七、Postman環(huán)境變量和全局變量
開發(fā)環(huán)境,測試環(huán)境,預(yù)發(fā)布環(huán)境,線上環(huán)境。
不管是環(huán)境變量也好,還是Globals也好都是全局變量。
八、接口關(guān)聯(lián)
JSON提取器
//提取access_token的值
var jsValue = JSON.parse(responseBody)
console.log(jsValue.access_token)
//把提取的值保存到全局變量
pm.globals.set("access_token",jsValue.access_token)?
正則表達(dá)式提取器
//使用正則表達(dá)式提取 match:匹配 new RegExp新建規(guī)則
var flag_id = responseBody.match(new RegExp('"id":(.+?),'))[1]
console.log(flag_id)
pm.globals.set("flag_id",flag_id)?
Cookie提取器:鑒權(quán)碼通過cookie傳輸
九、Postman斷言
//八種斷言方式,八大元素定位
//1.斷言返回碼為200 用于狀態(tài)斷言
pm.test("Status code is 200", function () {
pm.response.to.have.status(200)?
})?
//2.斷言返回的結(jié)果中包括有一個指定的字符串 用于業(yè)務(wù)斷言
pm.test("Body matches string", function () {
pm.expect(pm.response.text()).to.include("tags")?
})?
//3.對返回的結(jié)果做jSON字段檢查 用于業(yè)務(wù)斷言
pm.test("Your test name", function () {
var jsonData = pm.response.json()?
pm.expect(jsonData.tags[0].id).to.eql(2)?
})?
//4.斷言返回的結(jié)果等于一個字符串 用于業(yè)務(wù)斷言
pm.test("Body is correct", function () {
pm.response.to.have.body("response_body_string")?
})?
//5.斷言響應(yīng)頭中包含有指定的響應(yīng)頭
pm.test("Content-Type is present", function () {
pm.response.to.have.header("Content-Type")?
})?
//6.斷言接口請求的時間少于200毫秒 用于性能斷言
pm.test("Response time is less than 200ms", function () {
pm.expect(pm.response.responseTime).to.be.below(500)?
})?
//7.斷言一個post請求的返回的狀態(tài)碼是否在指定的范圍里面
pm.test("Successful POST request", function () {
pm.expect(pm.response.code).to.be.oneOf([200, 201])?
})?
//8.斷言返回的狀態(tài)碼信息中包含指定的字符串
pm.test("Status code name has string", function () {
pm.response.to.have.status("OK")?
})?
精確斷言:
var times = Date.now()
pm.globals.set("times", times)?
全局?jǐn)嘌裕? 用于狀態(tài)斷言
十、Postman連接數(shù)據(jù)庫進(jìn)行接口測試
1、安裝node.js
2、安裝xmysql
3、連接數(shù)據(jù)庫:xmysql -h 數(shù)據(jù)庫地址 -u 用戶名 -p
十一、Postman參數(shù)化
1、txt
2、csv
3、json
使用時在運(yùn)行接口得模塊中選中參數(shù)化文件,直接運(yùn)行