单接口用例步骤

前置脚本

前置脚本可以添加为请求的子步骤,在请求发送前执行,可以用在修改请求内容、初始化请求需要的参数值等场景。

目前 MeterSphere 支持以下几种语言的前置脚本:

  • BeanShell
  • Groovy
  • Python2
  • JavaScript

与 JMeter 一样,脚本在加载前已经内置了部分变量,在脚本中可以直接使用这些变量。

  • log - [Logger],用于在脚本执行过程中打印日志
  1. //打印 `Hello World!` 到 info 日志中
  2. log.info("Hello World!");
  • Label - 前置脚本所属请求的请求名称
  • SampleResult - 当前请求请求结果 SamplerResult 的指针
  1. //设置请求结果成功或失败
  2. SampleResult.setSuccessful(true/false);
  3. //设置请求返回码
  4. SampleResult.setResponseCode("code");
  5. //设置请求返回消息
  6. SampleResult.setResponseMessage("message");
  • sampler - 当前请求 sampler 的指针
  1. //获取当前请求名称
  2. sampler.getName();
  1. //获取变量 VAR1 的值
  2. vars.get("VAR1");
  3. //设置变量 VAR2 的值为 value
  4. vars.put("VAR2","value");
  5. //移除变量 VAR3
  6. vars.remove("VAR3");

“说明” 不同脚本语言语法不同,以上示例仅针对 BeanShell 或 Groovy。

后置脚本

后置脚本与前置脚本类似,可以添加为请求的子步骤,在请求发送后执行,可以用于处理响应结果,从中提取变量等场景。

断言规则

断言的主要功能是通过验证响应报文是否满足需求规约来验证接口运行是否正确。

!断言界面

“界面说明” 1. 断言方式选择 2. 断言配置区域,根据选择的断言方式不同,展示不同的配置内容 3. 是否忽略结果状态选项,例如希望进行返回码为 401 的断言时,需要勾选该选项,否则请求仍会被视为失败状态。 4. 添加断言按钮,在同一个断言步骤内可以添加多条断言,断言编辑完成后需要点击 添加 按钮进行添加。 5. 保存按钮,保存当前断言规则步骤内容。 6. 推荐 JSONPath 断言,当请求的响应体是 JSON 格式时,可以使用该功能辅助生成 JSONPath 断言。 7. 清空 JSONPath 断言,清空自动添加的 JSONPath 断言。

目前 MeterSphere 支持以下几种形式的断言规则:

  • 正则
  • JSONPath
  • XPath
  • 响应时间
  • 脚本

正则断言

正则断言较为灵活,适用于请求的响应内容不是 JSON、XML、HTML 等这样的标准且常见的结构化文本时。 !正则断言

“参数说明” 1. 对象:希望进行断言的对象,支持选择 Response CodeResponse HeadersResponse Data 2. Perl型正则表达式:断言对象需要匹配的正则表达式,匹配成功则断言成功,否则断言失败。

!!! warn “示例” 请求的响应体id="ddc86657-d402-4c10-b458-2ba2e4604cef"&name="myorg"&description="test org" 断言需求:判断响应体中包含 name="任意文本"

  1. **断言配置**:
  2. - **对象**:`Response Data`
  3. - **Perl型正则表达式**:`name=".*?"`

JSONPath 断言

JSONPath 断言适用于请求的响应内容是 JSON 格式时,可以方便的通过 JSONPath 表达式 定位到特定字段,设定其期望值。 !JSONPath断言

“参数说明” 1. JSONPath表达式:JSONPath 表达式,通过该表达式定位到特定字段。 2. 期望值:通过 JSONPath 表达式定位的字段的期望值,支持正则表达式。

!!! warn “示例” 请求的响应体json { "success": true, "message": null, "data": { "id": "ddc86657-d402-4c10-b458-2ba2e4604cef", "name": "myorg", "description": "form api", "createTime": 1611154807818, "updateTime": 1611154807818 } } 断言需求:判断响应体 data 中的 name 字段值为 myorg

  1. **断言配置**:
  2. - **JSONPath 表达式**:$.data.name
  3. - **期望值**:myorg

XPath 断言

XPath 断言适用于请求的响应内容是 XML、HTML 等格式时,可以方便的通过 XPath 表达式 定位到特定字段,设定其期望值。 !XPath断言

“参数说明” 1. XPath表达式:需要进行匹配的 XPath 表达式

!!! warn “示例” 请求的响应体xml <root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org"> <employees> <employee id="1">Johnny Dapp</employee> <employee id="2">Al Pacino</employee> <employee id="3">Robert De Niro</employee> <employee id="4">Kevin Spacey</employee> <employee id="5">Denzel Washington</employee> </employees> <foo:companies> <foo:company id="6">Tata Consultancy Services</foo:company> <foo:company id="7">Wipro</foo:company> <foo:company id="8">Infosys</foo:company> <foo:company id="9">Microsoft</foo:company> <foo:company id="10">IBM</foo:company> <foo:company id="11">Apple</foo:company> <foo:company id="12">Oracle</foo:company> </foo:companies> </root> 断言需求:判断响应体中的 id 为 10 的公司名称为 IBM

  1. **断言配置**:
  2. - **XPath 表达式**://foo:company[@id=10]='IBM'

响应时间断言

响应时间断言适用于对请求的响应时间有特定要求时。 !响应时间断言

“参数说明” 1. 响应时间在…毫秒以内:以毫秒为单位的响应时间期望,当实际响应时间小于等于该值时断言成功。

脚本断言

脚本断言提供了更加强大、灵活的处理能力,通过可以根据自身需求选择合适的语言编写脚本来设定断言结果,适用于常规断言无法满足需求时。 !脚本断言

