JMeter接口測試實戰-動態數據驗證正則表達式
說到驗證就不得不說斷言, 先來看下JMeter官方給出斷言(Assertion)的定義,sql
用於檢查測試中獲得的響應數據等是否符合預期,用以保證測試過程當中的數據交互與預期一致。shell
使用斷言的目的:數據庫
在request的返回層面增長一層判斷機制, 由於request成功了,並不表明結果必定正確。一個Sampler能夠添加多個不一樣形式的斷言,根據你的檢查需求來添加相應的斷言,當Sampler下全部的斷言都經過了, 那纔算request成功。數組
那麼問題來了, 要判斷的內容(預期內容)若是是在變化的, 有時候仍是不肯定的, 那該怎麼辦呢?微信
舉個例子:app
在某東點擊酷玩科技玩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次.
第六步 建立結果樹, 參看結果
好, 讓咱們來執行腳本吧
再來看debug sampler
就能明白在jdbc request裏Result variable name設置爲test_seq和計數器裏設置的Max value=${sequence_#}的含義了.
至此示例到這裏就結束了,用到了jmeter裏取樣器+邏輯控制器+前, 後處理器+斷言+監聽器構成整個實戰步驟演練.
引用名人的一句話:
開放創新,自信謙遜,構建「爲我所知、爲我所用、爲我全部」的技術能力佈局.
今日推薦閱讀文章精選推薦
諮詢工做加微信
掃描二維碼
歡迎自薦和推薦, 須要的微信推送簡歷!
請猛戳下面二維碼瞭解更多