概述: 

作为性能测试的一部分,我不得不为我们的应用程序提供各种用例/业务工作流程的性能测试脚本。当我设计我的性能测试脚本时,我将确保我有本文中提到的可重用测试脚本。

JMeter - 如何创建可重用和模块化测试脚本

如果您尚未阅读本文,我会请您先阅读本文,然后继续阅读本文!作为上述文章的一部分,您可以了解如何正确设计性能测试脚本/测试计划。

在高级别,我在“测试片段”下维护了一个可重复使用的“测试脚本”模块。然后我使用Module Controller调用特定模块来创建工作流。

jemeter 同时多个请求_运维

我还为每个业务功能/工作流创建了多个“线程组”。

一旦你有一个如上所述的多个线程组的测试计划,那么让我们看看如何使用Property文件维护JMeter测试计划并在本文中的特定环境中运行特定的线程组!

创建一个简单的测试计划:

让我们考虑具有以下业务功能的应用程序。

  1. 新用户注册
  2. 用户登录和订单创建
  3. 用户登录和产品视图
  4. 现有订单编辑/取消
  5. 用户搜索

 

jemeter 同时多个请求_运维_02

让我们假设我们已经提出了具有多个线程组的性能测试计划,如上所示。每个线程组将执行特定功能。

样品性能测试要求:

现在让我们假设我们有性能要求,比如

  1. 独立测试每个模块(一次只运行1个线程组)。
  2. 测试模块组合(超过1个线程组/全部)。
  3. 在不同环境中进行测试(在不同环境中进行相同测试 - 在我的项目中,我还在两个不同的环境中运行相同的测试 - 质量保证和临时测试)。

参数化环境详细信息:

  • 首先,让我们创建包含每个环境的测试环境详细信息的不同属性文件。
# QA.properties

test.environment.hostname=10.11.12.14
test.environment.port=8080 test.environment.protocol=http



复制



# Staging.properties

test.environment.hostname=10.11.12.13
test.environment.port=443 test.environment.protocol=https



复制



 

jemeter 同时多个请求_jemeter 同时多个请求_03

  • 然后从测试计划中的HTTP请求/采样器中删除所有服务器名称/ IP,端口,协议详细信息。
  • 让HTTP采样器只有Path,Parameters,其他特定于请求的信息。
  • 在测试计划下添加HTTP请求默认值,如下所示。
    (如果HTTP请求缺少信息,JMeter将从HTTP请求默认值中获取。因此,在一个地方更新IP,端口详细信息将反映在整个测试中)。

 

jemeter 同时多个请求_User_04

 

jemeter 同时多个请求_jemeter 同时多个请求_05

注意:

  • $ {__ P(test.environment.hostname)}将检索属性文件中给出的ip地址或主机名的值。

现在,您的测试计划已修改为在任何给定的测试环境中运行脚本。

参数化线程组详细信息:

  • 我们的测试计划中有多个线程组。
  • 我们将通过属性文件将线程组用户数,加速期,线程组持续时间信息传递给测试。让我们创建一个属性文件,如下所示。
# Anonymous User - Product Search

group1.usercount=10
group1.rampup=10 group1.duration=600 # New User Registration group2.usercount=10 group2.rampup=10 group2.duration=600 # User Login & Order Creation group3.usercount=10 group3.rampup=10 group3.duration=600 # User Login & Existing Product View group4.usercount=10 group4.rampup=10 group4.duration=600 # BackOffice Admin User Activities - Existing Order Edit/Cancel group5.usercount=10 group5.rampup=10 group5.duration=600



复制



  • 应修改所有线程组以使用下面给出的属性。

jemeter 同时多个请求_测试计划_06

 

  • 要运行1个特定线程组,我们可以更改线程组的用户数(用户数)属性。例如,如果我们只需要运行“新用户注册”模块,则所有其他模块的用户计数属性可以设置为0。

注意:

如果线程组用户计数为0,则JMeter无法执行线程组。通过将线程组用户计数属性更新为0,可以禁用线程组。

  • 让我们根据您的兴趣创建具有不同组合的多个属性文件。例如,  anonymoususers-only.properties 将具有以下属性。
# Anonymous User - Product Search - Only

# Anonymous User - Product Search

group1.usercount=100 group1.rampup=100 group1.duration=3600 # New User Registration group2.usercount=0 group2.rampup=0 group2.duration=0 # User Login & Order Creation group3.usercount=0 group3.rampup=0 group3.duration=0 # User Login & Existing Product View group4.usercount=0 group4.rampup=0 group4.duration=0 # BackOffice Admin User Activities - Existing Order Edit/Cancel group5.usercount=0 group5.rampup=0 group5.duration=0



复制



因此,我创建了多个属性文件来控制特定的线程组执行。

  • registration-only.properties
  • ordercreation-only.properties
  • all-modules.properties ..等

再添加一个“属性文件读取器”来读取您感兴趣的特定模块。

jemeter 同时多个请求_测试计划_07

通过命令行控制线程组和环境:

  • 此时,我们已经使用2个属性文件读取器创建了一个JMeter测试计划,如上所述。
  • 现在,让我们使用我将在运行时通过命令行传递的属性来参数化环境和模块。

jemeter 同时多个请求_测试计划_08

休息很简单!!!

  • 在Staging环境中运行所有模块
jmeter -n -t test.jmx -l result.jtl -Jenvionment=staging -Jmodule=all-module



复制



  • 要在QA环境中运行所有模块,
jmeter -n -t test.jmx -l result.jtl -Jenvionment=QA -Jmodule=all-module



复制



  • 要在Staging上运行订单创建模块,
jmeter -n -t test.jmx -l result.jtl -Jenvionment=staging -Jmodule=ordercreation-only



复制



要在QA上运行注册模块,

jmeter -n -t test.jmx -l result.jtl -Jenvionment=QA -Jmodule=registration-only



复制



 

通过Jenkins触发线程组:

如果我们使用Jenkins运行我们的测试,这些测试环境和模块可以是包含可能值的下拉列表,并作为参数从Jenkins传递给JMeter。

因此,我们可以在特定环境中运行特定的线程组,而无需修改JMeter测试,如下所示。

jemeter 同时多个请求_jemeter 同时多个请求_09

有关JMeter-Jenkins集成的更多详细信息,请访问此处

摘要:

通过使用可重用的测试脚本,多个线程组和Property File Reader等正确设计JMeter测试计划,我们能够在运行时控制特定的线程组执行。

因此,我们可以专注于特定模块的性能相关问题,而不是每次都运行整个测试计划。