接口測試
什么是接口測試
接口測試:接口測試就是功能測試,向服務端發的請求或者獲取數據,
例如:新浪微博,新浪為客戶端(client),新浪的服務器為服務端(server)
a:刷微博,即從客戶端向服務端獲取數據
b:發微博,即客戶端向服務端插入數據
c:修改微博,即客戶端向服務端發送數據,即修改后的內容
d:刪微博,即服務端向客戶端發送刪除數據的請求
以上,都是通過接口來連接客戶端與服務端的。
接口測試第一步需要做什么?
首先要取得接口文檔,接口文檔一般都是由開發提供的,
接口文檔中會提供至少三種信息:接口地址(url)、請求參數(get、post)、請求參數,一般還會提供返回參數,如下:
接口返回的數據類型是什么?
接口返回的數據類型都是json格式的,那么什么是json呢?
json:json是一種通用的數據類型,所有語言都認識它,即任何語言接口返回的都是json格式的,如:Java PHP .net Python ruby C
json格式如下:鍵值對的存在 key-value
接口常用請求方式有什么?
get與post請求方式
get請求
直接用瀏覽器就可以訪問,不需要借助外部工具,在瀏覽器中輸入url即可
如何傳參數:在url后面加一個問號?+參數名+值,其中如果要傳多個參數的話,中間用&連接
例如:hfhfhh/stu_info?參數1=值1&參數2=值2,如下圖所示:
post請求
post請求不可以通過瀏覽器直接訪問,需要借助工具來進行接口的訪問,如postman、jmeter
post常用的傳參方式:key-value、json格式、上傳文件。如果接口文檔里不特別說明是什么傳參的方式的話,那么就是key-value形式傳參。
get與post區別
1、get請求只有請求頭,沒有請求體,如下圖postman中所示:請求的cookie是在headers里面的,而參數是在url里面的,body是置灰的,即沒有請求體
post請求既有請求頭,也有請求體
get請求如下圖:
post請求如下圖:
2、get請求沒有post請求安全,因為get請求參數是在url里面傳的,參數是可見的,而post請求參數是在body里面傳的,不可見。但是post請求參數還是可以用抓包工具抓到,所以也沒有那么安全
3、get請求有參數的大小限制,post請求沒有參數大小的限制(在以前瀏覽器版本低的時候,有參數大小的限制,現在瀏覽器版本很高了,就沒有這個限制了)
4、get請求一般用來獲取數據,而post一般則用來發送數據
設計接口測試用例
設計思路:
1、正常的:按照接口文檔上面來
2、異常的:不按照接口文檔上面來
3、根據業務邏輯設計不同的場景
測試用例里面需要寫什么?
項目 模塊 url 請求方式 請求參數 預期結果 實際結果 狀態
cookie與session
什么是cookie?
cookie是保存在用戶瀏覽器端的一個鍵值對。
例如:登陸一個網站,就會把cookie保存在瀏覽器端,即保存登錄名與密碼,等你關掉網站,再次進去的時候,不需要再次登陸,就可以直接訪問了,這就是瀏覽器保存了cookie的結果
什么是session?
session是保存在服務端的鍵值對。
例如:登陸網站之后,瀏覽器會保存cookie,而服務端會保存session,當再次訪問網站的時候,服務端會把session里的鍵值對和瀏覽器端的cookie進行對比,如果一致就不需要重新登陸了,直接就可以訪問,如果不一致則需要重新登陸
注意:cookie與session都有失效時間,至於時間的長短是在代碼里面設置的。
postman
postman是用來發送http請求接口的測試工具,可以用來發送get與post請求
在postman中發get請求
例:
請求如下圖:
在postman中發post請求
1、入參是key-value型的
postman中如下:
2、入參是json型的。
如何判斷入參是json型的:接口文檔中會標識出來,如果不特意標識,那么默認就是key-value型的,如下圖,接口文檔中已特意標出是json型的
postman中請求如下:
json類型參數在postman中如何傳?
在body下面的選擇raw,就可以傳json格式的了
3、在postman中上傳文件
4、傳cookie
傳cookie需要知道:請求方式、url、cookie值、請求參數
例如:獲取某個QQ群里的成員信息
step1:獲取url,url如下:https://qun.qq.com/member.html#gid=QQ群號
step2:按f12,選擇network下的XHR,XHR下面的都是請求的接口,有利於接口測試,所以直接選擇XHR就行了,下面以search_group_members這個接口為例
step3:獲取請求方式與url
step4:獲取cookie
step5:獲取請求參數
step6:在postman中可以調接口了,cookie存在Headers里面,如下
參數放在body里
step7:發請求
postman中 form-data、x-www-form-urlencoded、raw、的區別
form-data:可以上傳鍵值對,也可以上傳文件
x-www-form-urlencoded:可以上傳鍵值對,不可以上傳文件
raw:可以上傳json格式的參數
postman中Globals用法
step1:點擊小齒輪下的Manage Environments
step2:選擇Globals
step3、添加一個ke與value,例如key=ip,value=ip地址,添加完后點擊 save,配置完成
step4、如何運用剛才配置的Gloabals
在url中不用寫IP地址了,用{{ip}}代替即可,其中ip根據自己在globals中定義的key的名字而變化
jmeter
定義:Java開發的開源的性能測試工具,即需要安裝jdk才可以使用jmeter
jmeter的http接口測試
step1、添加線程組,線程組可以理解為一個容器,之后的測試都在線程組里面執行,
其中,線程數:即為並發數,如果要測試100個用戶同時登陸,那么現成數設置為100即可
Ramp-Up Period(in seconds):為在XX秒之內執行這個線程
循環次數:想要循環幾次就填幾
step2、添加http請求,選擇線程組,點擊右鍵
step3、配置http請求,如下圖
step4、添加監聽器,即查看結果樹,可以看發送的請求與響應的數據
當查看結果樹中存在亂碼時如何解決?
如下圖
解決辦法:在jmeter的bin目錄下,找到jmeter的配置文件,jmeter.properties最下面一行加上sampleresult.default.encoding=UTF-8后,保存,然后重新打開jmeter,再次執行接口文件,就可以了
當body data里面中文亂碼如何解決
如下圖
解決辦法:
在jemeter的bin目錄下,找到jmeter的配置文件,jmeter.properties最下面一行加上jsyntaxtextarea.font.family=Hack
后,保存,然后重新打開jmeter,再次執行接口文件,就可以了
數據庫存在亂碼如何解決?
在http請求配置頁面中Content encoding=utf-8,即可
上傳文件
參數化
1 、__random:函數助手里面的__random取一個范圍內的隨機數
注冊接口
step1
step2
step3
step4:
2、__time:函數助手里面的__time取當前時間戳
時間戳:從計算機誕生那一天到現在過了多少秒
3、__UUID生成的字符串很長
--CSV Data Set Config
配置方式:右鍵--->添加--->配置原件--->csv Data Set Config
注意:如果不寫絕對路徑,可以只寫文件名,那么需要把文件放在jmeter的bin目錄下即可,那么就可以直接寫文件名就可以了
然后去編輯登陸接口如下,此時username不可以寫死,需要寫名字集,格式 ${名字集},如下圖:
關聯
從上一個接口里面獲取到結果傳遞給下一個接口
例如:抽獎接口的請求參數就要從登錄接口的返回參數中取
step1、取登陸接口返回的userid與sign
配置如下:
從登陸接口返回的參數中取userID與sign
返回參數如下:
step2、JSON Extractor 配置如下,其中$.login_info.userId定義如下:
$代表登錄接口返回的參數中最外邊的大括號,.代表大括號里面的內容,login_info代表從返回參數中找到login_info,.代表返回參數中的login_info里的信息,userId代表在login_info取到userId的值
step3、配置抽獎接口:
用戶定義變量
配置:線程組--->添加--->配置原件--->用戶定義的變量
配置:,名稱與值,例如名稱為 ip
應用:
在http請求中配置IP的地方改寫成上邊配置的變量即可,就不用每次都輸入IP地址了
格式:$(定義的變量)
壓測
例如:要測試10秒之內1個用戶登陸100次情況
思路:線程組中線程數設置100(代表一百個用戶),10秒
聚合報告
壓測,需要關注返回的TPS、響應時間,通過聚合報告就可以看
TPS:服務器每秒鍾處理的事物數,即請求數
響應時間:從發出去請求到服務端處理完返回給客戶端的時間
如下圖:
響應斷言
jmeter在接口測試過程中,有時需要響應斷言來判斷接口測試得到的接口返回值是否正確。
響應斷言 :對服務器的響應接口進行斷言校驗。
1. 首先,選中某個線程,然后右鍵,選擇添加—>斷言—>響應斷言 ,得到如圖所示的響應斷言界面。
Apply to:默認選擇 Main sample only即可
要測試的響應字段:默認選擇 響應文本 即可
模式匹配規則:選擇“包括”即可,即返回的參數中包括添加的 要測試的模式里的內容即可
要測試的模式:輸入 我們要匹配的響應接口(即接口測試結果的期望值或者其他期望值)
應用如下: