使用jmeter做接口测试,怎么验证,核对响应结果中json的内容

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用jmeter做接口测试,怎么验证,核对响应结果中json的内容相关的知识,希望对你有一定的参考价值。

Json 作为一种数据交换格式在网络开发,特别是 Ajax 与 Restful 架构中应用的越来越广泛。而 Apache 的 JMeter 也是较受欢迎的压力测试工具之一,但是它本身没有提供对于 Json 数据的响应处理。本文中假设需要从 HTTP 的响应头中返回的 Json 格式的数据流中抽取某些特定的数据,数据格式如下:    "name":"Simpsons family",  "members":[  "firstName":"Homer", "lastName":"Simpson",  "firstName":"Marge", "lastName":"Simpson",  "firstName":"Bart", "lastName":"Simpson",  "firstName":"Lisa", "lastName":"Simpson",  "firstName":"Maggie", "lastName":"Simpson"  ]    下面我们使用不同的方法来进行数据的抽取工作:  正则表达式提取  JMeter 安装了正则表达式插件之后,可以按照固定的格式从字符串中提取数据,而本例中正则表达式如下所示:  "firstName":"(.+?)"  使用了该表达式之后会返回所有服从表达式的字符串,但是只有一个表达式是我们所关注的。可以使用$1$ 来作为模板,而 3 则会返回第三个数据。  当偶尔需要对Json数据进行处理时,正则表达式是一个合适的选择,它的一个优势在于JMeter本身就内置了Json处理模块。但是,阅读处理正则表达式却是比较复杂的,特别是对于某些复杂的Json数据。  JMeter JSON 插件  另一种处理 Json 数据的方法是使用 JMeter 的插件,该插件可以使用 JSONPath 来获取 JSON 数据中特定位置的数据。类似于 XML 文件中的 XPath , JSONPath 可以使用简单的表达式来操作 Json 对象。 JSON Path Extractor 是一个开源的增加了 post处理器的插件,可以将该插件的 Lib 文件拷贝到 JMeter 的 lib 目录下即可。  而上文中提及的需要定位的数据可以使用如下的JSONPath 进行描述:  $.members[2].firstName  在 JMeter 中,只需要从 PostProcessor 菜单中打开 JSON Path Extractor 然后输入变量名与默认值即可,如下所示:    JSONPath 表达式较短并且易于阅读,能够有效提高测试脚本的易维护性,该插件并不随着标准的 JMeter 一起安装。  BeanShell Post Processor  最后一种方法即是借用了 JMeter 的对于 BeanShell 支持的特性, BeanShell 是一个轻量级的面向 Java 的脚本语言。 BeanShell Post Processor 允许使用标准的 Java 语法来处理 Json 数据,使用方法如下图所示:    总结  本文列举出了三种可用的从 Json 格式的返回值中提取数据的方法,正则表达式对于简单的 Json 格式的数据的快速标准化非常占优势。而 JsonPath 插件可以用于创建能够被维护修改的脚本,但是需要额外的插件安装工作。而最后的带 JSON 库的BeanShell 确实非常详细并且依赖于 Java 语言的灵活性可以进行进一步的开发。 参考技术A 一般来说有2种常用方式,第一种是固定内容的。直接通过断言文本。另外一种获取数据的,可以通过BeanShell。本回答被提问者采纳

性能测试-JMeter断言之响应断言精说

断言用于验证取样器请求或对应的响应数据是否返回了期望的结果。可以是看成验证测试是否预期的方法。

对于接口测试来说,就是测试Request/Response,断言即可以针对Request进行,也可以针对Response进行。但大部分是对Response做断言。

JMeter常见的断言元件如下:
1.响应断言

2.JSON Assertion

本章节,我们主要先来学习JMeter响应断言.

配置项

Apply to:

1.在大多数情况下,只有主取样器具有所有必需的响应数据。但是很多Web应用使用了Ajax,JQuery技术,单个请求可以在内部产生多个子请求,并且每个请求都有其对应的响应数据。

比如请求某一个页面,页面里的js会调用其他请求。

2.在HTTP请求的高级设置的“Embedded Resources from HTMLFiles”项,勾选了“Retrieve All Embedded Resources”,在发送请求时,会解析相关的嵌入资源,也会导致取样器可能产生多个子取样器。

嵌入资源包括:images、applets、stylesheets、external

scripts、frames/iframes、

background images、background sound等。

3.有重定向的请求,并且勾选了“Follow Redirects”,则主取样器为最后返回的URL请求,

第一次URL和重定向返回的所有URL请求为子取样器。

比如,使用http://www.sina.com/访问新浪,会有两次重定向:

第一次请求: GET http://www.sina.com/ 重定向返回:

Location: http://www.sina.com.cn/

第二次请求: GET http://www.sina.com.cn/ 重定向返

回: Location: https://www.sina.com.cn/

第三次请求: GET https://www.sina.com.cn/

主取样器为第三次请求;第一次,第二次与第三次请求为子取样器。

Main sample and sub-samples

范围包括主取样器与所有子取样器

Main sample only

范围仅限于主取样器

Sub-samples only

范围仅限于所有子取样器

JMeter Variable Name to use

范围包括使用的JMeter变量

Field to Test:
1.Text Response

响应正文。对于HTTP协议来说,是响应的message-body(不包括状态行与首部字段)

2.Response Code

响应代码。对于HTTP协议来说,是响应状态码,比如200、304、404等。

3.Response Message

响应消息。对于HTTP协议来说,是原因短语,比如OK、Not Modified、Not Found等。

4.Response Headers

响应首部字段。

5.Request Headers

请求首部字段。

6.URL Sampled

请求的URL。对于HTTP请求,若勾选了“Follow Redirects”,则包含重定向后的URL。

7.Document(text)

通过Apache Tika从各种类型的文档中提取文本。此选项开启也会严重影响性能,谨慎使用。

8.Request Data

请求数据。对于HTTP协议来说,是请求的message-body(不包括请求行与首部字段)

9.Ignore Status

通过将断言的结果与现有的响应状态相结合来确定取样器的总体成功。

当选择Ignore Status复选框时,将强制响应状态在计算断言之前是成功的。

HTTP协议在返回4xx和5xx的状态码默认是不成功的,勾选此项可用于在执行进一步检查之前设置状态成功。

请注意,这将具有清除任何以前的断言失败的效果,因此请确保只在第一个断言上开启此设置。

Pattern Matching Rules:

1.Contains

如果文本包含正则表达式模式,则为true

2.Matches

如果整个文本与正则表达式模式匹配,则为true

3.Equals

如果整个文本等于模式字符串(区分大小写),则为true

4.Substring

如果文本包含模式字符串(区分大小写),则为true

注意:

Contains和Matches模式支持Perl5类型的正则表达式;

Equals和Substring模式使用文本字符串,不支持正则表达式。

5.Not

对断言结果进行否定。

6.Or

将多个测试模式以逻辑“或”组合起来。

Patterns to Test:

要测试的模式列表。每个模式都是单独测试的。如果模式失败,则不检查其他模式,使用多个模式设置一个断言与使用每个模式设置多个断言之间没有区别(假设其他选项相同)。

Custom failure message:

自定义断言失败信息。即设置“Assertion failure message”的值。

对请求做断言

1.断言请求首部字段

在“要测试的响应字段"选择“Request Headers”

2.断言请求URL地址

分两种情况讨论:

1)若在“HTTP Request”中勾选了“Follow Redirects”,则断言对象包含请求URL,与重定向Location首部返回的URL,重定向若有多次,则包含每次返回的URL;

2)若在“HTTP Request”中没有勾选“Follow Redirects”,则断言对象只针对请求URL。

对响应做断言

1.断言响应首部字段

在“Field to Test”选择“Response Headers”

2.断言响应状态码

在“Field to Test”选择“Response code”

3.断言响应原因短语

在“Field to Test”选择“Response Message”

4.断言响应正文

在“Field to Test”选择“Text Response”

多模式断言

在“Patterns to Test”项中可以添加多个断言模式进行测试,多个模式可以使用“与”,“或”以及“非”进行逻辑组合:

1.逻辑与(and)

多个模式之间默认以“与(and)”进行逻辑组合

2.逻辑或(or)

当勾选了“Pattern Matching Rules”中的“Or”,则多个模式之间以“或(or)”进行逻辑组合

3.逻辑非(not)

当勾选了“Pattern Matching Rules”中的“Not”,则将每个模式Not后以“and”或“or”组合

假设有模式p1,p2,p3,... ,pn(优先级not > and > or)

1)仅勾选“Not”

则相当于:(not p1) and (not p2) and (not p3) and

.. and (not pn)

2)勾选“Not”与“Or”

相当于:(not p1) or (not p2) or (not p3) or ...

or (not pn)

以上是关于使用jmeter做接口测试,怎么验证,核对响应结果中json的内容的主要内容,如果未能解决你的问题,请参考以下文章

使用jmeter做接口验证测试

性能测试-JMeter断言之响应断言精说

接口测试断言详解(Jmeter)

Jmeter接口测试数据库断言的实现与设计

Jmeter(二十二) - 从入门到精通 - JMeter

Jmeter集成Jira提交缺陷