接口測試學習筆記(一)
第一課主要關於接口測試,涉及到postman和jmeter兩個工具
一、基礎知識:
1、接口就是把client(前端)和server(後端)端聯系起來的(或者說各種花式操作數據庫)。服務器也是一臺電腦,只是性能比較高的一臺電腦。
2、接口返回的數據都是json,(json,是一種通用的數據類型,以鍵值對 key-value 的數據形式來保存的)。
3、接口測試其實就是 功能測試,在接口測試之前,得要有接口文檔。(問開發要的)
4、post請求和get請求沒有很大的區別,get請求一般用於獲取數據,post請求一般用於發送數據:
如果是get請求:不借助任何的工具,用瀏覽器就可以發請求,如:http://118.00.0.00/api/user/stu_info?stu_name=小黑
5、cookie:就是放在你本地的一個鍵值對。如:
niuhanyang hahaha12345
niuhanyang:sfjsksdf4234sdfw34
session:就是放在服務端的一個鍵值對。 如:
niuhanyang:sfjsksdf4234sdfw34
比如 登錄, 登錄成功後,本地(瀏覽器)就會保存鍵值對
瀏覽器發送請求的時候,就會自動把鍵值對發過去服務端進行對比
若對不上服務端的鍵值對,就會讓你重新登錄
session過期 也會讓你重新登錄
默認永久生效的。不過一般都會設置過期時間限制。
token 其實就是Cookie裏面保存的一個鍵。
6、http請求分為兩個部分:請求頭和請求體
請求頭裏面呢是一些額外的信息,比如說用的什麽瀏覽器,cookie
請求體裏面傳的是具體的數據。
請求頭 header :
額外的信息
瀏覽器
cookie
需要什麽樣的數據
請求體 body :
username=xxx
file=aa.py
7、
get請求只有請求頭,是沒有請求體的。
它的數據直接放在url裏面的,post請求數據是放在body裏面的,get請求有長度限制,post請求沒有。
在以前的時候技術不好,有長度限制。
現在早就沒有了。
get請求沒有post請求安全。
只要通過抓包,post請求的數據一樣也可以看到。
8、
功能測試測的就是業務邏輯。
server端測試。
1、接口測試就是功能測試。
2、關註業務邏輯
3、正常、異常的,就不是按照接口文檔上要求的來
http 狀態碼:
200 請求成功
302 重定向
404 客戶端發出去的請求不合法
500 服務端有問題
9、、進行接口測試,必需的是接口文檔,文檔主要包含以下幾個部分:
1、URL
2、請求方式(一般為post或者get)
3、請求參數說明
4、返回參數說明
5、請求、返回示例
6、狀態碼說明
二、postman接口測試
示例1 :GET請求 :
獲取所有學生信息
簡要描述:
- 這個接口是為了說明怎麽添加header信息的
請求URL:
http://URL地址/api/user/all_stu
請求方式:
- get
需要添加header信息,key為Referer value 為http://XXXX/
參數:
無
返回參數說明
參數名 | 類型 | 說明 |
---|---|---|
error_code | int | 錯誤編碼,0為操作成功 |
msg | string | 提示信息 |
參數及返回示例
示例2: POST請求:
登錄接口
簡要描述:
- 登錄接口
請求URL:
http://URL地址/api/user/login
請求方式:
- post
參數:
參數名 | 必選 | 類型 | 說明 |
---|---|---|---|
username | 是 | string | 用戶名 |
passwd | 是 | string | 密碼 |
登陸用戶名:XXXXX
密碼:aA123456
返回示例
{
"error_code": 0,
"login_info": {
"userId": 1,
"sign": "d58e3582afa99040e27b92b13c8f2280",
"login_time": "20171207113501"
}
}
返回參數說明
參數名 | 類型 | 說明 |
---|---|---|
error_code | int | 錯誤編碼,0為操作成功 |
login_info | object | 登錄對象信息 |
userId | int | 用戶id |
sign | string | 簽名 |
login_time | string | 登錄時間 |
參數及返回示例
示例3:POST請求,添加Cookie
學生金幣充值
簡要描述:
- 學生金幣充值接口,這個接口是為了講添加cookie以及身份驗證的
請求URL:
http://URL地址/api/user/gold_add
請求方式:
- post
參數:
該接口有權限驗證,需要admin用戶才可以做操作,需要添加cookie
cookie中key為登錄的用戶名,value從登錄接口中獲取,登陸成功之後會返回sign
參數名 | 必選 | 類型 | 說明 |
---|---|---|---|
stu_id | 是 | int | 學生id |
gold | 是 | int | 金幣數量 |
返回示例
{
"error_code": 0,
"msg":"充值成功!"
}
返回參數說明
參數名 | 類型 | 說明 |
---|---|---|
error_code | int | 錯誤編碼,0為操作成功 |
msg | string | 提示信息 |
請求參數及返回參數示例
三、Jmeter接口測試 :jmeter 開源的java開發的一個壓力測試工具。
為什麽要使用JMeter
- 開源免費,基於Java編寫,可集成到其他系統可拓展各個功能插件
- 支持接口測試,壓力測試等多種功能,支持錄制回放,入門簡單
- 相較於自己編寫框架活其他開源工具,有較為完善的UI界面,便於接口調試
- 多平臺支持,可在Linux,Windows,Mac上運行
jmeter查看結果樹亂碼
1、在jmeter的bin目錄下找到jmeter.properties這個文件
添加上
sampleresult.default.encoding=utf-8
2、重啟jmeter
jmeter body data裏面有亂碼怎麽解決
1、在jmeter的bin目錄下找到jmeter.properties這個文件
添加上
jsyntaxtextarea.font.family=Hack
2、重啟jmeter
jmeter參數化
1、用戶定義的變量
2、函數助手裏面的
__random
__counter
__time
3、從文件裏面讀
如果文件不寫絕對路徑,只寫一個文件名,那麽你就把你的文件
放到jmeter的bin目錄下就ok了
4、
關聯:
1、調用第一個接口,然後從這個接口的返回數據裏面拿到某個值
2、放到第二個接口裏面來用。
5、
表示時間
1、格式化好的時間 20180506185922
2、時間戳 從計算機發明那一天到現在過了多少秒
jmeter是java開發的,Java裏面的時間戳默認是精確到毫秒
所以你要除以1000才是真正的時間戳
關聯:
1、調用第一個接口,然後從這個接口的返回數據裏面拿到某個值
2、放到第二個接口裏面來用。
一、添加線程組 :
如下圖所示,右擊“測試計劃”>添加>Threads(Users)>線程組。這裏xmeter君需要解釋一下“線程組”的意思:JMeter是由Java實現的,並且使用一個Java線程來模擬一個用戶,因此線程組(Thread Group)就是指一組用戶的意思,換句話說一個線程組就是一組虛擬用戶(virtual users),這些虛擬用戶用來模擬訪問被測系統
二、添加HTTP請求:加入實際被測頁面
服務器名稱或IP:被測服務器的網站名字,也可以是IP地址。剩下的屬性可以按照被測系統的屬性按需配置
三 、用戶定義的變量:
四,添加結果監聽器:察看結果樹 :來查看性能測試過程中請求和響應信息 ,你可以看到一些測試期間一些有用的信息,比如發送的請求的信息和響應數據等
請求數據:HTTP請求的相關信息,有raw和HTTP兩種類型展示。
響應數據:HTTP請求所得到的響應數據。響應數據有正確和錯誤。
五、HTTP信息頭管理器
定義信息頭,在其覆蓋下的所有元件都會使用該信息頭。例如定義在測試計劃中的信息頭,即該測試計劃所有請求的信息頭。比如添加Cookie
六.jp@gc - JSON Path Extractor插件,該插件可以應用到關聯接口上
這個東西相當於正則表達式提取器
Destination Variable Name
: 變量名,就是下個http
請求需要用到的名字,相當於正則表達式提取器中的引用名稱
JSONPath Expression
: json
表達式,這個是根據返回的json
來寫的。如圖,例如後臺返回的數據如下,那麽取sign 的表達式就應該寫成$.login_info.sign
第一個$
是固定寫法,後面用.
和不同層級的字段名來表達取哪個字段。如果有多個相同的字段名,則在字段後面加上索引以區分,例如$.login_inf[0].sign
Default Value
: 默認值,當沒有取到值時的默認傳入值。
七.參數化
a. 使用時間戳${__time(,)}
b.使用當前時間${__time(YYYYMMdd-HH:mm:ss,)}
c.隨機數${__Random(,)}
d.按順序的${__counter(1,10)}
註:${__counter(,)}的初始值默認從1開始,設置起始值無效,設置結束值也無效。可以根據線程數控制。
e.通過文件進行參數化
添加配置元件 CSV Data Set Config
示例文件:
接口測試學習筆記(一)