“参数说明” 1. 编辑按钮:点击弹出脚本断言编辑页面。、 2. 添加按钮:脚本编辑完成后,点击添加到断言列表中。 3. 脚本生成工具:针对简单的变量值判断的脚本,可以通过该工具快速生成脚本。 4. 脚本名称:断言脚本的名称。 5. 脚本内容:断言脚本内容。 6. 语言切换及代码模板:切换脚本语言,与前后置脚本一样,目前支持 BeanShellGroovyPythonJavaScript 脚本语言。

与前后置脚本一样,脚本在加载前已经内置了部分变量,除了在之前已经介绍过的变量外,脚本断言中的脚本还额外提供了以下变量。

  • AssertionResult - 断言结果对象,可以通过 AssertionResult.setFailure(true) 方法设置断言是否成功,通过 AssertionResult.setFailureMessage("message") 方法设置断言失败提示信息。

提取参数

参数提取功能主要用于从请求响应中提取特定返回值并存储到变量中,便于在后续的步骤中引用该返回值。 !提取参数界面

“界面说明” 1. 提取方式选择 2. 提取参数区域,根据选择的提取方式不同,展示不同的配置内容 3. 是否提取多个匹配结果,例如当匹配到多个值时,可以返回 varName_n 形式的多个变量。 4. 添加提取规则按钮,在同一个提取参数步骤内可以添加多条提取规则,提取规则编辑完成后需要点击 添加 按钮进行添加。 5. 保存按钮,保存当前提取参数步骤内容。 6. 推荐JSONPath提取,当请求的响应体是 JSON 格式时,可以使用该功能辅助生成 JSONPath 提取规则。 7. 清空JSONPath提取,清空自动添加的 JSONPath 提取规则。

目前 MeterSphere 支持以下几种形式的提取方式:

  • 正则
  • JSONPath
  • XPath

正则提取

正则提取较为灵活,适用于请求的响应内容不是 JSON、XML、HTML 等这样的标准且常见的结构化文本时。 !正则提取

“参数说明” 1. 对象:希望进行提取的对象,支持选择 BodyRequest HeadersResponse HeadersURLResponse CodeResponse Message 等对象。 2. 变量名:保存提取值的变量名,后续可以通过 ${varName} 形式引用到,如果选择了匹配多个,可以通过 ${varName_#} 获取到匹配的总个数,通过 ${varName_n} 依次获取到每个匹配值。 2. Perl型正则表达式:提取特定值使用的正则表达式,将提取正则表达式中的第一个组。

!!! warn “示例” 请求的响应体id="ddc86657-d402-4c10-b458-2ba2e4604cef"&name="myorg"&description="test org" 提取需求1:响应体中 name 字段的值。

  1. **提取配置**:
  2. - **对象**:`Body`
  3. - **变量名**:name
  4. - **Perl型正则表达式**:`name="(.*?)"`

JSONPath 提取

JSONPath 提取适用于请求的响应内容是 JSON 格式时,可以方便的通过 JSONPath 表达式 定位到特定字段进行提取。 !JSONPath提取

“参数说明” 1. 变量名:保存提取值的变量名,后续可以通过 ${varName} 形式引用到,如果选择了匹配多个,可以通过 ${varName_#} 获取到匹配的总个数,通过 ${varName_n} 依次获取到每个匹配值。 2. JSONPath表达式:JSONPath 表达式,通过该表达式定位到要提取的字段。

!!! warn “示例” 请求的响应体json { "success": true, "message": null, "data": { "id": "ddc86657-d402-4c10-b458-2ba2e4604cef", "name": "myorg", "description": "form api", "createTime": 1611154807818, "updateTime": 1611154807818 } } 提取需求:提取响应体 data 中的 name 字段并存储在 name 变量中。

  1. **提取配置**:
  2. - **变量名**:name
  3. - **JSONPath 表达式**:$.data.name

XPath 提取

XPath 提取适用于请求的响应内容是 XML、HTML 等格式时,可以方便的通过 XPath 表达式 定位到特定字段进行提取。 !XPath提取

“参数说明” 1. 变量名:保存提取值的变量名,后续可以通过 ${varName} 形式引用到,如果选择了匹配多个,可以通过 ${varName_#} 获取到匹配的总个数,通过 ${varName_n} 依次获取到每个匹配值。 1. XPath表达式:需要进行匹配的 XPath 表达式

!!! warn “示例” 请求的响应体xml <root xmlns:foo="http://www.foo.org/" xmlns:bar="http://www.bar.org"> <employees> <employee id="1">Johnny Dapp</employee> <employee id="2">Al Pacino</employee> <employee id="3">Robert De Niro</employee> <employee id="4">Kevin Spacey</employee> <employee id="5">Denzel Washington</employee> </employees> <foo:companies> <foo:company id="6">Tata Consultancy Services</foo:company> <foo:company id="7">Wipro</foo:company> <foo:company id="8">Infosys</foo:company> <foo:company id="9">Microsoft</foo:company> <foo:company id="10">IBM</foo:company> <foo:company id="11">Apple</foo:company> <foo:company id="12">Oracle</foo:company> </foo:companies> </root> 提取需求:提取响应体中的 id 为 3 的员工的姓名,即上述响应中的 Robert De Niro,并存储在 employeeName 变量中。

  1. **提取配置**:
  2. - **变量名**:employeeName
  3. - **XPath 表达式**:string(//employee[@id='3'])

场景用例步骤

接口列表导入

自定义请求

自定义脚本

场景导入

等待控制器

条件控制器

循环控制器

断言规则

提取参数

前置脚本

后置脚本