JMeter调试脚本之变量参数化

发表于:2018-4-26 10:22

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Silence&QH    来源:博客园

  前言
  对于参数化,觉得用得最多的应该是csvread函数、csv data config以及用户自定义变量(前一篇文章已经进行了讲解)控制器这几个
  案例:bugfree ,提交bug,参数bug名称和创建人
  方法一、依赖Jmeter自带的函数助手
  选项-->函数助手对话框,即可打开函数助手弹窗
  比如使用函数__CSVRead
  先准备txt文件,可以先在notepad++里准备好数据,保存的时候格式选择txt格式;
  输入txt文件所在的路径:C:\Users\Anne\Desktop\Jmeter\data.txt,输入参数所在的列(注意:此处列数是从0开始数的,第一列是bug_name,对应的列号为0,第二列是bug提交人,对应的列号为1...),生成被调用的函数:${__CSVRead(C:\Users\Anne\Desktop\Jmeter\data.txt,0)}
  在参数对应的值处填入:${__CSVRead(C:\Users\Anne\Desktop\Jmeter\data.txt,0)}
  要区第二个参数时,对应的位置,填入:${__CSVRead(C:\Users\Anne\Desktop\Jmeter\data.txt,1)}
  对应的参数修改完后,执行脚本,在查看结果树中,查看运行结果
  方法二、CSV Data Set Config
  选中取样器,右键:添加-配置元件-CSV Data Set Config,从txt文件中读取
  Filename:csv文件所在的路径以及名称如:C:\Users\Anne\Desktop\Jmeter\data.txt;(其实不一定要txt文件,亲测csv格式的文件也可以)
  File encoding:给出页面的编码方式,可以不填写;这里以bugfree为例,它的源代码里是utf-8 ,所以这里是utf-8
  Variable Names(comma-delimited):给出变量名如:title,build;这里的变量名是给后面引用用的,如要用到这个文件的值,可以利用变量名来引用:${title},${build}
  Delimiter(use '\t' for Tab):这个是用来隔开变量的分隔符,如上面的title,name,那分隔符就是“,”
  Allow quoted data?:是否允许引用数据
  Recycle on EOF?:到了文件尾是否循环,True---继续从文件第一行开始读取,False---不再循环
  Stop thread on EOF?:到了文件尾是否停止线程,True---停止,False---不停止,注:当Recycle on EOF设置为True时,此项设置无效。
  Sharing mode:共享模式,All threads---所有线程,Current thread group—当前线程组,Current thread—当前线程。这个地方和LoadRunner中的迭代取之相反,经试验得出来的结果是:
  All threads:测试计划中所有线程,假如说有线程1到线程n (n>1),线程1取了一次值后,线程2取值时,取到的是txt文件中的下一行,即与线程1取的不是同一行。
  Current thread group:当前线程组,假设有线程组A、线程组B,A组内有线程A1到线程An,线程组B内有线程B1到线程Bn。取之情况是:线程A1取到了第1行,线程A2取第2行,现在B1取第1行,线程B2取第2行。
  Current thread:当前线程。假设测试计划内有线程1到线程n (n>1),则线程1取了第1行,线程2也取第1行。
  综上:CSV Data Set Config实现的功能跟之前用的:${__CSVRead(C:\Users\Anne\Desktop\Jmeter\data.txt,0)}这个函数实现的功能大体上是一样的。
  方法三、从数据库获取数据
  1) 将其中的mysql-connector-java-5.1.34-bin.jar放到Jmeter的lib目录下
  2) 添加“配置元件”->“JDBC Connection Configuration”,设置下列参数:
  Variable Name:连接池名称
  Database URL:jdbc:mysql://host:port/db(jdbc:mysql://ip地址:端口号/数据库名称)
  JDBC Driver class:com.mysql.jdbc.Driver
  username:连接数据库的用户名(如root)
  password:连接数据库的密码
  3) 添加“Sampler”->“JDBC Request”,在SQL Query中输入查询语句,如下:
  select concat(domain,'+',po_pwd) as userpass from domain;
  Variable Name:连接池名称
  注意:该值要和JDBC Connection Configuration中配置的Variable Name值对应,否则会提示:No pool found named: 'pool12', ensure Variable Name matches Variable Name of JDBC Connection Configuration;
  4) 在JDBC请求中添加“后置处理器”->“正则表达式提取器”,以提取用户名、密码为例,设置正则表达式提取器的参数:
  引用名称:userPass
  正则表达式:(.*)\+(.*)
  模板:$1$$2$
  使用时,userPass_g1即为用户名,userPass_g2即为对应用户名的密码;
  注意:
  (1)+在正则表达式中是关键字,所以需要\转义。
  (2)匹配数字,填0或不填,表示随机读取,如果填正整数,如1,则不同虚拟用户或循环固定读取某行数据。

上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号