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)导致程序运行不了 提示需 ...
随机推荐
- 洛谷【P3407】散步
我对状态空间的理解:https://www.cnblogs.com/AKMer/p/9622590.html 题目传送门:https://www.luogu.org/problemnew/show/P ...
- redhat 安装lamp
安装Apache yum install httpd 安装MySql yum install mysql mysql-server 安装php yum install php 安装php的mysql模 ...
- MySQL的分页技术总结
利用子查询示例: SELECT * FROM your_table WHERE id <= (SELECT id FROM your_table ORDER BY id desc LIMIT ( ...
- 2013 蓝桥杯校内选拔赛 java本科B组(题目+答案)
一.标题:正则表示 正则表达式表示了串的某种规则或规律.恰当地使用正则表达式,可以使得代码简洁.事半功倍.java的很多API都支持正则表达式作为参数.其中的String.split就是这样. ...
- app专项测试(稳定性测试、安全性测试)
https://blog.csdn.net/xiaomaoxiao336368/article/details/84887948
- 【转】Pro Android学习笔记(十五):用户界面和控制(3):Button控件
目录(?)[-] 基础Button ImageButton ToggleButton CheckBox RadioButton 基础Button Button是最常用的基础控件之一,在Android中 ...
- 启动新内核出现:No filesystem could mount root, tried: ext3 ext2 cramfs vfa
转载请注明出处:http://blog.csdn.net/qq_26093511/article/details/51841791 下载新编译的内核出现:No filesystem could mou ...
- UML核心元素--用例
定义:用例定义了一组用例实例,其中每个实例都是系统所执行的一些列操作,这些操作生成特定主角可以观测的值.一个完整的用例定义由参与者.前置条件.场景.后置条件构成. 1.理解用例:用例就是参与者希望通过 ...
- linux日常管理-rsync常用选项详解
-av 同步目录 写法 123/ /tmp/333/ 意思是把123下的文件同步到/tmp/333/下 结尾不加/ 只同步目录 两个目录一样的. //////////////////////// ...
- shell入门-grep-3-egrep
grep -E == egrep [root@wangshaojun ~]# grep --color 'r\?o' 1.txt == egrep --color 'r?o' 1.txt ^C[roo ...