JMeter - 如何在多个测试环境中运行多个线程组
概述:
作为性能测试的一部分,我不得不为我们的应用程序提供各种用例/业务工作流程的性能测试脚本。当我设计我的性能测试脚本时,我将确保我有本文中提到的可重用测试脚本。
如果您尚未阅读本文,我会请您先阅读本文,然后继续阅读本文!作为上述文章的一部分,您可以了解如何正确设计性能测试脚本/测试计划。
在高级别,我在“测试片段”下维护了一个可重复使用的“测试脚本”模块。然后我使用Module Controller调用特定模块来创建工作流。

我还为每个业务功能/工作流创建了多个“线程组”。
一旦你有一个如上所述的多个线程组的测试计划,那么让我们看看如何使用Property文件维护JMeter测试计划并在本文中的特定环境中运行特定的线程组!
创建一个简单的测试计划:
让我们考虑具有以下业务功能的应用程序。
- 新用户注册
- 用户登录和订单创建
- 用户登录和产品视图
- 现有订单编辑/取消
- 用户搜索

让我们假设我们已经提出了具有多个线程组的性能测试计划,如上所示。每个线程组将执行特定功能。
样品性能测试要求:
现在让我们假设我们有性能要求,比如
- 独立测试每个模块(一次只运行1个线程组)。
- 测试模块组合(超过1个线程组/全部)。
- 在不同环境中进行测试(在不同环境中进行相同测试 - 在我的项目中,我还在两个不同的环境中运行相同的测试 - 质量保证和临时测试)。
参数化环境详细信息:
- 首先,让我们创建包含每个环境的测试环境详细信息的不同属性文件。
# 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
- 现在添加一个“ 属性文件读取器 ”以在运行时读取特定的环境详细信息。

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


注意:
- $ {__ 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
- 应修改所有线程组以使用下面给出的属性。

- 要运行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 ..等
再添加一个“属性文件读取器”来读取您感兴趣的特定模块。

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

休息很简单!!!
- 在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测试,如下所示。

有关JMeter-Jenkins集成的更多详细信息,请访问此处。
摘要:
通过使用可重用的测试脚本,多个线程组和Property File Reader等正确设计JMeter测试计划,我们能够在运行时控制特定的线程组执行。
因此,我们可以专注于特定模块的性能相关问题,而不是每次都运行整个测试计划。
JMeter - 如何在多个测试环境中运行多个线程组的更多相关文章
- django第8天(在测试文件中运行django项目|单表操作)
django第8天 在测试文件中运行django项目 1.将项目配置文件数据库该为mysql,修改配置信息 PORT = '127.0.0.1' DATABASES = { 'default': { ...
- 如何将其它javaweb项目变成可以成功在自己eclipse环境中运行的javaweb项目?
说明:此文档仅适用于以下两种情况 (1)myeclipse项目需要在eclipse环境中运行 (2)eclipse项目,但是无法在自己的电脑eclipse环境中运行 注意:以下 ...
- RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大、最高效的方法之一。它为在分布式计算环境中运行的几乎所有应用程序提供基础。
RPC 编程 使用 RPC 编程是在客户机和服务器实体之间进行可靠通信的最强大.最高效的方法之一.它为在分布式计算环境中运行的几乎所有应用程序提供基础.本文介绍 RPC 客户机和服务器之间基本的事件流 ...
- 2015年4月27日---C语言:输出特殊图案,请在c环境中运行,看一看,Very Beautiful!
---恢复内容开始--- 题目:输出特殊图案,请在c环境中运行,看一看,Very Beautiful! 1.程序分析:字符共有256个.不同字符,图形不一样. 2.程序源代码: [code=c] #i ...
- 不允许用(a+b)/2这种方式求两个数的均值;如下程序在Linux和32位集成开发环境中运行
#define MAX(a,b) ((a)>(b)?(a):(b)) #include<stdio.h> int main() { int a = 10; int b = 20; i ...
- SQL Server中使用数据库快照的方式来完成测试环境中数据库的轻量级备份还原操作
在开发或者测试环境的数据库中,经常会发现有开发或者测试人员误删除表或者数据的情况,对于开发或者测试库,一般都没有安排定时的备份任务去备份数据库,一方面是由于存储资源有限,不太可能给开发或者测试环境准备 ...
- 使用Windbg找出死锁,解决生产环境中运行的软件不响应请求的问题
前言 本文介绍本人的一次使用Windbg分析dump文件找出死锁的过程,并重点介绍如何确定线程所等待的锁及判断是否出现了死锁. 对于如何安装及设置Windbg请参考:<使用Windbg和SoS扩 ...
- python环境中运行程序
运行Python程序,我们比较常用的是直接在Windows命令提示窗口或者Linux终端或shell窗口中,直接:Python *.py,或者在Linux环境下,在投不中,加入: #!/usr/bin ...
- 用.net 2.0(或.net 3.5)开发的程序在.net 4.0的环境中运行的解决方案
引用:.NET2.0程序集无法在.net 4.0 中运行的解决方案 1. 原来是在.net 2.0 (VS2008)的环境下的程序,通过升级到.net 4.0 (VS2013)导致程序运行不了 提示需 ...
随机推荐
- Struts2 - 配置文件中result 节点详解
每个 action 方法都将返回一个 String 类型的值, Struts 将根据这个值来决定响应什么结果. 每个 action 声明都必须包含有数量足够多的 result 元素, 每个 resul ...
- [转]sscanf函数具体用法
大学生程序代写 sscanf 名称: sscanf() - 从一个字符串中读进与指定格式相符的数据. 函数原型: Int sscanf( string str, string fmt, mixed v ...
- loj517 计算几何瞎暴力
在序列上维护4个操作 1.在序列的尾端添加x 2.输出Al~Ar的和 3.将所有数异或x 4.将序列从小到大排序 第一眼看上去是Splay于是头铁硬刚了一发 后来发现splay没法异或 去百度“维护异 ...
- 记一次编译tensorflow-gpu爬过的坑
废话不多说,先说最终成功的版本:系统=>centos7 ,cuda=>10.0 ,cudnn=>7.5 ,nccl=>源码编译, tensorflow=>最新版本源码编译 ...
- oracle rac的特征
oracle rac的特征 1. spfile 参数文件需要被所有节点访问,需要放在共享存储上. 2. Redo ThreadRAC 环境下有多个实例,每个实例都需要有自己的一套Redo log 文件 ...
- 机器学习:k-NN算法(也叫k近邻算法)
一.kNN算法基础 # kNN:k-Nearest Neighboors # 多用于解决分裂问题 1)特点: 是机器学习中唯一一个不需要训练过程的算法,可以别认为是没有模型的算法,也可以认为训练数据集 ...
- MyEclipse 手动安装Velocity 编辑器
最近项目有使用Velocity 模板引擎,从而会用到*.VM页面!Myeclipse打开VM页面字体一片漆黑,哪有JSP那样看起来舒服(个人感觉)!为了解决这一问题就要安装Velocity编辑器,安装 ...
- 数据库高手(DBA专家 ,SSIS,replacation ,tourble shooting)
http://www.cnblogs.com/qanholas/category/266780.html 随笔分类 - mssql SQL Server 2008 Datetime Cast 成 Da ...
- VUE之使用百度地图API
利用vue创建点餐系统,在点餐系统中需要知道商家地址信息,这时就需要借用百度地图API. 步骤一:申请百度地图密钥: 步骤二:在index.html中添加百度地图JavaScript API接口: & ...
- C++之string类
1.String对象的初始化 string s1; 默认构造函数,s1为空串 string s4(n, 'c'); 将s4初始化为字符c的n个副本 string s ...