本人主要做一個知識的歸類與記錄,如是轉載類文章,居首都會備注原鏈接,尊重原創者,謝謝!
此文轉載原鏈接:https://www.cnblogs.com/kaerxifa/p/8029106.html
最終效果:
知識點:
通過HTTP信息頭管理器, 正則表達式提取器 提取登錄要用的token,memcard,Debug Sampler,CSV Data set config參數化登錄,循環控制器,察看結果樹
具體實現思路:
1.首先調通登錄接口(登錄請求,登錄應答)
本例中,登錄請求使用post請求向服務器發送用戶名及密碼,使用get請求獲得登錄成功后的信息
2.因為token的值是動態的,所以要get到登錄后頁面的信息,需要通過正則表達式提取器 獲得每次登錄請求返回的token值。把這個值寫到get請求的信息頭中
(即LoadRunner中的關聯操作)
3.添加Debug Sampler,查看每次執行腳本,腳本中包含的所有變量,值是否是正確的。這些變量可以是:
a.用戶自定義的變量
b.接口關聯時用到的變量(通過后置處理器--JSON提取器 呀 正則表達式提取)目前我更喜歡使用JSON提取器
4.本例中 需要對登錄請求作參數化,把用戶名密碼寫入一個文件,通過配置CSV Data set config,來不斷讀取文件中的值
5.本例中一共准備了4組登錄數據,添加一個循環控制器,把CSV Data set config 以及要參數化的請求放到這個邏輯控制器下
(它的作用域是對其子節點的 sampler有效,作用是控制采樣器的執行順序)
6.添加斷言,也就是驗證登錄接口 服務器下發數據是否符合預期結果。斷言方式常用的有2種:
a.響應斷言
b.JSON斷言
目前感覺JSON斷言更實用一點,因為可以驗證不同字段的值是否正確。
技巧:接口調不通時,在察看結果樹時,除了查看響應數據,還要注意觀察請求的信息是否正確(發送請時給的參數是否正確)
具體實現:
添加一個線程組
用戶定義的變量
可以把請求中一些重復出現的內容寫在這,后面在寫請求的時候,直接通過${host}的方式調用即可。我這里是把請求的地址寫在了這里
添加HTTP信息頭管理器
把公共的請求的headers信息填寫在這里
注意發送POST請求時,如果不在請求頭中填寫Content-Type這個參數,響應結果會提示參數問題 ,格式不正確之類的
添加一對請求,分別是登錄請求、登錄成功后的請求
請求接口的內容可以找開發要,也可以通過抓包的方式獲得
登錄請求:
登錄成功后的頁面:
獲得這個頁面的返回結果,需要在這個請求的請求頭中添加 token 和 memcard的值
正則表達式提取動態數據
正則表達式提取token和memcard(要先了解正則表達式的寫法),小括號中是要提取的內容
提取token的方法一樣
添加Debug Simpler
默認設置即可
在提取memcard時卡住了,一開始 模板 對應的值寫的 $1$,執行腳本后,登錄成功后請求返回的結果是 用戶不存在,查了一些資料,
又觀察 察看結果樹中的請求信息,發現memcard的值是6
Debug Simpler中顯示正則表達式提取到的memcard的值一共有4個,其中有正確的值,試着把正則表達式提取器 模板的值改變$0$后,再執行腳本就沒問題了
添加斷言:
對登錄成功后的請求添加斷言(可加可不加,通過察看結果樹的響應數據,也可以確定是否請求成功)
code的值為0,表示請求成功
斷言結果:
下面這樣就表示,成功,如果斷言失敗,會給出錯誤提示信息
通過CSV Data Set Config 參數化用戶名 密碼:
Filename是參數化文件存放的位置,可以是絕對路徑,也可以是相對路徑,我這里使用相對路徑
在要參數化的取樣器(請求)中通過${username},${password}的方式調用
做完這一步之后直接運行腳本遇到的問題:
我只想給登錄這個請求參數化,一共准備了4個用戶名,密碼.可是執行腳本只能讀取 參數化文件准備的第1行數據 ,上面的腳本只有1次請求(用到參數化內容的),所以只會讀取第1行數據,循環的話,會往下讀。
所以有了下面的操作
添加循環控制器:
把要參數化的請求和相關的配置放到這個邏輯控制器下面
要實現本例的效果,其實可以不添加這個循環控制器,直接把線程組的循環次數改為4也可以,效果一樣,但是意義完不同。
直接改線程的循環次數,相當於是4個線程同時進行登錄操作,等於做了並發的操作。
最后的察看結果樹報告顯示如下:
請求成功,且返回的內容也是正確的。