您好,登錄后才能下訂單哦!
JMeter接口測試實戰-動態數據驗證
說到驗證就不得不說斷言, 先來看下JMeter官方給出斷言(Assertion)的定義,
用于檢查測試中得到的響應數據等是否符合預期,用以保證測試過程中的數據交互與預期一致。
使用斷言的目的:
在request的返回層面增加一層判斷機制, 因為request成功了,并不代表結果一定正確。一個Sampler可以添加多個不同形式的斷言,根據你的檢查需求來添加相應的斷言,當Sampler下所有的斷言都通過了, 那才算request成功。
那么問題來了, 要判斷的內容(預期內容)如果是在變化的, 有時候還是不確定的, 那該怎么辦呢?
舉個例子:
在某東點擊酷玩科技玩3C, 返回的分類有電腦, 數碼, 手機, 影音, 游戲, 手機配件, **二手等, 假設由于業務合作調整, 這個分類經常要變化, 同時業務部門調整分類, 測試部門未必能夠及時通知到, 類似這樣的變化, 使用斷言就會存在問題, 你的腳本會經常跑失敗, 因為斷言不通過.
那該如何解決呢? 往下看, 還是繼續上面的例子, 業務部門調整分類多數都通過CMS等內部后臺管理系統實現, 而調整后的數據最后還是存放在DB中, 只要從DB中獲取數據, 與接口返回的數據進行比較, 來判斷兩者是否一致,就滿足了業務變化的需要.
下面我們來介紹整個思想的核心部分
為了簡化演示, 我們省略了一些步驟, 從DB中獲取一個數組對象,里面的數據是動態變化的, 然后再傳給另外一個接口假設是百度, 百度拿到數組里的內容作為關鍵字逐個去搜索, 并返回不同結果. 檢查百度拿到的關鍵字是否與DB中動態數據保持一致.
為了演示方便且截圖更為直觀,避免公司敏感信息要打碼, 先切換到本地數據庫, 里面存放的信息如下:
思路把sequence字段內容取出來放到數組中,這里sequence可能隨時在變, 然后傳給百度作為關鍵字搜索.
第一步 創建JDBC connection, 作用與數據庫建立連接
JDBC connection中的參數如何設置之前推文已經介紹過了, 本篇幅就不展開了, 不清楚的看本公眾號jmeter數據庫連接.
第二步 創建jdbc request, 作用執行增刪改查SQL
Variable names, Result variable name這兩個名詞我們放到后面講解.
Query timeout從字面就很好理解, 就是查詢超時設置, 單位s
第三步 創建BeanShell PostProcessor, 作用是處理數組對象
beanshell腳本書寫方式非固定, 只是遵循這樣一個邏輯, 先知道數組對象大小, 再用循環把對象中內容逐個輸出, 至于使用for循環還是while循環等等就看個人喜好, 那這里的sequence值從哪里來的呢?
我們上面還沒有介紹的variable names
Variables names參數使用方法:
Jmeter官網給出的解釋是:如果給這個參數設置了值,它會保存sql語句返回的數據和返回數據的總行數。假如,sql語句返回2行,3列,且variables names設置為A,,C,那么如下變量會被設置為:
A_#=2 (總行數)
A_1=第1列, 第1行
A_2=第1列, 第2行
C_#=2 (總行數)
C_1=第3列, 第1行
C_2=第3列, 第2行
如果返回結果為0,那么A_#和C_#會被設置為0,其它變量不會設置值。
如果第一次返回6行數據,第二次只返回3行數據,那么第一次多的3行數據變量會被清除。
可以使用${A_#}、${A_1}...來獲取相應的值.
貌似理解起來有點費勁, 沒關系, 我們把focus聚焦到本次實戰中去, 其他的知識點后續慢慢吃透, variable name這里填上你想使用的變量名,也就是之后的接口(或者beanshell)中要用到的變量名稱.
數組對象和內容都得到了,那怎么一個個傳遞給百度接口呢? 這里就要用到另外一個功能叫計數器, 他在配置元件->計數器可以找到.
第四步 創建計數器
計數器的作用
jmeter官方給出解釋, 如果需要應用大量的數據, 且要求不能重復或者需要自增, 那么可用使用計數器來實現.
計數器(counter):允許用戶創建一個在線程組之內都可以被引用的計數器。
計數器允許用戶配置一個Starting value, 一個遞增, 一個Max value, 循環到最大值,然后重新開始, 繼續這樣,直到結束.
還有個引用名稱, 留到后面介紹
第五步 創建一個http sampler命名為百度并增加一個循環控制器
因為取出來的數據是一個數組, 要逐個賦值給百度接口
百度完整的接口自己用工具或者F12即可獲取, wd是百度關鍵字賦值, 用函數V加變量形式, 這里看到一個似曾相識的N, 就是計數器里那個引用名稱.
官方函數__V解釋, 可以用于執行變量名表達式,并返回執行結果。它可以被用于執行嵌套函數引用.
因為db中sequence存放了7條記錄, 我們在循環控制器中設置循環7次.
第六步 創建結果樹, 參看結果
好, 讓我們來執行腳本吧
jdbc request SQL里查出的數據與本文第一張圖DB中保持一致, 百度接口執行了7次, 每次數據應該是db中對應的這7個不同的值
再來看debug sampler
就能明白在jdbc request里Result variable name設置為test_seq和計數器里設置的Max value=${sequence_#}的含義了.
至此示例到這里就結束了,用到了jmeter里取樣器+邏輯控制器+前, 后處理器+斷言+監聽器構成整個實戰步驟演練.
引用名人的一句話:
開放創新,自信謙遜,構建“為我所知、為我所用、為我所有”的技術能力布局.
今日推薦閱讀文章精選推薦
為什么要做接口測試
JMeter數據庫操作
Jmeter接口測試-正則表達式
JMeter中文返回亂碼
Jmeter接口測試-參數化
JMeter接口測試-基礎
測試-感想
咨詢工作加微信
掃描二維碼
歡迎自薦和推薦, 需要的微信推送簡歷!
請猛戳下面二維碼了解更多
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。