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

概述:

我的应用程序几乎没有业务关键流程,我们可以从中提出不同的业务工作流程。当我试图在JMeter中提出性能测试脚本时,我需要找到一些方法来创建可重用/模块化的测试脚本。这样我就可以创建不同的工作流程。

对于Ex:

让我们考虑一个具有以下功能的示例应用程序。

  • 登录
  • 登出
  • 用户注册
  • 搜索产品
  • 选择产品
  • 使用不同的付款方式订购产品
  • 编辑订单
  • 取消订单
  • 搜索用户个人资料

使用上述功能,我可以提出不同的工作流程,如下所示。

 

  • 用户访问应用程序,搜索产品,选择产品,注册,订购产品
    • 用户注册 - >搜索产品 - >选择产品 - >订购产品 - >注销
  • 现有用户登录,搜索产品,选择产品,注册,订购产品
    • 登录 - >搜索产品 - >选择产品 - >订购产品 - >退出
  • 管理员用户登录,搜索用户并取消订单
    • 登录 - >搜索用户 - >取消订单 - >退出

 

由于我有太多的组合,我想找到一种合适的方法来设计我的JMeter测试脚本。在本文中,我将解释如何使用以下JMeter元素实现该目标。

  1. 测试片段
  2. 模块控制器
  3. 参数化控制器
  4. 包括控制器

测试片段:

Test Fragment元素是一个特殊的控制器,可以直接在线程组等JMeter测试计划下添加。但它除了持有其他元素外什么也没做!只有当其他线程组的Module / Include控制器引用它时才会执行它。它就像一个可重用的脚本库。

模块控制器:

JMeter中的模块控制器可用于引用JMeter 测试计划中的任何逻辑控制器。

例如,我的测试中有5个线程组,如下所示。

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

某些功能对于这些线程组可能很常见。例如,用户必须登录包装箱/查看现有产品。

mod001

在上面的示例中,您可以看到,两个线程组都必须具有登录功能。每当登录功能发生变化时,我都需要确保在两个线程组中更新脚本。

因此,而不必在这两个线程组登录重复简单的控制器,我可以添加一个测试片段及移动“用户登录”  简单的控制器下的测试片段。这样它就可以被模块控制器引用。[它不一定是一个简单的控制器。它可以是任何控制器]。

mod002

现在,如果登录脚本发生变化,我只需要更新测试片段下的“用户登录” 。两个线程组都可以正常工作。

参数化控制器:

在上面的示例中,一个“用户登录”正由多个线程组访问。有时,这些线程组可能希望在测试片段下使用这些简单 / 事务控制器,就像一个函数,以便它们可以传递不同的数据,并期望控制器根据传递给它的数据执行操作。

例如,我的要求是在订购新产品时使用VISA信用卡,并在编辑/升级现有订单时使用万事达卡。[对不起,如果这是一个愚蠢的例子。:)] 
我可以使用  参数化控制器来实现这个目的。

mod003

我首先添加参数化控制器。然后我在参数化控制器下添加模块控制器。现在模块控制器调用'Checkout'并传递要在'Checkout'中使用的测试数据。

mod004

mod005

结账控制器将在执行请求时使用传递给它的测试数据。

mod006

包括控制器:

由于模块控制器用于调用测试计划中的逻辑控制器,因此Include Controller用于引用现有的.jmx文件本身。

例如,应用程序非常复杂,有2名工程师参与脚本创建。
开发人员A正在为登录和搜索应用程序的产品功能创建测试脚本。
开发人员B正在为Checkout创建测试脚本。

两位工程师都为应用程序的不同模块提供了不同的.jmx文件。

现在我们创建最终的JMeter测试计划,它将引用这些外部'.jmx'文件,如下所示。

mod007

我可以为登录,订购产品,产品搜索,用户搜索,查看产品,编辑订单,取消订单提供不同的jmx文件

现在我可以通过引用外部jmx文件来创建我想要的任何业务流程。[在最终的JMeter测试中添加用户定义的变量,Cookie管理器等。不在包含的文件中。]

登录 - >订购产品 - >查看产品
登录 - >订购产品 - >编辑订单
登录 - >产品搜索 - >订购产品
登录 - >订购产品 - >产品搜索 - >取消订单

摘要:

通过如上所示设计我的JMeter测试脚本,我可以为不同的业务工作流创建不同的线程组。每当应用程序发生变化时,我都必须在一个地方更新脚本。所有工作流程都将保持不变!

转载于:https://www.cnblogs.com/a00ium/p/10381278.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/412256.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

请求支付宝渠道报错:40006,Insufficient Permissions,ISV权限不足

