JMeter接口測試實戰-動態數據驗證

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接口測試-基礎

測試-感想

 

諮詢工作加微信

掃描二維碼

 

歡迎自薦和推薦, 需要的微信推送簡歷!

請猛戳下面二維碼瞭解更多

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章