性能测试基础之脚本参数化

(一)

在用性能测试工具准备测试脚本的过程中往往是脚本录制易,脚本调试不易。录制完脚本之后,我们的脚本通常并不能够马上运行出正确的结果来,譬如没有进行正确的关联、譬如某些图片或资源请求报错(一般对业务流程没有影响的、需要过滤掉的)、譬如某些页面加载需要较长时间(响应超时)、又譬如某些值是需要变化的等等。

“某些值是需要变化的”是个什么鬼?好吧,这个鬼就是这篇小文主要想抛砖引玉一下的东东。举一个例子,某组织机构下各组织单位使用的人力资源管理系统,其中有个请假申请单的业务模块,脚本录制过程具体操作如下图所示:

这个脚本在进行负载测试时就有需要进行变化的值,比较典型的几处:

(1)      登录部分

有些系统限制同一用户重复输入,所以脚本在回放的时候(即第二次提交的时候)是提交不成功的,这是很正常的情况。此外同一用户重复登录,一边操作这个功能,同时又操作另一个功能,这不符合逻辑,过程紊乱,也极易产生错误。因而,登录用户名、密码是需要变化的,例如{"selectionStartedPosition":12,"selectionEndedPosition":12,"text":"T02020002001"}。

(2)      组织机构、职员等选择

实际业务中,不同用户里面包含的组织、人员等基础数据不同,对于被选择的值,有些系统是用坐标定位的,例如{"current_cell":"1,1","selections":"1,1,1,1;"},这个坐标值也是需要变化。

(3)      上传附件

系统里存在表单需要上传附件才可以提交的情况,这个附件文件与用户所在组织一一对应,这种情况下,这个文件也需要进行参数化。

(4)      填写请假事由

对于一个需要保存的表来说,里面的值不发生变化,这个保存实际上没有操作成功,这种情况下,填写请假事由这个文本类内容的值就需要变化。

说了这么多种情况,解决以上问题的办法,就是脚本参数化。给脚本参数化下个定义,就是在性能测试脚本中,对于需要发生变化的值,用参数替换固定的文本这一过程。

(二)

说完了在什么情况需要进行脚本参数化,接下来我想说一说如何进行脚本参数化,以我常用的HyperPacer作为测试工具举例。进行参数化,就是给之前的参数赋值,这些值从哪里来?HyperPacer有一个功能叫做“数据池”,来提供满足条件的数据,目前支持文件导入数据库导入自定义其它四种方式,具体使用过程如下:

首先右击测试场景“并发测试”,选择“配置元件”,在弹出的对话框中选中“数据池”(引用时,数据池是一个配置元件,需要从已经生成好的数据选择当前脚本需要的数据),如图:

(1)      文件导入

顾名思义,文件导入就是把已有的数据文件导到数据池中,这个文件被存储起来供调用,这种方式是比较常用的一种。目前导入的文件只支持txt和csv格式,读取策略按逐行读取,每列数据需要一个唯一的变量名称供引用时使用(变量名称可以是文件首行数据)。

TXT文件格式如下(每列以逗号分隔):

CSV文件格式如下:

进入“数据工厂”页签,导入数据文件之后点击预览,如下图:

保存时需要输入唯一的标识名称:

保存完成之后进入“数据引用”页签,选中data数据文件,会生成三个参数名称。然后用这些参数名称替换脚本里的文本值就OK了。

共享模式的选项确定了该数据项的作用域范围,如无特殊需要选择默认的全部用户。

读取模式的设定则控制了不同的执行线程对数据的提取过程采用何种的策略,默认是顺序向下读取。

在工具左侧的工程树中定位到对应的数据包,找到相关的字段(zhangsan)将其替换为对应的变量名称(${data.username})。至此,参数化过程全部操作完毕。脚本再次执行时,便用的是参数化替换后的数据了。

(2)      数据库导入

当你需要的数据完全可以从数据库中获取并满足需要时,譬如用户名,可以直接使用这个导入方式,而不需要先从数据库中导出数据文件到本地,再从本地导入数据池中了。

首先填写所连接的数据库的配置信息

数据库配置信息填完后,点击测试看看是否连接成功,连接成功之后点击确定,自动进入控制台页签写sql,获取数据:

之后保存读取的数据,给数据一个唯一的标识名称,后续引用同方式(1)“文件导入”。

(3)      自定义

还有一种情况是,参数化有时候需要大量的数据,但是这些数据内容或许并不重要。这种情况下,可以使用自定义方式来生成数据。我在做压力测试时,有个填表格的操作,需要大量数据,就是使用的这个方式。

第一步,使用sql创建一个表格,选择数据生成方式:

第二步,如果选择的是自动生成,点击下一步,对表中的每个字段进行配置,之后选择生成条数后点生成:

保存数据,给数据一个唯一的标识名称,后续引用文件同方式(1)“文件导入”。就个人而言,这个准备数据的方式是最爽的,分分钟获得你想要的数据。

对了,如果你选择的是手动执行Insert Sql生成的话,直接写sql生成数据即可:

(4)      其它

最后数据池还提供特殊数据生成方式:按条件生成身份证号,按条件生成邮箱,提供汉字姓名生成拼音。前两个选择条件即可

汉字生成拼音可以从文件读取,也可以随机生成,也可以加诸如“@jiuqi.com.cn”后缀,

此外,数据池还有一个“我的数据”功能,主要对存储的数据进行“增删改查”的管理。

以上,脚本参数化告一段落了,看客们不知道有没有收获,HyperPacer的数据池功能相比于jmeter和loadrunner做了一些本地化处理,更符合国内研发的软件对性能测试数据的需求,总体使用感觉棒棒哒!期待大家更多的交流与分享!