错误描述: 申请的是支付宝2.0产品(如何区分支付宝产品是1.0还是2.0),请求支付宝渠道时,报错: {"code":"40006","msg":"Insufficient Permissions","sub_code…

dll放在unity哪个文件夹下_unity中调用dll文件总结

unity中调用dll文件总结根据收集的资料,对unity中调用dll文件进行总结,目前常用的两种,在给出vs中封装dll文件的步骤。一、调用c#中的dll文件1.1封装dll文件首先新建一个项目然后创建一个类库,例如命名为Csharpusing System;using…

[vue] watch和计算属性有什么区别?

[vue] watch和计算属性有什么区别? 一个是侦听属性,一个是计算属性 2.一个是为了应对复杂的逻辑计算,一个是对数据的变化作出反应 3.一个是只有当缓存改变时才执行,一个是只要从新渲染就会执行 4.一个有缓存,一个没有…

如何将阿里云的数据库备份RDS文件在本地恢复

1.首先把RDS文件下载到本地,我的备份文件3.5G(下载时间6分钟); 压缩包: hins2448103_data_20180127044633.tar.gz 2.解压下载的RDS压缩包: tar -xzvf hins2448103_data_20180127044633.tar.gz 解压完是一个一个的数据库文件夹…

idea中lombok的使用

1.安装插件 在File-Setting-Plugins-Browse Repostitories中搜索Lombok Plugin插件安装 安装完成先别急着重启,继续设置,在File-Setting-Build, Execution, Deployment-Compiler-Annotation Processors中点击Enable annotation processors 确定后重启ide…

是隐极电机_资料 | 发电机定子绕组端部动态特性试验详解

一、试验目的大型汽轮发电机运行过程中,定子端部受二倍工频(100Hz)的电磁激振力。如果定子端部的模态接近100Hz,将发生谐振,从而可能因振幅过大而发生结构松动、磨损、绝缘损坏等现象,甚至断裂等故障,严重威胁机组的安…

[vue] 为什么data属性必须声明为返回一个初始数据对应的函数呢?

[vue] 为什么data属性必须声明为返回一个初始数据对应的函数呢? 对象为引用类型,当重用组件时,由于数据对象都指向同一个data对象,当在一个组件中修改data时,其他重用的组件中的data会同时被修改;而使用返…

Mac系统xampp环境下安装redis和phpredis

一、安装redis服务 通过homebrew安装redis sudo brew install redis 安装Homebrew mac下redis简单命令 1.安装命令 brew install redis 2.启动Redis命令 redis-server /usr/local/etc/redis.conf 3.停止redis server服务 redis-cli shutdown 4.退出redis server服务 C…

[导入]在C++ Builder3下实现程序自动运行的方法

文章来源:http://blog.csdn.net/nm/archive/2000/08/10/4403.aspx 转载于:https://www.cnblogs.com/zhaoxiaoyang2/archive/2000/08/10/816562.html

[vue] 说说你对keep-alive的理解是什么?

[vue] 说说你对keep-alive的理解是什么? keep-alive是Vue提供的一个抽象组件,用来对组件进行缓存,从而节省性能,由于是一个抽象组件,所以在页面渲染完毕后不会被渲染成一个DOM元素个人简介 我是歌谣,欢迎…

Problem01 不死神兔

题目:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子对数为多少? 程序分析:兔子的规律为数列1,1,2,3,5,8,13,21.... …

中动态路径加载_GOT段在linux系统中实现代码动态加载的作用和其他段的说明

上一节我们看到,当程序想调用系统函数时,在编译阶段无法确认被调用函数所在的虚拟地址。因此必须有机制让程序在运行过程中,在调用系统API的时候有办法去确定所调用的系统函数对应的入口地址,这就是代码运行时对应动态加载的过程。…

构件化软件生产

前面提到的是个人理想,那个是远景的。近期能够触摸到的就是构件化的软件生产了。先摘抄一句我非常喜欢的话:“软件工厂一定不是源代码拼装起来的,而是目标代码拼装出来的。就像零件生产一样,给你一个螺丝就可以拧上,而…

[vue] 你有写过自定义组件吗?

[vue] 你有写过自定义组件吗? 写过,随便说点组件的引入问题、注册问题、传值问题吧个人简介 我是歌谣,欢迎和大家一起交流前后端知识。放弃很容易, 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

GitLab结合Eclipse的简单使用 - 20190211

需求: 移动端的值班经理视图调用了三个接口,需要在移动段的应用下加上三个接口的路由,分别是: /xxx-mvc/dutyView/getProviderSysDeal /xxx-mvc/dutyView/getSysAlarmData /xxx-mvc/dutyView/getSysStaffInfo package com.xxx.xxx…

单片机shell命令_MCU调试大法:使用串口实现简单shell功能

MCU调试大法:使用串口实现简单shell功能[复制链接]MCU程序调试方法有很多,比如软/硬件仿真、添加数据打印等。像Keil MDK就支持不少单片机的软件仿真,在没有拿到单片机的情况下,就可以先仿真调试部分功能,查看代码逻辑…

Google Desktop 果然

<?xml:namespace prefix o ns "urn:schemas-microsoft-com:office:office" />如果是真的&#xff0c;那么果然可怕&#xff0c;还好没有安装&#xff0c;诸位有安装和使用的有没有如下的体验&#xff1f; http://blogs.salon.com/0001561/categories/visual…

[vue] 怎么在vue中使用插件?

[vue] 怎么在vue中使用插件&#xff1f; npm 安装 然后再main.js 引入 最后 vue.use(插件名)个人简介 我是歌谣&#xff0c;欢迎和大家一起交流前后端知识。放弃很容易&#xff0c; 但坚持一定很酷。欢迎大家一起讨论 主目录 与歌谣一起通关前端面试题

中文整合包_MIMOSA2: 基于微生物组和代谢组数据的整合分析

MIMOSA2&#xff1a;基于微生物组和代谢组数据的整合分析MIMOSA2 升级自MIMOSA1。是 Borenstein 实验室(http://borensteinlab.com/ , 专注宏基因组系统 生物学)最新开发的工具。用于微生物群落和代谢组的整合分析&#xff0c;寻找微生物和代谢产物之间的关系。先前Borenstein …

微软建议的ASP性能优化28条守则

二十八条改善 ASP 性能和外观的技巧 Len Cardinal&#xff0c;高级顾问&#xff0c;Microsoft Consulting Services George V. Reilly Microsoft IIS Performance Lead 改编自Nancy Cluts 的文章 开发人员技术工程师 Microsoft Corporation 2000 年 4 月 摘要&#xff1a;本文介…