博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
性能测试-Loadrunner代码
阅读量:4281 次
发布时间:2019-05-27

本文共 10147 字,大约阅读时间需要 33 分钟。

目录

一.常用函数

web_url

模拟浏览器发出get请求

web_url参数:
步骤名称:
请求接口:URL="" 通过Fillder或是接口文档获取
结束标志:LAST

Action(){	web_url("首页","URL=http://127.0.0.1:1080/WebTours/",LAST);	return 0;}

如何查看请求是否成功?

View–Test Results

在这里插入图片描述

web_submit_data

模拟浏览器发出get/post请求

步骤:
1)insert–Add step选择想要添加的操作
2)直接代码手写
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

web_submit_data("web_submit_data",		"Action=http://172.16.179.130:1080/WebTours/login.pl",		"Method=POST",		"TargetFrame=",		"Referer=",		ITEMDATA,		"Name=userSession", "Value=130914.820899149zHDDQDVpVtAtADpfizz", ENDITEM,		"Name=username", "Value=jojo", ENDITEM,		"Name=password", "Value=bean", ENDITEM,		"Name=JSFormSubmit", "Value=off", ENDITEM,		"Name=login.x", "Value=58", ENDITEM,		"Name=login.y", "Value=15", ENDITEM,		LAST);

参数:

步骤名称:web_submit_data
请求地址:Action=http://172.16.179.130:1080/WebTours/login.pl 通过Fillder或是接口文档获取
Method:请求方式GET、POST,只支持这两种
请求模式:Mode=HTML/HTTP
表单数据:ITEMDATA,“Name=userSession”, “Value=130914.820899149zHDDQDVpVtAtADpfizz”, ENDITEM,
结束标志:LAST

web_custom_quest

支持浏览器发出HTTP支持的任何方式的请求

参数:
步骤名称:web_custom_quest
请求地址:Action=http://172.16.179.130:1080/WebTours/login.pl 通过Fillder或是接口文档获取
请求方式:Method=XX,支持任意格式
请求模式:Mode=HTML/HTTP
请求正文:Body=XXX,支持任意格式的数据提交
结束标志:LAST
在这里插入图片描述
在这里插入图片描述

二.参数化

步骤:

1)vuser–parameter list…
2)工具栏–open parameter list
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

参数化使用

点击要替换的名称,这里是jojo,右键点击—replace with parameter

在这里插入图片描述
替换成功之后,变成下面的样式
在这里插入图片描述

打印参数

lr_output_message(lr_eval_string("{username}"));

参数取值策略

在这里插入图片描述

1、Sequential ,Each iteration

Sequential:顺序选择 Each iteration:每次迭代更新。

Each iteration:每次迭代只取一个值,无论这action中这个值被应用多少次
Sequential:每次取值,按顺序取值

Action(){	lr_output_message(lr_eval_string("{lruser}"));	lr_output_message(lr_eval_string("{lruser}"));	return 0;}

迭代10次 结果:

Action.c(4): user1Action.c(5): user1Action.c(4): user2Action.c(5): user2Action.c(4): user3Action.c(5): user3Action.c(4): user4Action.c(5): user4Action.c(4): user5Action.c(5): user5Action.c(4): user1Action.c(5): user1Action.c(4): user2Action.c(5): user2Action.c(4): user3Action.c(5): user3Action.c(4): user4Action.c(5): user4Action.c(4): user5Action.c(5): user5Vuser Terminated.

2、Sequential ,Each occurrence

Sequential:顺序选择 Each occurrence:每次取值更新

Each occurrence:每次取出的值都是新的值,在一次迭代中如果应用多次就更新多次

Action(){	lr_output_message(lr_eval_string("{lruser}"));	lr_output_message(lr_eval_string("{lruser}"));	return 0;}

10次迭代结果:

Action.c(4): user1Action.c(5): user2Action.c(4): user3Action.c(5): user4Action.c(4): user5Action.c(5): user1Action.c(4): user2Action.c(5): user3Action.c(4): user4Action.c(5): user5Action.c(4): user1Action.c(5): user2Action.c(4): user3Action.c(5): user4Action.c(4): user5Action.c(5): user1Action.c(4): user2Action.c(5): user3Action.c(4): user4Action.c(5): user5Vuser Terminated.

3、Sequential ,Once

Sequential:顺序选择 Once:只更新一次

Once:无论如何迭代,每次迭代使用多少次,都只更新一次

Action(){	lr_output_message(lr_eval_string("{lruser}"));	lr_output_message(lr_eval_string("{lruser}"));	return 0;}

10次迭代结果:

Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Vuser Terminated.

4、Random ,Each iteration

Random:随机选择 Each iteration:每次迭代更新

Each iteration:每次迭代都会更新数据,但是一次迭代内所选的数据不会再次改变

Action(){	lr_output_message(lr_eval_string("{lruser}"));	lr_output_message(lr_eval_string("{lruser}"));	return 0;}

10次迭代结果:

Action.c(4): user2Action.c(5): user2Action.c(4): user4Action.c(5): user4Action.c(4): user3Action.c(5): user3Action.c(4): user2Action.c(5): user2Action.c(4): user5Action.c(5): user5Action.c(4): user4Action.c(5): user4Action.c(4): user3Action.c(5): user3Action.c(4): user4Action.c(5): user4Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Vuser Terminated.

5、Random ,Each occurrence

Random:随机选择 Each occurrence:每次取值更新

Each occurrence:每次使用都会更新数据,同一次迭代内的数据也会出现不同

Action(){	lr_output_message(lr_eval_string("{lruser}"));	lr_output_message(lr_eval_string("{lruser}"));	return 0;}

10次迭代结果:

Action.c(4): user5Action.c(5): user2Action.c(4): user2Action.c(5): user4Action.c(4): user2Action.c(5): user3Action.c(4): user2Action.c(5): user3Action.c(4): user5Action.c(5): user5Action.c(4): user4Action.c(5): user5Action.c(4): user2Action.c(5): user5Action.c(4): user3Action.c(5): user1Action.c(4): user5Action.c(5): user3Action.c(4): user4Action.c(5): user2Vuser Terminated.

6、Random ,Once:只更新一次

Random:随机选择 Once:每次取值更新

Once:无论多少次的迭代,只会更新一次数据

Action(){	lr_output_message(lr_eval_string("{lruser}"));	lr_output_message(lr_eval_string("{lruser}"));	return 0;}

10次迭代结果:

Action.c(4): user3Action.c(5): user3Action.c(4): user3Action.c(5): user3Action.c(4): user3Action.c(5): user3Action.c(4): user3Action.c(5): user3Action.c(4): user3Action.c(5): user3Action.c(4): user3Action.c(5): user3Action.c(4): user3Action.c(5): user3Action.c(4): user3Action.c(5): user3Action.c(4): user3Action.c(5): user3Action.c(4): user3Action.c(5): user3Vuser Terminated.

7、Unique ,Each iteration

Unique:唯一取值 Each iteration:每次迭代更新

VuGen提供了When out of values选项来处理非唯一的情况【当且仅当Update value on Each iteration,Update value on Each occurrence, When out of values才可以用】

在这里插入图片描述
When out of values

1)Abort Vuser

当参加参数取值超出参数表记录的条数时,忽略用户脚本,停止运行脚本

2)Continue in a cyclic manner

当参数取值超出参数表记录时,使用循环扫描的方式
这种方式相当于 Sequentia+Each iteration

3)Continue with last value

当参数取值超出参数表记录时,使用参数表中的最后一个值

8、Unique ,Each occurrence

Unique:唯一取值 Each occurrence:每次取值更新

9、Unique ,Once

Unique:唯一取值 Each occurrence:只更新一次

Action(){	lr_output_message(lr_eval_string("{lruser}"));	lr_output_message(lr_eval_string("{lruser}"));	return 0;}

10次迭代结果:

Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Action.c(4): user1Action.c(5): user1Vuser Terminated.

