JMeter - 如何在多个测试环境中运行多个线程组

概述:

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

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

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

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

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

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

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

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

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

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

样品性能测试要求:

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

  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

复制

  • 然后从测试计划中的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测试计划,我们能够在运行时控制特定的线程组执行。

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

原文地址:https://www.cnblogs.com/a00ium/p/10381267.html

时间: 2024-07-30 11:10:35

JMeter - 如何在多个测试环境中运行多个线程组的相关文章

SQL Server中使用数据库快照的方式来完成测试环境中数据库的轻量级备份还原操作

原文:SQL Server中使用数据库快照的方式来完成测试环境中数据库的轻量级备份还原操作 在开发或者测试环境的数据库中,经常会发现有开发或者测试人员误删除表或者数据的情况,对于开发或者测试库,一般都没有安排定时的备份任务去备份数据库,一方面是由于存储资源有限,不太可能给开发或者测试环境准备大量的存储空间,二是必要性不是很强,开发或者测试库的数据库对象变化太多,通过还原备份的方式又有可能冲掉其最近新建的数据库对象.但是不得不面对的问题就是个别人在执行update或者delete操作的时候“忘了加

国内首发讲解:RIDE 可以在 linux+python3 的环境中运行啦!

[引言] RIDE 是robotframework自动化测试框架的一个编辑工具.之前这个工具,只能在windows系统+python2的环境中运行. 就在2020年1月20日,官方发布了1.7.4.1版本,已经可以在linux+python3的环境中运行了. 关注robotframework的同学,可以看下这篇文章,在国内应该还鲜有人介绍. RIDE1.7.4.1版本,是一个python自动化测试中一个跨越式版本更新. 1 RIDE是什么? RIDE是什么?它是用来干什么的? 对于一些吃瓜群众来

python环境中运行程序

运行Python程序,我们比较常用的是直接在Windows命令提示窗口或者Linux终端或shell窗口中,直接:Python *.py,或者在Linux环境下,在投不中,加入: #!/usr/bin/env python 然后 ./*.py 直接运行 但是进入Python后,该怎么运行呢? 这里就简单介绍一下,这里先简单介绍下os的部分功能. import os; #在Python环境中,引入环境,是必须的:具体可以查看Python中的os os.getcwd(); #得到当前工作目录 os.

不允许用(a+b)/2这种方式求两个数的均值;如下程序在Linux和32位集成开发环境中运行

#define MAX(a,b) ((a)>(b)?(a):(b)) #include<stdio.h> int main() { int a = 10; int b = 20; int c = 0; int arevage = 0; c = MAX(a,b); arevage = c + (a - b)/2; printf("%d\n",arevage); return 0; } arevage可以用来定义变量吗 为什么 int arevage = 0;可以在win

如何在 Kubernetes 环境中运行 Spark 集群

处理这么大量的数据,背后的机器可能是数以千计,无法通过人工来监控机器的状态.因此,本文将介绍用 Kubernetes 容器管理工具,并通过简单示例,告诉你如何建立一个 Spark 集群. 准备阶段 1.需要拥有正在运行的 Kubernetes 集群,并使用 Kubectl 为其配置访问权限.如果你还没有可用的 Kubernetes 集群,则可以使用 Minikube 在本地计算机上设置测试集群 . 我们建议将 Minikube 更新为最新版本(编写本文档时为0.19.0),因为某些早期版本可能无

用.net 2.0开发的程序在.net 4.0的环境中运行的解决方案

引用:.NET2.0程序集无法在.net 4.0 中运行的解决方案 1. 原来是在.net 2.0 (VS2008)的环境下的程序,通过升级到.net 4.0 (VS2013)导致程序运行不了 就是通过VS2013直接打开VS2008的项目,然后进行自动升级,升级后,可能有些程序在VS2013中 直接"F5"启动不起来,请找到 app.config配置文件: 找到 <starup>节点,内容大家一看就知道了,无非是指明运行时使用的.net环境 <startup use

第七章 程序是在何种环境中运行的

在这一章中,我知道了应用是必须在一定的环境下才能运行的,其运行环境是操作系统和硬件构成的. 同样类型的硬件可以选择安装多种操作系统,而不同的硬件类型需要不同的操作系统.说起硬件,CPU是特别重要的参数,由于CPU能解释其自身固有的机器语言,所以不同的CPU能解释的机器语言也是不同的.还有就是机器语言的程序称为本地代码,而源代码就是用C语言等编写的程序.(应用软件包收录的是本地代码) 20世纪80年代的MS-DOS操作系统,其每个机型都需要有专门的MS-DOS应用,这是因为应用软件的功能中存在着直

JPDA 架构研究7 - Agent利用环境指针访问VM(线程组管理篇)

引入: 上篇文章中我们讨论了Agent利用环境指针访问VM的线程操作,这里讨论线程组操作. 分类3:线程组操作 a.GetTopThreadGroups.让Agent获取VM中的所有全局的线程组. jvmtiError GetTopThreadGroups(jvmtiEnv* env,             jint* group_count_ptr,             jthreadGroup** groups_ptr) 函数会返回全局的线程组的数量和线程组的列表. b.GetThre

OpenCV程序在生产环境中运行

1.安装OpenCV(3.0),需要注意的是OpenCV的提取路径要和VS中项目的OpenCV路径保持一致: 2.设置环境变量,在path变量后追加:C:\OpenCV的提取路径\build\x64[对应自己的系统版本]\vc12\bin: 3.也是很重要的一步:如果系统中没有:MSVCR120D.dll和MSVCP120D.dll这两个dll,一定要将这两个dll拷贝到:C:\windows\system32文件夹下: (ps:在安装过vs的系统中的system32文件夹下可以找到这俩文件)