JMETER從JSON響應中提取數據

如果你在這里,可能是因為你需要使用JMeter從Json響應中提取變量。

好消息!您正在掌握掌握JMeter Json Extractor的權威指南。作為Rest API測試指南的補充,您將學習掌握Json Path Expressions?所需的一切。

我們走吧!并且不要驚慌,那里沒有什么困難。

Json格式

為了更好地理解Json是什么,這是一個示例Json文檔:

{"store": {"book": [{"category": "reference","author": "Nigel Rees", "title": "Sayings of the Century", "price": 8.95 }, { "category": "fiction", "author": "Evelyn Waugh", "title": "Sword of Honour", "price": 12.99 } ], "bicycle": { "color": "red", "price": 19.95 } }, "expensive": 10 } 

Json是一種非常簡單的數據格式,幾年前就已經接管了XML。

你可能會問自己:為什么我需要學習Json?

越來越多的REST API和服務器使用Json作為主要的數據交換格式。在OctoPerf,我們大量使用Json在AngularJS前端客戶端和Spring Boot后端之間交換數據。

想知道最好的部分嗎?

從JMeter 3.0開始,使用Json變量提取器從Json響應中提取數據要容易得多。換句話說,Json提取器可以原生使用。

JMeter JsonPath插件

JMeter Json插件

JMeter JsonPath Extractor插件可以從jmeter-plugins網站下載和安裝。從JMeter 3.0及更高版本開始,Json插件是可選的。

安裝JMeter JsonPath插件

  • 下載plugins-manager.jar并將其放入JMETER_HOME/lib/ext目錄,
  • 重啟JMeter,
  • 點擊Options > Plugins Manager頂部菜單,
  • 選擇Available Plugins標簽,
  • 選擇Json Plugins并單擊Apply Changes并重新啟動JMeter

在JMeter的Json的插件應該在右鍵菜單Add > Post Processors > Json Path Extractor。順便說一句,我們建議您閱讀我們的JMeter插件安裝指南,了解有關JMeter插件的更多詳細信息。

你懶嗎?因為我是。讓我們使用原生的JsonPath Extractor!

JMeter Json Path Extractor

JMeter的Json Post處理器使用Json Way,一種Java Json Path API,在服務器響應上執行JSon路徑提取。

JMeter Json后處理器

Json Path提取器應放在HTTP Sampler下。它有幾種可能的設置,因此最相關的是:

  • 變量名稱:分號單獨的變量名稱,
  • JSON Path Expressions:從json響應中提取內容的表達式,
  • 匹配數字:-1對于所有,0對于隨機的,n對于第n個,
  • Compute concatenation var:創建一個${foo_ALL}包含所有提取值的串聯的變量,
  • 和默認值:如果表達式不適用于正在處理的json文檔。

真棒!但是我該如何開始?

示例Json路徑

以下是一些示例Json Path表達式,可用于從上面公開的Json文檔中提取數據:

JsonPath(點擊鏈接試試)結果
$ .store.book [*]。作者所有書籍的作者
$ ..作者所有作者
$ .store。*所有的東西,書籍和自行車
$ .store..price一切的價格
$ ..本書[0,1]前兩本書
$ ..書[2]從索引0(含)到索引2(獨家)的所有書籍
$ ..書[2:]從尾巴預訂二號
$ ..書[?(@。ISBN)所有ISBN編號的書籍
$ .store.book [?(@。price <10)]商店里的所有書籍都比10便宜
$ .. book [?(@。price <= $ ['expensive'])]店內所有書籍都不“貴”
$ .. book [?(@。author =?/.* REES / i)]所有與正則表達式匹配的書籍(忽略大小寫)
$ .. *把所有東西都給我
$ .. book.length()書籍數量

如您所見,從Json文檔中查詢特定信息并將它們放入變量中非常簡單靈活。讓我們用JMeter探索上面的一些例子。

你猜怎么著?我們打算試一試。

真實的JMeter示例

JMeter Json Extractor樣品JMX

我們的示例JMX展示了JMeter Json Extractor和Plugin JsonPath Extractor的工作原理。在JMeter 3.0之前,需要插件執行JsonPath提取。從JMeter 3.0開始,Json Extractions得到了集成支持。

準備采取一些行動?我們走吧!

陣列提取

JMeter Json Extractor陣列從商店中提取所有作者

提取數組可以一次從單個Json文檔中提取多個值。例如,我們可以從書店中提取所有作者:

  • 變量名稱:authors產生變量${authors}
  • JSONPath Expression?:?$..author,從任何深度選擇所有作者。

您將獲得以下變量:

authors_1=Nigel Rees
authors_2=Evelyn Waugh
authors_3=Herman Melville
authors_4=J. R. R. Tolkien
authors_ALL=Nigel Rees,Evelyn Waugh,Herman Melville,J. R. R. Tolkien (if Compute concatenation checked) authors_matchNr=4 

JMeter Json Extractor陣列我們得到了所有書籍的所有作者!

條件提取

JMeter Json選擇性萃取有選擇地提取書籍標題

現在假設我們想要提取價格小于或等于10的書籍的標題:

  • 變量名稱:titles產生${titles}變量,
  • 比賽號碼:-1
  • JSONPath表達式?:(?$.store.book[?(@.price<= 10)].title圖書標題的價格<= 10)。

您將獲得以下變量:

titles_1=Sayings of the Century
titles_2=Moby Dick
titles_matchNr=2

JMeter選擇性Json提取價格低于10的書籍。

多次提取

JMeter Json多次提取提取書籍作者和標題

現在假設我們想要同時提取多個Json字段。例如,我們想查詢所有作者和標題:

  • 變量名稱:multiple
  • 比賽號碼:-1
  • JSONPath表達式:$..['author','title']

您將獲得以下變量:

multiple_1={"title":"Sayings of the Century","author":"Nigel Rees"} multiple_2={"title":"Sword of Honour","author":"Evelyn Waugh"} multiple_3={"title":"Moby Dick","author":"Herman Melville"} multiple_4={"title":"The Lord of the Rings","author":"J. R. R. Tolkien"} multiple_matchNr**=4 

JMeter Json多次提取結果提取書籍作者和標題

這就是JMeter UI中顯示的結果。

連接提取

有時,您希望將所有結果提取并連接成單個字符串。在這個例子中,我采用了HTTPBin頭?json端點。

這可以使用該Compute Concatenation var (suffi _ALL)選項實現。

JMeter Json連接提取結果從JMeter調用HTTPBin時收到Json響應

端點返回包含客戶端發送的標頭的json。你應該看到類似的東西:

{"headers": {"Connection": "close", "Host": "httpbin.org", "User-Agent": "Apache-HttpClient/4.5.5 (Java/1.8.0_161)" } } 

現在讓我們修改Json提取器并啟用連接結果的選項:

  • 創建變量的名稱?:(?foo產生${foo}),
  • JSON路徑表達式:$.headers.*
  • 匹配Nr:-1這意味著提取所有出現的,
  • 計算連接var:選中。

現在讓我們看看結果。

JMeter Json連接提取結果提取所有結果的串聯

最后,讓我們使用Debug Sampler來查看正在提取的變量(foo在此處命名)。

JMeter Json連接提取結果調試結果

結果應該是這樣的:

foo_1=close
foo_2=httpbin.org
foo_3=Apache-HttpClient/4.5.5 (Java/1.8.0_161) foo_ALL=close,httpbin.org,Apache-HttpClient/4.5.5 (Java/1.8.0_161) foo_matchNr=3 

這有用嗎?我不太確定。但是,只要您有這種特殊需求,JMeter就能輕松完成。

使用響應斷言

這是一個非常常見的問題:如何使用斷言驗證從json中提取的變量?

否則,您要確保提取的變量是正確的。讓我們看看如何做到這一點。

JMeter Json Dummy SamplerJMeter Dummy Sampler插件

對于此示例,我們將使用Dummy Sampler插件。為什么?因為它允許使用我們想要的任何json生成樣本結果。

讓我們使用以下Json:

{"firstname": "John","lastname": "Smith"
}

我們只是將配置虛擬采樣器以將此Json作為響應發送。

JMeter Json Dummy SamplerJMeter Dummy Sampler插件配置

然后,我們創建一個Json提取器來提取firstnamejson字段。

JMeter Json Dummy SamplerJMeter Json Extractor

現在讓我們配置一個響應斷言。

響應斷言必須位于之后的JSON提取才能工作。

JMeter響應斷言變量使用Response Assertion驗證變量值

的響應斷言被配置如下:

  • 應用于:要使用的JMeter變量名稱,
  • 要測試的字段:文本響應,
  • 模式匹配規則:等于,
  • 要測試的模式:John在我們的示例中。

是時候執行線程組并查看結果了。

JMeter響應斷言成功斷言成功通過

如果我們替換斷言模式來測試titi

JMeter響應斷言成功斷言失敗了

大!現在您知道如何從json響應中提取變量并使用Response Assertion驗證變量值。

3常見錯誤

現在,你可能想知道:什么可能出錯?

應該避免的3個常見錯誤是:

  • 不要在單個Json Path提取器中定義多個變量:腳本可能變得難以理解/維護,
  • 不要編寫易受特定json響應影響的表達式,試著堅持一般情況,
  • 解決方案越簡單,腳本可維護性就越好。

很高興知道解決方法

根據具體情況,您可以使用其他技術從服務器響應中提取內容。

正則表達式提取器

假設您有一個非常簡單的Json文檔,其中包含以下內容,并且您需要所有名字:

{"name":"Simpsons family","members":[{"firstName":"Homer", "lastName":"Simpson"}, {"firstName":"Marge", "lastName":"Simpson"}, {"firstName":"Bart", "lastName":"Simpson"} ] } 

在這種情況下,正則表達式提取器可能很適合,因為編寫正則表達式非常簡單。

JMeter Regexp后處理器

我們定義了以下設置:

  • 參考名稱:firstname_RegEx
  • 正則表達式:"firstName":"(.+?)"
  • 模板:?$1$
  • 匹配Nr?:?3,(我們想要Bart
  • 默認值:D'oh!

JSR223與外部庫

通過使用Minimal Json庫并將其添加到JMeter,您也可以從服務器響應中提取json數據。

使用外部Lib配置JMeter

  • 下載Minimal Json Library最新版本,
  • 把它放進去<JMeter Home>/lib/ext
  • 重啟JMeter。

現在在Http Sampler下創建一個JSR223 Post處理器,其服務器響應是一個Json文檔。從以下腳本中選擇Java語言并激發靈感:

import com.eclipsesource.json.JsonObject;String jsonString = prev.getResponseDataAsString(); 
JsonArray members = Json.parse(jsonString).asObject().get("members").asArray();
vars.put("firstName",String.valueOf(members.get(2).getString("firstName",""))); 

上面的代碼提取第三個家族成員的firstName并將其放在一個變量中。

JSR223與Groovy

JSR223 PostProcessor具有Groovy語言支持,它具有內置的JSON支持,因此您不必添加任何.jars。示例代碼:

import groovy.json.JsonSlurperdef jsonSlurper = new JsonSlurper();
def response = jsonSlurper.parseText(prev.getResponseDataAsString());
vars.put("firstName", response.members[2].firstName.toString());

${firstname}可以根據需要再后來被重用。

BeanShell Json Extractor

盡管使用BeanShell后處理器可以獲得相同的結果,但出于性能原因,我們不建議這樣做。應該使用JSR223后處理器來支持BeanShell后處理器。使用Groovy的JSR223比BeanShell快幾個級別。

BeanShell Regexp后處理器

配置與JSR223非常相似。這里我們有最終變量${firstname_BSH}

JMeter插件(Json Path Extractor)

從JMeter 3.0開始,JMeter Json Extractor插件應該被放棄,以支持內置的Json Path提取器。如果您使用的是JMeter,?此插件仍然有用<= 2.13

Json Path JMeter插件

用例

Json提取器在以下情況下特別有用:

  • Json REST Apis:越來越多的休息apis基于Json,
  • OAuth身份驗證機制,使用Json發送和接收訪問權限和刷新令牌,
  • 單頁Web應用程序(主要看到React或AngularJS)與JSon REST后端通信。

最后的話

這個巨大的Json教程即將結束!可是等等?它尚未完成!

您可能有興趣查看我們的其他指南:

  • XPath Extractor:從XML響應中提取內容(如SOAP,
  • CSS Jquery Extractor:使用css選擇器從HTML響應中提取內容,
  • 眾所周知的Regex Extractor:使用正則表達式來提取部分響應。

轉載于:https://www.cnblogs.com/a00ium/p/10388389.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/387400.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/387400.shtml
英文地址,請注明出處:http://en.pswp.cn/news/387400.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

centos7安裝oracle12c 二

環境&#xff1a;CentOS7VMware12&#xff0c;分配資源&#xff1a;CPU&#xff1a;2顆&#xff0c;內存&#xff1a;4GB&#xff0c;硬盤空間&#xff1a;30GB Oracle 12C企業版64位 下載地址&#xff1a;http://www.oracle.com/technetwork/database/enterprise-edition/down…

阿里云天池 Python訓練營Task5:Python訓練營測試 學習筆記

一、學習知識點概要 本次是Python訓練營的測試&#xff0c;在45分鐘內完成25題&#xff0c;滿分100分及格80分。題目主要考察Task1到Task3里面的Python基礎知識。在我隨到的25道題里&#xff0c;知識點有&#xff1a; 變量&#xff08;包括數據類型和容器類型&#xff09;運算…

centos7安裝oracle12c 三

場景描述&#xff1a;我在自己電腦的虛擬機上linux環境下安裝oracle11g數據庫。 Linux版本為&#xff1a;CentOS release 6.8 (Final)&#xff0c;Oracle版本為&#xff1a;linux.x64_11gR2 問題描述&#xff1a;在oracle安裝到Prerequisite Checks這一步的時候&#xff0c;出現…

mysql刪除一條記錄

mysql如何刪除一條記錄delete from 表名 where 條件實例&#xff1a;use db1delete from tb1 where id 1; 轉載于:https://www.cnblogs.com/effortsing/p/10393229.html

HBase體系結構

HBase HBase是Apache Hadoop的數據庫&#xff0c;基于HDFS文件系統 random,realtime read/write access to Big Data 開源、分布式、可擴展、面向列 larger tables--billions of rows X millions of columns 不支持表鏈接操作 不支持事務處理 HBase存儲的數據從邏輯上來…

《屬性數據分析引論》 部分課后習題R語言實踐(第三章、第四章)

目錄 前言 第三章 廣義線性模型 習題3.18 a小題 b小題 c小題 d小題 習題3.19 a小題 b小題 c小題 第四章 Logistic回歸 習題4.1 a小題 b小題 c小題 d小題 e小題 習題4.2 a小題 b小題 c小題 d小題 小結 前言 習題選自高等教育出版社譯制&#xff0c;Alan A…

Linux下SVN搭建

在Linux系統中搭建svn服務所需要用到的軟件叫做subversion&#xff0c;可以通過yum來進行安裝&#xff0c;如圖 安裝好軟件后第一件事就是創建一個倉庫目錄 [rootserver1 ~]# mkdir /svn 使用svn自帶命令建立倉庫 [rootserver1 ~]# svnadmin create /svn 進入該倉庫&#xff0c…

HBase模式設計

HBase的使用是為了解決或優化某一問題 恰當的設計模式可以使其具有HBase本身所不具有的功能&#xff0c;并且使其執行效率得到成百上千倍的提高 在進行HBase數據庫模式設計的時候&#xff0c;不當的設置可能對系統的性能產生不良的影響 需要注意&#xff1a; 1、列族的數量及…

C++STL特殊容器priority_queue

在了解priority_queue&#xff08;優先隊列&#xff09;前&#xff0c;可以先去瞅瞅queue&#xff0c;下面是傳送門啦>——< 傳送門 priority_queue的基本性能 class priority_queue<>實現出一個queue&#xff0c;只不過其中的元素依照優先級被讀取。priority_queu…

可用于多元正態的參數估計 及 均值向量和協差陣檢驗 的R語言函數總結

一、多元正態的參數估計 1.1 樣本均值 在R語言中&#xff0c;均值通常用函數mean()得到&#xff0c;但是mean()只能計算一維變量的樣本均值&#xff0c;在面對多元隨機變量的樣本時&#xff0c;假設我們以數據框的形式保存樣本&#xff0c;我們有以下方法可以得到樣本均值&…

30秒的PHP代碼片段-MATH

本文來自GitHub開源項目 點我跳轉 30秒的PHP代碼片段 精選的有用PHP片段集合&#xff0c;您可以在30秒或更短的時間內理解這些片段。數學函數 average 返回兩個或多個數字的平均值。 function average(...$items) { $count count($items); return $count 0 ? 0 : array_sum(…

Hive簡介

Hive最初是應Facebook每天產生的海量新興社會網絡數據進行管理和機器學習的需求而產生和發展的 是建立在Hadoop上的數據倉庫基礎架構 作為Hadoop的一個數據倉庫工具&#xff0c;Hive可以將結構化的數據文件映射為一張數據庫表&#xff0c;并提供簡單的SQL查詢功能 Hive作為數…

可用于 線性判別、聚類分析 的R語言函數總結

一、判別分析 判別分析是一種分類技術&#xff0c;其通過一個已知類別的“訓練樣本”來建立判別準則&#xff0c;并通過預測變量來為未知類別的數據進行分類。根據判別的模型分為線性判別和非線性判別&#xff0c;線性判別中根據判別準則又分為Fisher判別&#xff0c;Bayes判別…

Linux 環境下搭建 Jenkins(Hudson)平臺

安裝jenkins&#xff1a;安裝 jenkins 有兩種方式&#xff1a;安裝方式一&#xff1a; [java] view plaincopysudo java -jar jenkins.war –httpPort18080 –ajp13Port18009 但是很多時候我們是使用SSH方式到目標機器上的&#xff0c;放我們關閉SSH連接時&#xff0c;這個命…

Android APK 打包過程 MD

Markdown版本筆記我的GitHub首頁我的博客我的微信我的郵箱MyAndroidBlogsbaiqiantaobaiqiantaobqt20094baiqiantaosina.comAndroid APK 打包流程 MD 目錄 目錄APK 的打包流程整體流程資源的編譯和打包資源ID資源索引概況具體打包過程aapt階段aidl階段Java Compiler階段dex階段a…

可用于 主成分分析、R型因子分析、簡單相應分析 的R語言函數總結

一、主成分分析 主成分分析是多元統計分析的一種常用的降維方法&#xff0c;它以盡量少的信息損失&#xff0c;最大程度將變量個數減少&#xff0c;且彼此間互不相關。提取出來的新變量成為主成分&#xff0c;主成分是原始變量的線性組合。 1.1 KMO檢驗和Bartlett球形檢驗 在…

[國家集訓隊]墨墨的等式

Description 墨墨突然對等式很感興趣&#xff0c;他正在研究a1x1a2y2…anxnB存在非負整數解的條件&#xff0c;他要求你編寫一個程序&#xff0c;給定N、{an}、以及B的取值范圍&#xff0c;求出有多少B可以使等式存在非負整數解。 Input 輸入的第一行包含3個正整數&#xff0c;…

Storm簡介

Storm是實時流式數據處理框架&#xff0c;支持多種編程語言 應用案例&#xff1a; realtime analytics online machine learning continuous computation distributed RPC ETL 性能&#xff1a;a million tuples per second per node 可擴展、高容錯 結合消息隊列和數據庫…

持續集成之Jenkins安裝部署

安裝JDKJenkins是Java編寫的&#xff0c;所以需要先安裝JDK&#xff0c;這里采用yum安裝&#xff0c;如果對版本有需求&#xff0c;可以直接在Oracle官網下載JDK。 [rootlinux-node1 ~]# yum install -y java-1.8.0 安裝Jekins [rootlinux-node1 ~]# cd /etc/yum.repos.d/ […

2019/2/18 Python今日收獲

Python day15——032&#xff0c;033異常處理&#xff1a;你不可能總是對的 1. Python標準異常總結AssertionError斷言語句&#xff08;assert&#xff09;失敗AttributeError嘗試訪問未知的對象屬性EOFError用戶輸入文件末尾標志EOF&#xff08;Ctrld&#xff09;FloatingPoin…