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