时间: 2024-12-15 17:22:46

性能测试基础之脚本参数化的相关文章

性能测试-6.VUG脚本参数化

前言:(原文地址)版面调整 什么是VUGEN action以及作用 参数化 参数化取值(9种组合,在不同场景中如何运用) 一.VUGEN是 LoadRunner 用于开发 Vuser 脚本的主要工具.VuGen 不仅能够录制 Vuser 脚本,还可以运行这些脚本.进行调试时,从 VuGen运行脚本很有用.通过运行脚本,可以模拟 Vuser 脚本在作为负载测试方案的一部分执行时,将如何运行. 1.选择协议 2.点击录制脚本,弹出录制启动信息 二.Action:就是函数包    什么是函数:完成一定

LoadRunner性能测试基础知识问答

Q1:什么是负载测试?什么是性能测试? A1:负载测试是通过逐步增加系统负载,测试系统性能的变化,并最终确定在满足性能指标的情况下,系统所能承受的最大负载量的测试,例如,访问一个页面的响应时间规定不超过1秒,负载测试就是测试在响应时间为1秒时,系统所能承受的最大并发访问用户的数量. 性能测试:指在一定的约束条件下(指定的软件.硬件.网络环境等),确定系统所能承受的最大负载压力. Q2.性能测试包含了哪些测试(至少举出3种) A2:性能测试包含负载测试.压力测试.大数据量测试.疲劳强度测试等. Q

jmeter性能测试基础实战

一.前言 “纸上得来终觉浅,绝知此事要躬行.”学习了理论知识,要实操起来.本文主要介绍jmeter性能测试基础实战. 二.Jmeter 性能测试基础实战 1.测试需求:测试20个用户访问https://www.cnblogs.com/huainanhai/ 在负载达到30 QPS时的平均响应时间. QPS: Query Per Second每秒查询率:是一台查询服务器每秒能够处理的查询次数.在因特网上,作为域名系统服务器的性能经常用每秒查询率来衡量. 2.测试步骤: 第一步:添加线程组 线程组主

【读书笔记】性能测试基础

读书笔记:<零成本实现Web性能测试>第1~3章随手记 第1章 性能测试基础 性能测试的基本流程: 1.明确性能测试需求 2.制定性能测试方案 性能测试方案应该详尽地描述如何进行性能测试,其中应该至少包括: 1)测试背景 2)测试目的 3)测试范围           4)测试进入条件           5)测试退出条件 6)测试指标要求 7)测试策略 8)测试时机 9)测试风险 10)测试资源      3.编写性能测试案例 4.执行性能测试案例 5.分析性能测试结果 6.生成性能测试报告

JMeter基础--录制脚本

JMeter官方站点:http://jmeter.apache.org/ JMeter是一款在国外非常流行和受欢迎的开源性能测试工具,虽然与LoadRunner相比有很多不足,比如:它结果分析能力没有LoadRunner详细:但它的优点也有很多: 开源,他是一款开源的免费软件,使用它你不需要支付任何费用, 小巧,相比LR的庞大(最新LR11将近4GB),它非常小巧,不需要安装,但需要JDK环境,因为它是使用java开发的工具. 功能强大,jmeter设计之初只是一个简单的web性能测试工具,但经

JMeter性能测试基础 (1) - 安装及简单使用

Apache JMeter是一款开源性能测试工具,全部功能使用Java编写,可用于进行性能测试.JMeter最初被设计用于Web应用测试,之后被扩展至多个测试领域. Apache jmeter 可以用于对静态资源的和动态资源(包括WebServices(SOAP/REST).动态Web语言(PHP.Java.ASP.NET.文件.及其它内容).Java对象.数据库及数据查询.FTP服务器等等)进行性能测试.它可以用于对服务器.集群,网络 或对象模拟繁重的负载来测试它们的强度或分析不同压力类型下的

性能测试基础-SOCKET协议用例

1.首先在进行性能测试的时候,我们要了解软件的通信协议是什么,我们使用什么协议,如何去模拟.SOCKET协议主要应用于在C/S模式的系统. 作者本人已当初做过的C/S架构的系统做的脚本录制,在上面做脚本的参数化以及优化工作.脚本如下: #include "lrs.h" #include <sub1.h> #include <sub2.h>//包含了2个自定义的C函数.LR不支持C++的函数库.C++函数需要做修改 Action() { unsigned char

性能测试基础(一)

随着软件行业的快速发展,现代的软件系统越来越复杂,功能越来越多,测试人员除了需要保证基本的功能测试质量,性能也随越来越受到人们的关注.但是一提到性能测试,很多人就直接连想到Loadrunner.认为LR就等于性能测试,其实这是不对的.LR只是性能测试的一个工具,但性能测试不仅仅是LR.本文会从以下几个方面介绍基础的性能测试理论,后续也会持续更新相关文章,尽量理论结合实践,让性能测试学习不在是工具的学习. 目录: 一. 什么是软件性能 二.不同群体眼中的性能 三.性能测试类型 四.性能测试应用场景

JMeter脚本参数化 的方法用

一.什么叫参数化,参数化用来做什么? 参数化是干嘛的呢,咱们在调用接口的时候,有入参,那参数里面的值如果经常变化的话,就得每次去改了,很麻烦,这时候咱们就把需要经常变的值,改成可以变化的或者是咱们提前设置好的一些值,这样的话,调用的时候就不用每次都改它的值了. 用Jmeter测试时包含两种情况的参数 二.Jmeter参数化的方式有三种 ?1.用户定义的变量 ?这种就是为了方便管理参数,只能有一个值,比如说ip地址不经常变化的 ?2.函数生成器 ?函数生成器可以参照一定的规则生成数据,这样的比如说