Bootstrap

Jmeter中的断言(四)

 13--XPath断言

功能特点

  • 数据验证:验证 XML 响应数据是否包含或不包含特定的字段或值。
  • 支持 XPath 表达式:使用 XPath 表达式定位和验证 XML 数据中的字段。
  • 灵活配置:可以设置多个断言条件,满足复杂的测试需求。

配置步骤

  1. 添加 XPath 断言

    • 右键点击需要添加断言的请求或线程组。
    • 选择“添加” -> “断言” -> “XPath 断言”。
  2. 配置 XPath 断言

    • 名称:给 XPath 断言一个有意义的名称。
    • XML 响应:选择要验证的 XML 响应部分(例如,响应数据)。
    • XPath 表达式:输入用于匹配数据的 XPath 表达式。
    • 验证存在性:选择是否验证节点的存在性。
    • 验证值:选择是否验证节点的值。
    • 期望值:输入期望的值。
    • 命名空间:如果 XML 响应中包含命名空间,可以在这里定义命名空间前缀和 URI。
    • 忽略空白:选择是否忽略 XML 文档中的空白字符。

参数说明

  • 名称:给 XPath 断言一个有意义的名称。
  • XML 响应:选择要验证的 XML 响应部分,例如:
    • 响应数据:验证响应体中的 XML 数据。
    • 响应代码:验证HTTP响应代码。
    • 响应消息:验证HTTP响应消息。
    • 响应头:验证HTTP响应头。
  • XPath 表达式:输入用于匹配数据的 XPath 表达式。
  • 验证存在性:选择是否验证节点的存在性。
  • 验证值:选择是否验证节点的值。
  • 期望值:输入期望的值。
  • 命名空间:如果 XML 响应中包含命名空间,可以在这里定义命名空间前缀和 URI。
  • 忽略空白:选择是否忽略 XML 文档中的空白字符。

示例配置

假设我们需要测试一个Web应用,并验证登录请求的 XML 响应数据中是否包含特定的字段和值,例如 userId 字段的值为 12345

  1. 创建测试计划

    • 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加登录请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:登录请求
      • 服务器名称或IP:目标服务器的地址(例如example.com)。
      • 端口号:目标服务器的端口(例如80)。
      • 协议:HTTP或HTTPS(例如HTTP)。
      • 方法:POST
      • 路径:请求的路径(例如/login)。
      • 参数
        • 名称:username
        • :testuser
        • 名称:password
        • :testpass
  4. 添加 XPath 断言

    • 右键点击登录请求 -> 添加 -> 断言 -> XPath 断言。
    • 配置 XPath 断言:
      • 名称:验证用户ID
      • XML 响应:响应数据
      • XPath 表达式//userId
      • 验证存在性:勾选
      • 验证值:勾选
      • 期望值:12345
      • 命名空间:如果 XML 响应中包含命名空间,可以在这里定义命名空间前缀和 URI。
      • 忽略空白:勾选
  5. 运行测试

    • 点击工具栏上的“启动”按钮,运行测试。
    • 查看结果树监听器或查看结果文件,确保登录请求的 XML 响应数据中 userId 字段的值为 12345

优化建议

  1. XPath 表达式

    • 确保 XPath 表达式正确无误,能够准确匹配所需的数据。可以使用在线 XPath 测试工具进行验证。
  2. 验证条件

    • 根据实际需求选择合适的验证条件。例如,如果只需要验证节点的存在性,选择“验证存在性”;如果需要验证节点的值,选择“验证值”。
  3. 命名空间

    • 如果 XML 响应中包含命名空间,确保在断言配置中正确定义命名空间前缀和 URI。
  4. 忽略空白

    • 如果 XML 文档中包含大量空白字符,选择“忽略空白”以避免因空白字符导致断言失败。
  5. 错误处理

    • 在测试计划中添加监听器(如“查看结果树”或“聚合报告”),确保断言的正确性和请求的成功率。
  6. 性能考虑

    • 如果测试中包含大量的请求,确保断言配置高效且简洁,避免影响测试性能。

示例配置详细说明

假设我们有一个简单的测试计划,包含一个线程组和一个HTTP请求,并希望验证登录请求的 XML 响应数据中 userId 字段的值为 12345

  1. 创建测试计划

    • 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加登录请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:登录请求
      • 服务器名称或IP:example.com
      • 端口号:80
      • 协议:HTTP
      • 方法:POST
      • 路径:/login
      • 参数
        • 名称:username
        • :testuser
        • 名称:password
        • :testpass
  4. 添加 XPath 断言

    • 右键点击登录请求 -> 添加 -> 断言 -> XPath 断言。
    • 配置 XPath 断言:
      • 名称:验证用户ID
      • XML 响应:响应数据
      • XPath 表达式//userId
      • 验证存在性:勾选
      • 验证值:勾选
      • 期望值:12345
      • 命名空间:如果 XML 响应中包含命名空间,可以在这里定义命名空间前缀和 URI。
      • 忽略空白:勾选
  5. 运行测试

    • 点击工具栏上的“启动”按钮,运行测试。
    • 查看结果树监听器或查看结果文件,确保登录请求的 XML 响应数据中 userId 字段的值为 12345

 