参数类型

Unique Number

唯一数据

在这里插入图片描述
代码:

lr_output_message(lr_eval_string("{uniqueNumber}"));	lr_output_message(lr_eval_string("{uniqueNumber}"));

如果start数据选择:1000 block选择:100

更新策略选择Each interation:每次迭代更新
Action:选择更新5次
结果为:

Action.c(6): 1000Action.c(7): 1000Action.c(6): 1001Action.c(7): 1001Action.c(6): 1002Action.c(7): 1002Action.c(6): 1003Action.c(7): 1003Action.c(6): 1004Action.c(7): 1004Vuser Terminated.

如果start数据选择:1000 block选择:2

更新策略选择Each interation:每次迭代更新 when out of value选择abort vuser
Action:选择更新5次
结果为:

Action.c(6): 1000Action.c(7): 1000Action.c(6): 1001Action.c(7): 1001Error: Parameter 'uniqueNumber': All values in unique block already used. Block size is 2. The Vuser is aborted according to "When Out Of Values" policy.Vuser Terminated.

如果start数据选择:1000 block选择:1000

更新策略选择Each interation:每次迭代更新 when out of value选择abort vuser
Action:选择更新100次
controller选择user数为:5个用户,那么每次用户的随机数为
结果为:

第一个用户:1000-1099第二个用户:1100-1199第三个用户:1200-1299第四个用户为:1300-1399第五个用户为:1400-1499

注意:这里block除了可以限制单个用户的取值范围,还规定了多个用户的取值范围

2.读取数据库mysql数据

1、安装MySQL ODBC 3.51.24-x86.exe软件

2、安装成功之后开始程序–管理工具–数据源(ODBC),说明安装成功
3、在runnerload中新建数据库参数,选择data wizard,
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
选择机器数据源进行创建
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
连接成功之后,数据库查询结果就自动导入了
在这里插入图片描述

三.关联参数

1.手动关联

web_reg_save_param

关联函数,函数的作用是从响应结果里面获取指定的内容。
举例:为了获取上一个请求的响应数据中的userSession
带有reg字样,凡是带有reg字样的函数都叫注册性函数
那个函数的响应数据中有我们需要的数据,就放在那个函数之前
在这里插入图片描述

