介绍Jmeter参数化方法之前我们先说一下什么是参数化,以及为什么做参数化。参数化是自动化测试的一种常用技巧,就是将脚本中的一些输入使用参数来代替,在脚本运行时指定参数的取值范围和规则,这样脚本运行时就可以根据需要选择不同的参数作为输入,这种方式通常称为数据驱动测试。
那么进行参数化的目的是什么?从功能方面来讲,某些参数具有唯一性,需要不断的更换新的参数来进行操作,如注册手机号或身份证号,业务操作的订单号等等具有线性业务流程的参数,不能重复使用的参数。从性能方面来说,查询类的业务可能会有缓存处理,所以为了更真实的模拟生产环境,要做参数化。
接下来介绍下Jmeter几种常用的参数化方法。
一、CSV Data Set Config
1、准备数据,在使用CSV数据控件之前,我们要现在指定的路径下创建文件(作为数据池),用来提取参数的文档,可以是.txt格式或.csv格式。
如果多个参数使用英文逗号分隔
然后在要参数化的取样器下添加CSV Data Set Config组件,如图:
2、配置数据控件,如图:
Filename:文件名,指保存信息的文件目录,可以相对或者绝对路径
Fileencoding:csv文件编码,可以不填,默认为UTF-8
VariableNames(comma-delimited):变量名称,用逗号分隔,userName代表参数化文档中的第一列,passwd代表参数化文档中的第二列,取样器中变量使用格式 ${name},如图:
Ignore firstline(only used if variables Names is not empty):是否忽略参数文档第一行,如果有列名的话是需要忽略的,如果没有可以选择false
Delimiter(use'\t for tab'):定义分隔符为',',若参数化文档中有多列,则每列间用逗号分隔(或者用斜杠)
Allowquoted data:是否允许引用数据
Recycle onEOF:到了文件尾处,是否循环读取参数。因为CSV Data Set Config一次读入一行,分割后存入若干变量交给一个线程,如果线程数超过文本的记录行数,那么可以选择从头再次读入
Stop threadon EOF:到了文件尾处,是否停止线程,和Recycle on EOF会有矛盾(优先级自上而下,同时选择Ture,以上边的为准)
Sharingmode:共享模式,All threads –所有线程,Current thread group—当前线程组,Current thread—当前线程。这个地方还是要看CSV数据控件所处的位置(树结构位置),位置不同作用域不同,当放在测试计划下时,All threads模式---所有的线程组都可调用,因为线程组是并行执行,这时取值就就是A线程组取第一个,B线程组取第二个,顺序取值。Current thread group---模式,A线程组按照自己的线程顺序取值,B线程组也按照自己的线程顺序取值,如:A1取第一行,A2取第二行,B1取第一行,B2取第二行。Current thread模式,所有的线程均取第一行,如:A1取第一行,A2也取第一行,B1取第一行,B2也取第一行
二、通过函数助手进行参数化引用
点击“选项-函数助手”点击选择一个功能下拉选框选择_CSVRead函数
CSV file toget values from | *alias:取值的文档路径
CSV文件列号|next| *alias:取值的列号
点击生成,并复制生成的字符串粘贴到取样器的参数值中
三、用户参数方法进行参数化
在测试计划或线程组或取样器下点击右键添加-前置处理器-用户参数,因为组件的作用域不同,所以添加的位置不同决定可以调用该参数的位置不同,测试计划下添加用户参数,所有的线程组均可调用该参数,线程组下添加,仅当前线程组可调用,取样器下添加进当前取样器可添加。
点击添加变量,添加变量名称,点击添加用户添加列,每多一列相当于多了一组数据。
也可以删除变量和用户,删除无法选择顺序,只能自后向前删除。
四、用户定义的变量
这个地方并不是类似于前边的几种方式,直接从数据池里取不同的值,不断的变换不同参数,这里相当于定义好变量,方便全局调用,便于修改的时候,可以只修改这一处即可,不用每个涉及到该变量的地方都修改
首先在计划或线程组或取样器下右键-添加-配置元件-用户定义的变量
然后在用户定义的变量中添加名称和值
在取样器中调用时,直接以${name}的格式调用即可
以上便是几种常用的参数化方法,除了上述几种还有一些函数也可以在某些特定的场景下进行参数化,如_Random函数,这里不再一一讲解,后边详细讲到函数的使用的时候再进行说明,这么多的参数化方法,未必在一个脚本中都会用到,但是掌握后可以根据真实的业务场景选择合适的参数化方法使用。