017bc5b6f1244a0ea0142e688c94be05.png


 

14--断言持续时间

功能特点

  • 性能验证:验证请求的响应时间是否在指定的时间范围内。
  • 灵活配置:可以设置多个断言条件,满足复杂的测试需求。

配置步骤

  1. 添加 Duration Assertion

    • 右键点击需要添加断言的请求或线程组。
    • 选择“添加” -> “断言” -> “Duration Assertion”。
  2. 配置 Duration Assertion

    • 名称:给 Duration Assertion 一个有意义的名称。
    • 最大持续时间(毫秒):输入请求的最大允许响应时间(毫秒)。
    • 失败时停止:选择是否在断言失败时停止测试。

参数说明

  • 名称:给 Duration Assertion 一个有意义的名称。
  • 最大持续时间(毫秒):输入请求的最大允许响应时间(毫秒)。如果响应时间超过这个值,断言将失败。
  • 失败时停止:选择是否在断言失败时停止测试。如果勾选,当断言失败时,JMeter 将停止执行后续的请求。

示例配置

假设我们需要测试一个Web应用,并验证登录请求的响应时间是否不超过 500 毫秒。

  1. 创建测试计划

    • 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加登录请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:登录请求
      • 服务器名称或IP:目标服务器的地址(例如example.com)。
      • 端口号:目标服务器的端口(例如80)。
      • 协议:HTTP或HTTPS(例如HTTP)。
      • 方法:POST
      • 路径:请求的路径(例如/login)。
      • 参数
        • 名称:username
        • :testuser
        • 名称:password
        • :testpass
  4. 添加 Duration Assertion

    • 右键点击登录请求 -> 添加 -> 断言 -> Duration Assertion。
    • 配置 Duration Assertion:
      • 名称:验证响应时间
      • 最大持续时间(毫秒):500
      • 失败时停止:根据需要选择是否勾选
  5. 运行测试

    • 点击工具栏上的“启动”按钮,运行测试。
    • 查看结果树监听器或查看结果文件,确保登录请求的响应时间不超过 500 毫秒。

优化建议

  1. 最大持续时间

    • 根据实际需求设置合理的最大持续时间。例如,如果期望所有请求的响应时间都在 500 毫秒以内,设置最大持续时间为 500 毫秒。
  2. 失败时停止

    • 如果希望在断言失败时停止测试,选择“失败时停止”。这有助于快速发现性能问题并停止不必要的后续请求。
  3. 错误处理

    • 在测试计划中添加监听器(如“查看结果树”或“聚合报告”),确保断言的正确性和请求的成功率。
  4. 性能考虑

    • 如果测试中包含大量的请求,确保断言配置高效且简洁,避免影响测试性能。

示例配置详细说明

假设我们有一个简单的测试计划,包含一个线程组和一个HTTP请求,并希望验证登录请求的响应时间不超过 500 毫秒。

  1. 创建测试计划

    • 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加登录请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:登录请求
      • 服务器名称或IP:example.com
      • 端口号:80
      • 协议:HTTP
      • 方法:POST
      • 路径:/login
      • 参数
        • 名称:username
        • :testuser
        • 名称:password
        • :testpass
  4. 添加 Duration Assertion

    • 右键点击登录请求 -> 添加 -> 断言 -> Duration Assertion。
    • 配置 Duration Assertion:
      • 名称:验证响应时间
      • 最大持续时间(毫秒):500
      • 失败时停止:根据需要选择是否勾选
  5. 运行测试

    • 点击工具栏上的“启动”按钮,运行测试。
    • 查看结果树监听器或查看结果文件,确保登录请求的响应时间不超过 500 毫秒。

 

73759761f9e44ff1af8ed8fe5d88a689.png


 

15--BeanShell断言

功能特点

  • 自定义验证逻辑:使用 BeanShell 脚本语言编写自定义的断言逻辑。
  • 灵活性高:可以访问 JMeter 变量、属性和响应数据,实现复杂的验证。
  • 调试方便:可以在脚本中添加调试信息,帮助定位问题。

配置步骤

  1. 添加 BeanShell 断言

    • 右键点击需要添加断言的请求或线程组。
    • 选择“添加” -> “断言” -> “BeanShell 断言”。
  2. 配置 BeanShell 断言

    • 名称:给 BeanShell 断言一个有意义的名称。
    • 脚本:编写 BeanShell 脚本,实现自定义的断言逻辑。
    • 参数:输入脚本所需的参数(可选)。
    • 文件:选择包含脚本的文件(可选)。

