前言
在使用Jmeter进行性能测试时,需要并发多个用户,模拟真实用户行为,此时就需要模拟多个不同用户同时请求,每个用户请求中的imei或uuid动态变化。Jmeter提供了参数化的功能,配置元件、函数助手以及前置处理器中的用户参数,均能够帮助我们解决这个问题。
配置元件是最常使用的一种方式,CSV Data Set Config 可以从指定的文本文件或csv文件一行一行的读取文本内容,通过分隔符拆解每行内容,并把内容与变量名一一对应起来,每个请求取文件中不同行的值,实现并发多个用户的需求。我们可以在配置元件中找到它。CSV数据文件设置页面如下:
其中,参数含义如下: Filename:引用文件地址,可以填相对路径或绝对路径。相对路径的根节点是Jmeter的启动目录,如果测试执行是分发到多台远程负载机上的,使用相对路径能够避免因Jmeter安装路径不同导致的参数化文件无法取到的问题。另外,也可以利用Jmeter的变量来参数化参数文件的路径,使用${paraUrl},同时在元件【User Defined Variables】中设置文件路径。 File encoding:读取参数文件时的编码格式,建议填写UTF-8,避免打开乱码情况。 Variable Names(comma-delimited):即HTTP请求中希望随请求变化的变量名称。如果有多个变量,需使用符号隔开,该符号应与引用文件中变量之间的符号一致。若该处填写的变量名称多余引用文件中的参数列数,则多余的参数将无法取到值。 Ignore first line(only used if Variable Names is not empty):忽略首行,当引用文件中首行设置了变量名时,该项设为 true,此时每次请求读取文件时会自动忽略首行,直接读取第二行的数据。 Delimiter(use '\t' for tab):即用来分隔引用文件中的分隔符,如果引用文件中使用tab分隔,此处填写'\t'。
Allow quoted data?:是否允许引用的数据,如果选择true,则表示可以允许拆分完成的参数之间有分隔符出现。比如,引用文件中的值为:"31,celling",998d9e385a0c25b0e750,如果此处选择true,则拆分后的参数为31,celling和998d9e385a0c25b0e750。 Recycle on EOF?:参数文件是否循环遍历。 Stop thread on EOF?:当读取到参数文件末尾时,是否停止读取线程,默认为 false。当 Recycle on EOF? 设置为 true 时,此项不起任何作用。当且仅当 Recycle on EOF? 为 false 时,此项配置才生效。 Sharing mode:参数文件共享模式。主要有以下三种模式:
CSV Data Set Config元件可以动态替换指定数据的参数值,如果我们想让某个值的内容是随机生成的,可以使用函数来生成。位置在快捷工具栏的倒数第二位:
介绍一个生成随机字符串的函数,__RandomString。Random string lengh:生成的字符串长度。 Chars to use for random string generation:指定用哪个字符作为种子进行随机生成,可支持中文、数字、字母。 Name of variable in which to store the result (optional):可选项,填了之后,运行脚本后可以在Debug Sampler中看到这个变量的值。 填写好参数之后,点击Generate,会生成一串字符${__RandomString(30,abt2345函数kji助手,)},可直接作为请求中的参数化数据,如下图所示。
运行结果可以看到,每次请求时携带imei参数均为随机生成的字符串:
当然,函数助手中有很多强大的函数,在此不一一列举。
在实际测试过程中,有时测试地址会发生变化,将访问地址参数化之后,只需改动参数对应的值就可以改变访问地址。具体过程如下: -在HTTP请求中设置参数URL和PORT
-在User Defined Variables中定义URL和PORT具体值
用户参数
在该元件中,可以看到有“Add Variable”、“Add User”、“Delete Variable”、“Delete User”,在进行参数化取值时,根据用户进行区分。
比如,有两个线程,分别要取变量imei的值,则可以分别从此处取值,效果与其他方法相同。
参数化能够帮助我们把固定数据动态化,更加贴合实际的模拟用户请求,利用好参数化功能可以有效提高测试效率,更加合理评估线上服务性能或进行性能调优。想了解更多Jmeter的知识,请持续关注吧~