Action(){    //注册型函数:保存首页的userSession返回值	web_reg_save_param("userSession",		"LB=name=userSession value=",		"RB=>",		"Ord=1",		LAST);	//首页	web_url("首页","URL=http://172.16.179.130:1080/WebTours/",LAST);	//登陆	// "Mode=HTML"  显示结果Test Result中显示的是网页  "Mode=HTTP" 显示结果Test Result中不显示网页	web_submit_data("web_submit_data",		"Action=http://172.16.179.130:1080/WebTours/login.pl",		"Method=POST",		"TargetFrame=",		"Referer=",		"Mode=HTML",		ITEMDATA,		"Name=userSession", "Value={userSession}", ENDITEM,		"Name=username", "Value=jojo", ENDITEM,		"Name=password", "Value=bean", ENDITEM,		"Name=JSFormSubmit", "Value=off", ENDITEM,	    "Name=login.x", "Value=51", ENDITEM,	    "Name=login.y", "Value=5", ENDITEM,		LAST);		return 0;}

2.自动关联

边录制边关联

1.Tools–Recording Options

2.工具栏–Recording Options
在这里插入图片描述

在这里插入图片描述

录制后代码:

Action(){	web_set_max_html_param_len("1024");	web_url("picinfo.ini", 		"URL=http://se.360.cn/cloud/picinfo.ini", 		"Resource=1", 		"RecContentType=application/octet-stream", 		"Referer=", 		"Snapshot=t3.inf", 		LAST);	/* Registering parameter(s) from source task id 79	// {WCSParam2} = "131158.08108546zHtzttDpHQfiDDDDtAtHipzzcHHf"	// */	web_reg_save_param("WCSParam2", 		"LB/IC=name=userSession value=", 		"RB/IC=>", 		"Ord=1", 		"Search=Body", 		"RelFrameId=1.2.1", 		LAST);	web_url("WebTours", 		"URL=http://172.16.179.130:1080/WebTours/", 		"Resource=0", 		"RecContentType=text/html", 		"Referer=", 		"Snapshot=t4.inf", 		"Mode=HTML", 		LAST);	web_custom_request("q.cgi", 		"URL=http://conna.gj.qq.com/q.cgi", 		"Method=POST", 		"Resource=1", 		"Referer=", 		"Snapshot=t5.inf", 		"EncType=application/octet-stream", 		"BodyBinary=\\x00\n\\x01\\x8B\\x008R\\x00\\x00\\x00\\x00\\xB8\\x00\\x00\\x00\\x02\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x01\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00\\x00憘\\x11\\x10薁焴}\\x16蒨c弼\\xFF彌$W\\xD10鹊\\x00鼊菺U)V\\x80\r価\\x06\\x8C9v玃pRN&飓\\x05Q\\xF5\\x06\\x02{\\x05\\x1E艱巔P\\x05黸顝\\xCC7葃#+帆a\\x02畐溲L亮\\x17~梇8簍Q\\x7F\r碽猑灋匩8鰫儞啐吉>堌p!K'|\\x8E\\x0B", 		LAST);	lr_think_time(6);	web_submit_data("login.pl", 		"Action=http://172.16.179.130:1080/WebTours/login.pl", 		"Method=POST", 		"RecContentType=text/html", 		"Referer=http://172.16.179.130:1080/WebTours/nav.pl?in=home", 		"Snapshot=t6.inf", 		"Mode=HTML", 		ITEMDATA, 		"Name=userSession", "Value={WCSParam2}", ENDITEM, 		"Name=username", "Value=jojo", ENDITEM, 		"Name=password", "Value=bean", ENDITEM, 		"Name=JSFormSubmit", "Value=off", ENDITEM, 		"Name=login.x", "Value=0", ENDITEM, 		"Name=login.y", "Value=0", ENDITEM, 		LAST);	return 0;}

如果出现录制后没有进行关联的web_reg_save_param

那么或许是recording的一些选项需要修改
在这里插入图片描述

录制后关联

1.首先录制脚本,录制完成后在进行播放一次

2.查看脚本,这次不是通过Test Result
而是通过View----Tree View或是工具栏-----Tree View,以树视图的方式查看
在这里插入图片描述
在这里插入图片描述

参数化和关联的区别

关联其实也是参数化的一种

1.参数化是固定的,关联是动态的
2.参数化的数据是保存在文件中的,关联的数据是服务器动态获取的

转载地址:http://bbfgi.baihongyu.com/

你可能感兴趣的文章
深入理解applicationContext.xml和dispatcherServlet-servlet.xml区别
查看>>
Redis GEO 的java实现(通过Jedis)(GIS相关)
查看>>
Java读取Properties文件的六种方法
查看>>
聊聊性能:全链路压测 overview
查看>>
Java+Maven+selenium+testng+reportng自动化测试框架(简易搭建说明)
查看>>
WEB模糊查询注意的问题(排除%等通配符并支持不连续关键字查询)
查看>>
PostgreSQL中表的阶层数据取得方法
查看>>
敏捷开发下的B端交互设计流程
查看>>
如何用产品思维迭代项目管理流程?(创业有感)
查看>>
流程不紧扣价值,就是伪流程
查看>>
算法时间空间复杂度学习总结
查看>>
10分钟掌握数据类型、索引、查询的MySQL优化技巧
查看>>
Go 网络编程示例
查看>>
Web指纹识别技术研究与优化实现(CMS)
查看>>
JNI基础知识(java中的一套接口,用来跟c和c++通信)
查看>>
如何在线关闭一个tcp socket连接
查看>>
最全的微服务知识科普
查看>>
LVDS接口分类,时序,输出格式
查看>>
selinux在 android 上的实现
查看>>
快速解决Android中的selinux权限问题
查看>>