参数说明

  • 名称:给 BeanShell 断言一个有意义的名称。
  • 脚本:编写 BeanShell 脚本,实现自定义的断言逻辑。
  • 参数:输入脚本所需的参数(可选)。
  • 文件:选择包含脚本的文件(可选)。

示例配置

假设我们需要测试一个Web应用,并验证登录请求的响应数据中是否包含特定的字段和值,例如 userId 字段的值为 12345

  1. 创建测试计划

    • 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加登录请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:登录请求
      • 服务器名称或IP:目标服务器的地址(例如example.com)。
      • 端口号:目标服务器的端口(例如80)。
      • 协议:HTTP或HTTPS(例如HTTP)。
      • 方法:POST
      • 路径:请求的路径(例如/login)。
      • 参数
        • 名称:username
        • :testuser
        • 名称:password
        • :testpass
  4. 添加 BeanShell 断言

    • 右键点击登录请求 -> 添加 -> 断言 -> BeanShell 断言。
    • 配置 BeanShell 断言:
      • 名称:验证用户ID
      • 脚本
        import org.apache.jmeter.samplers.SampleResult;
        import org.apache.jmeter.assertions.AssertionResult;
        
        SampleResult res = prev;
        String response = res.getResponseDataAsString();
        
        // 检查响应数据中是否包含 userId 为 12345 的字段
        if (response.contains("<userId>12345</userId>")) {
            AssertionResult.setFailure(false);
            AssertionResult.setFailureMessage("Response contains the expected userId.");
        } else {
            AssertionResult.setFailure(true);
            AssertionResult.setFailureMessage("Response does not contain the expected userId.");
        }
  5. 运行测试

    • 点击工具栏上的“启动”按钮,运行测试。
    • 查看结果树监听器或查看结果文件,确保登录请求的响应数据中 userId 字段的值为 12345

优化建议

  1. 脚本编写

    • 确保 BeanShell 脚本正确无误,能够准确实现所需的验证逻辑。可以使用 BeanShell 解释器进行测试。
    • 使用 JMeter 提供的 API 和变量,例如 prev 对象来访问上一个请求的结果。
  2. 调试信息

    • 在脚本中添加调试信息,帮助定位问题。例如,使用 log.info("Debug message: " + variable); 记录调试信息。
  3. 性能考虑

    • 如果测试中包含大量的请求,确保脚本高效且简洁,避免影响测试性能。
  4. 错误处理

    • 在测试计划中添加监听器(如“查看结果树”或“聚合报告”),确保断言的正确性和请求的成功率。

示例配置详细说明

假设我们有一个简单的测试计划,包含一个线程组和一个HTTP请求,并希望验证登录请求的响应数据中 userId 字段的值为 12345

  1. 创建测试计划

    • 右键点击“测试计划” -> 新建 -> 输入测试计划名称(例如“Web应用性能测试”)。
  2. 添加线程组

    • 右键点击测试计划 -> 添加 -> 线程组 -> 输入线程组名称(例如“用户模拟”)。
    • 配置线程组:
      • 线程数:1(模拟1个用户)
      • 循环次数:1(每个用户发送1次请求)
      • 启动延迟:0(立即启动)
  3. 添加登录请求

    • 右键点击线程组 -> 添加 -> 取样器 -> HTTP请求。
    • 配置HTTP请求:
      • 名称:登录请求
      • 服务器名称或IP:example.com
      • 端口号:80
      • 协议:HTTP
      • 方法:POST
      • 路径:/login
      • 参数
        • 名称:username
        • :testuser
        • 名称:password
        • :testpass
  4. 添加 BeanShell 断言

    • 右键点击登录请求 -> 添加 -> 断言 -> BeanShell 断言。
    • 配置 BeanShell 断言:
      • 名称:验证用户ID
      • 脚本
        import org.apache.jmeter.samplers.SampleResult;
        import org.apache.jmeter.assertions.AssertionResult;
        
        SampleResult res = prev;
        String response = res.getResponseDataAsString();
        
        // 检查响应数据中是否包含 userId 为 12345 的字段
        if (response.contains("<userId>12345</userId>")) {
            AssertionResult.setFailure(false);
            AssertionResult.setFailureMessage("Response contains the expected userId.");
        } else {
            AssertionResult.setFailure(true);
            AssertionResult.setFailureMessage("Response does not contain the expected userId.");
        }
  5. 运行测试

    • 点击工具栏上的“启动”按钮,运行测试。
    • 查看结果树监听器或查看结果文件,确保登录请求的响应数据中 userId 字段的值为 12345

6dc81ac17c6a4e6e90d48f5d32050ca6.png


 

 

;