virtaulbox 分辨率 user编写脚本为什么要参数化

偶然发现JMeter中有两个元件(User Defined Variables与User Parameters)很相近,刚开始时我也没注意,两者有什么不同。使用时却发现两者使用场景有些不同,现在小结一下。
相同点:二者都是进行参数化的。
一、User Defined Variables
1、添加方法:选择&线程组&,右键点击添加-Config Element-User Defined Variables,在这个控件中,定义你所需要的参数,如
2、使用方法:在对应的需要使用参数的位置,使用${host}替代。
3、应用场景:当测试环境变化时,我们只需要修改一处的IP就可以让脚本马上应用于另外一个环境的测试,而不需要逐个脚本进行修改。
二、User Parameters
1、添加方法:选择&线程组&,右键点击添加-Pre Processors-User Parameters,在这个控件中,定义你所需要的参数,如
2、参数解释:
Update Once Per Iteration:控制参数取值的变化规则,如果选中该选项,则参数的值在每个迭代中保持不变,在新的迭代开始时取下一个可用值; 如果取消取中该选项,则参数的值在每个其作用域内的Sampler发出请求时取下一个可用值。
3、使用方法:在对应的需要使用参数的位置,使用${productID}替代。
1、User Defined Variables中定义的所有参数的值在Test Plan的执行过程中不能发生取值的改变,因些一般仅将Test Plan中不需要随迭代发生改变的参数(只取一次值的参数)设置在此处。例如,被测应用的host和port值。
2、如果参数的取值范围很小,使用User Parameters比较合适。
3、如果参数的取值范围很大,建议使用CSV Data Set Config的方法,该方法具有更大的灵活性。
阅读(...) 评论()9948人阅读
性能经验总结(107)
脚本业务流:访问Discuz论坛首页——登录论坛——退出论坛。本次使用LoadRunner11版本。
一、录制脚本注意
&&& 1、确保Discuz论坛能在服务器运行正常。
&&& 2、录制前先试访问Discuz论坛注册一个测试用户。
&&& 3、选择录制协议,Discuz论坛是一个B/S架构的web论坛,使用常用协议“web(HTTP/HTML)”录制。
&&& 4、录制选项的设置,特别注意录制时的HTTP/HTML级别的选择是“基于HTML的脚本”还是“基于URL的脚本”,这里选择“基于HTML的脚本”。
&&& 5、录制完脚本后,先保存脚本,再回放一遍。
二、优化脚本
&&& 使用LoadRunner录制后的脚本,通常都是需要优化完善脚本。这里只展示action中的登录部分,优化完善后的脚本如下:
Action_login()
&lr_think_time(12);
&&& //添加登录时的集合点Login
&lr_rendezvous(&login&);
&//设置开始事务
&lr_start_transaction(&login&);
&web_submit_data(&member.php&,
&&&Action=http://127.0.0.1/Discuz/upload/member.php?mod=logging&action=login&loginsubmit=yes&infloat=yes&lssubmit=yes&inajax=1&,
&&&Method=POST&,
&&&RecContentType=text/xml&,
&&&Referer=http://127.0.0.1/Discuz/upload/forum.php&,
&&&Snapshot=t2.inf&,
&&&Mode=HTML&,
&&ITEMDATA,
&&&Name=fastloginfield&, &Value=username&, ENDITEM,
&&&Name=username&, &Value={username}&, ENDITEM,
&&&Name=password&, &Value={password}&, ENDITEM,
&&&Name=quickforward&, &Value=yes&, ENDITEM,
&&&Name=handlekey&, &Value=ls&, ENDITEM,
&&& //输出参数化日志信息
&lr_output_message(&登录用户名:%s&, lr_eval_string(&{username}&));
&lr_output_message(&登录密码:%s&, lr_eval_string(&{password}&));
&web_add_cookie(&mlMh_2132_checkfollow=1; DOMAIN=127.0.0.1&);
&web_add_cookie(&mlMh_2132_lastact=%09forum.php%09; DOMAIN=127.0.0.1&);
&web_add_cookie(&mlMh_2132_checkpm=1; DOMAIN=127.0.0.1&);
&&& //设置关联 Correlation comment - Do not change!Original value='935343df' Name ='CorrelationParameter_1'
&web_reg_save_param_ex(
&&&ParamName=CorrelationParameter_1&,
&&&LB=formhash=&,
&&&RB=\&&退出&,
&&SEARCH_FILTERS,
&&&Scope=Body&,
&&&RequestUrl=*/forum.php*&,
&//添加文本检查点,检查登录用户yuxiuquan是否登录
&web_reg_find(&Text=yuxiuquan&,
&web_url(&forum.php_2&,
&&&URL=http://127.0.0.1/Discuz/upload/forum.php&,
&&&Resource=0&,
&&&RecContentType=text/html&,
&&&Referer=&,
&&&Snapshot=t3.inf&,
&&&Mode=HTML&,
&&EXTRARES,
&&&URL=static/image/common/background.png&, ENDITEM,
&&&URL=static/image/common/nv.png&, ENDITEM,
&&&URL=static/image/common/search.png&, ENDITEM,
&&&URL=static/image/common/arrwd.gif&, ENDITEM,
&&&URL=static/image/feed/friend_b.png&, ENDITEM,
&&&URL=static/image/feed/favorite_b.png&, ENDITEM,
&&&URL=static/image/feed/thread_b.png&, ENDITEM,
&&&URL=static/image/feed/magic_b.png&, ENDITEM,
&&&URL=static/image/feed/medal_b.png&, ENDITEM,
&&&URL=static/image/common/tip_bottom.png&, ENDITEM,
&&&URL=static/image/common/style_switch.png&, ENDITEM,
&&&URL=static/image/common/user_online.gif&, ENDITEM,
&&&URL=static/image/common/qmenu.png&, ENDITEM,
&&&URL=static/image/common/nv_a.png&, ENDITEM,
&&&URL=static/image/common/pt_item.png&, ENDITEM,
&&&URL=static/image/common/chart.png&, ENDITEM,
&&&URL=static/image/feed/task_b.png&, ENDITEM,
&&&URL=static/image/common/scrolltop.png&, ENDITEM,
&&&URL=static/image/common/titlebg.png&, ENDITEM,
&&&URL=http://cp./tips/get?rand=310&s_id=&product_version=X2.5&product_release=&fix_bug=&is_founder=&s_url=http%3A%2F%2F127.0.0.1%2FDiscuz%2Fupload%2F&last_send_time=&ts=&sig=&admin_id=0&group_id=10&open_id=&uid=2&callback=discuzTipsCallback&,
&//设置结束事务
&lr_end_transaction(&login&, LR_AUTO);
&& 1、事务设置,开始事务和结束事务的名称必须一致,事务的设置必须成对出现,即有开始事务也要有结束事务,开始事务应该放在脚本开始的位置,结束事务放在脚本结束的位置,但不要将思考时间(lr_think_time函数)放在事务开始和事务结束之间。其实,设置事务,可以在“Run_time Settings”里设置的,可以设置成“将每个操作定义为一个事务”,也可以设置为“将每个步骤定义为一个事务”,根据需要设置。我这里是自己手动在脚本设置的。
&&&&使用函数:lr_start_transaction(&事务名称&);
&&&&&&&&&&&&&&&&&&lr_end_transaction(&事务名称&,LR_AUTO);
&& 2、检查点设置,LR的检查点分为文本检查点和图像检查点,添加检查点的方法很简单,在LR的树形视图中,打开视图登录页面,选择需要检查的内容(文本或者图像),鼠标右键选择“添加文本检查点(web_reg_find())”即可,若要手动添加检查点,则需要把检查点设置在返回页面的之前。最后,在脚本中添加了检查点,要在Vuser-&Run-Tme Settings中更改下设置,勾选Enable Image and text check。
&&& 使用函数:web_find() 或 web_reg_find() 或 web_image_check(),下面分别说明
&& (1)web_find()
&&& 参数举例:web_find(&web_find&,&RighOf=a&,&LeftOf=b&,&What=name&,LAST);
&&& 参数解释:&web_find&定义该查找函数的名称;“LeftOf”和“RighOf=”用来定义查找字符的左右
边界;“What=”定义查找内容。
&&& (2)web_reg_find()
&&& 参数举例:web_reg_find(&Search=Body&,&SaveCount=ddd&,&Test=aaa&,LAST);
&&& 参数解释: Search用来定义查找范围,SaveCount定义查找计数变量名称,该参数可以记录在缓
存中查找内容出现的次数,可以使用该值,来判断要查找的内容是否被找到。
&&& (3)web_image_check()
&&& 参数说明:web_image_check(&web_image_check&,&Alt=&,&Src=&,LAST);;
&&& 参数解释:“Alt”和“Src”的值直接取该图片在网页源代码中相应参数的值。
&&& 3、参数化设置,LR录制登录的脚本,一般需要参数化脚本中的登录用户和对应的密码,以便更加真实地模仿系统的业务操作。参数化的设置,点击工具栏图标打开参数列表,或者点击菜单“Vuser--参数列表”,或使用快捷方式“Ctrl+L”,点击新建,定义参数名称username和password,创建表并输入内容
后,这里特别需要注意设置的是参数名username和password相对应,通过参数列表中的数据方式和更新值方式来设置,username参数要与password参数对应设
置正确,脚本回放时才能模拟用户登录成功,如图:
&&&&&(1)、username参数名设置
(2)password参数名设置
&& (3)、参数化设置中,“Select next row”和“Update value on”这两个属性组合,产生九种组合方式,每种方式都不一样,参数化的结果也不一样,下面是参数取值方式说明
&&&&&& Select next row:
&&&&&& Sequential:每个VU按照顺序读取。每一个虚拟用户都会按照相同的顺序读取。
&&&&&& Random:每个VU随机读取一个。
&&&&& &Unique:每个VU顺序取唯一的值。注意:使用该类型必须注意数据池中数据充足。
&&&&&& Same Line As 某个参数(比如Name):和前面定义的参数Name 取同行的记录。通常用在有关联性的数据上面。
&&&&&& Update value on:
&&&&&& Once 在所有的反复中都使用同一个值& 只取一次
&&&&& &each iteration 每次反复都要取新值
&&&&&& each occurrence 只要发现该参数就要重新取值,也就是如果一个action中有多个该参数,每遇到一个就要重新取一个值。
&&&& (4)、在脚本中,选中需要参数化的脚本,鼠标右键“使用现有参数”选择对应要参数化的参数名即可。
&&&&&(5)、在脚本中输出参数化日志信息&&&
&&&&& &//输出参数化日志信息
&&&&& &lr_output_message(&登录用户名:%s&, lr_eval_string(&{username}&));
&&&&&& lr_output_message(&登录密码:%s&, lr_eval_string(&{password}&));
&&&& 4、关联设置,由于我的LR工具在录制的时设置了关联规则,在脚本中可以使用自动扫描脚本中关联值快捷键Ctrl+F8,扫描结果切换树形视图,可以看到如图
&点击“关联”,返回到脚本页面,如图
再次回放脚本,在菜单“视图--测试结果”中可以看到关联函数执行成功。&&&&&
&&&& 5、集合点设置,集合点的设置在菜单“插入--集合”即可,集合点名称需顾名思义,看到就能理解。另外需要注意,集合点要放在开始事务的前面,思考时间(lr_think_time函数)的后面。
&&&&& 使用函数:lr_rendezvous(&集合点名称&);
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:734286次
积分:5237
积分:5237
排名:第4628名
原创:145篇
转载:14篇
评论:11条
(4)(4)(1)(3)(1)(7)(56)(37)(4)(1)(1)(2)(17)(13)(4)(3)性能测试(18)
& & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
选中要参数化的内容。
方法一,右键【】
方法二,菜单【】【…】&
Parameter&Properties&(参数属性对话框我们的参数化设置就通过这个对话框完成。
参数化的方式:
其实参数化得方式有很多种,这里简述几种比较常见人方式。其实方式略有不同,但其结果都是将数据添加进来。
1、&编辑数据
点击会出现表格,在表格,再次点击,然后会打开一个记事本,我们可以对记事本进行添加数据&
2、&添加数据文件
&点击输入框后面的“”按钮,找到本地的数据文件,进行添加就可以了。
需要注意的是,文件里面的数据不要乱写,每条数据一行,不然会读取有误。
3、&数据库添加数据
在很多情况下,我添加的数据不是十条二十条,也不是一百两百,如果还通过上面的两种方式添加,我想会是一件非常纠结的事情。所以我们可以通过数据库将数据导入。你是否疑虑数据库的数据怎么弄,数据库的数据生成非常简单,可以写一段简单的代码生成,也可以通过数据库数据生成工具来完成
点击打开连接数据库向导。&
这里先告诉你有这种方式,后面再介绍具体操作。
4、&其他类型设置
如果我们要参数化的不是一个文件,比如是特定的日期时间,可以从列表中进行选择
这里可以设置日期时间格式,循环迭代方式,不过除了类型外,其他用的不多。其他类型用法我也不是十分了解。
参数化之间的关联 & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
  前面我们已经对用户名进行了参数化,或对密码进行了参数化,这样是不是脚本就能正常跑了,不好说。因为用户名和密码不是一一对应关系,每次运行脚本时取的用户名和密码没有对应上的话肯定就会出问题。
假设,我们已经对用户名已经进行了参数化,参数名为【】,下面设置密码参数化与用户名关联。
&点击“Properites…”会打开编辑用户名参数化窗口。File列表框中,刚才保存用户名信息的文件&username.dat&。
点击“…”添加新的一列信息,用于放置密码。
点击“”再次编辑参数化数据文件,使用户名密码建立一一对应关系。
完成之后,我们已经成功对用户名和密码进行了参数化,并且让用户名和密码形成了对应关系。
数据分配与更新方式 & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & & &&
  脚本设置完参数化,脚本运行的每一遍所取的参数化的值都不一样,那么这个值按照个什么情况来取呢?会有很多种方式
Select&next&row【选择下一行】:
顺序(Sequential):按照参数化的数据顺序,一个一个的来取。
随机(Random):参数化中的数据,每次随机的从中抽取数据。
唯一(Unique):为每个虚拟用户分配一条唯一的数据
Update&value&on【更新时的值】:&
每次迭代(Each&iteration)&:每次迭代时取新的值,假如50个用户都取第一条数据,称为一次迭代;完了50个用户都取第二条数据,后面以此类推。
每次出现(Each&occurrence):每次参数时取新的值,这里强调前后两次取值不能相同。
只取一次(once)&:参数化中的数据,一条数据只能被抽取一次。(如果数据轮次完,脚本还在运行将会报错)
上面两个选项都有三种情况,如果将他们进行组合,将产生九种取值方式。
Select&Next&Row
【选择下一行】
Update&Value&On
【更新时的值】
Replay&Result
顺序(Sequential)
每次迭代(Each&iteration)
结果:分别将条数据写入数据表中
功能说明:每迭代一次取一行值,从第一行开始取。当所有的值取完后,再从第一行开始取
如:如果参数化文件中有条数据,而迭代设置为次,那执行结果中,参数化文件第一行的数据有两条
顺序(Sequential)
每次出现(Each&occurrence)
结果:分别将条数据写入数据表中
功能说明:每迭代一次取一行值,从第一行开始取。当所有的值取完后,再从第一行开始取
如:如果参数化文件中有条数据,而迭代设置为次,那执行结果中,参数化文件第一行的数据有两条
顺序(Sequential)
只取一次(once)
结果:表中写入条一模一样的数据。
功能说明:每次迭代都取参数化文件中第一行的数据。
随机(Random)
每次迭代(Each&iteration)
结果:表中写入条数据,但可能有重复数据出现
功能说明:每次从参数化文件中随机选择一行数据进行赋值
随机(Random)
每次出现(Each&occurrence)
结果:表中写入条数据,但可能有重复数据出现
功能说明:每次从参数化文件中随机选择一行数据进行赋值
随机(Random)
只取一次(once)
结果:表中写入条相同数据
功能说明:第一次迭代时随机从参数化文件中取一行数据,后面每次迭代都用第一次迭代的数据。
唯一(Unique)
每次迭代(Each&iteration)
自动分配块大小
结果:分别将条数据写入数据表中
功能说明:第一次迭代取参数化文件中的第一条数据,第二次迭代取第二条数据,以此类推。
注:如果设置迭代次数为次。结果:在执行第次迭代时会抛异常,异常日志可在的回放日志()中看到。
唯一(Unique)
每次出现(Each&occurrence)
结果:分别将条数据写入数据表中
功能说明:第一次迭代取参数化文件中的第一条数据,第二次迭代取第二条数据,以此类推。
注:如果设置迭代次数为次,而参数化文件中只有条数据,明显数据不够。此时可以设置“”属性来判断当数据不够时的处理方式
Abort&Vuser:中断虚拟用户
Countinue&in&a&cylic&manage:循环取参数化文件中的值,即:当参数化文件中的值取完后又从参数化文件的第一行开始取值。
Countinue&with&last&value:继续用最后一条数据
唯一(Unique)
只取一次(once)
结果:表中写入条相同数据
功能说明:每次都取参数文件中的第一条数据进行赋值
参考知识库
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:33083次
排名:千里之外
原创:11篇
转载:93篇
译文:16篇
(2)(2)(2)(10)(11)(2)(2)(6)(4)(22)(57)

我要回帖

更多关于 virtaulbox 的文章

 

随机推荐