Loadrunner Http接口Get/Post方法性能测试脚本解析
最近使用LoadRunner 11进行了一次完整的Http WEB接口性能测试,下面介绍下Http接口Get/Post方法性能测试脚本通用编写方法。
1. Http接口性能测试基本流程
首先定义了一个参数用以保存Http请求返回码,之后调用Get / Post方法,最后通过校验返回码参数来判断事务成功或失败。
2. 常用函数解析
完整的Action脚本见本文下方附录,简单解析如下(具体函数的详细解释可百度或查看LoadRunner帮助文件):
2.1 web_reg_save_param
这个函数注册一个请求,以在检索到的网页中查找并保存一个文本字符串。它只有在执行了下一个操作函数(如web_url)后才会执行。
语法:
int web_reg_save_param(const char *ParamName, <list of Attributes>, LAST);
参数说明:
1) ParamName:存放得到的动态内容的参数名称
2) LB和RB:要抓取文本的左/右边界
注意:
1) web_reg_save_param必须在获取返回值的操作前面注册,在获取返回值的操作后面使用
2) 保存参数最大不能超过256字节,如果超过256字节请使用int web_set_max_html_param_len (const char *length )函数扩大参数保存范围。
如:web_set_max_html_param_len (1024); //扩大参数最大保存范围为1024字节
3) LB和RB:如果不指定一个LB/RB值,它会使用数据开头/结尾的所有字符作为边界,且默认是区分大小写的,若加上"/ic",则大小写不敏感
如:web_reg_save_param("IsRight","LB/ic=cache-control: private\r\n\r\n","RB/ic=|",LAST);
2.2 web_url
发送Http GET请求函数,比较简单,一般只需修改url地址即可
函数形式:web_url( const char *StepName, const char *url, , [EXTRARES, ,] LAST );
示例如下:
web_url("www.baidu.com",
"URL=http://www.baidu.com/",
"TargetFrame=",
"TargetBrowser=Mercury Technologies",
"Resource=0",
"RecContentType=text/html",
"Snapshot=t1.inf",
"Mode=HTML",
LAST );
2.3 web_submit_data
WEB表单提交函数,它用来生成表单的GET或POST请求,一般修改URL地址、请求方式(POST/GET)、参数名称和参数值即可
函数语法:Int web_submit_data ( const char *StepName, , ITEMDATA, , [ EXTRARES, ,] LAST );
参数如下:
1. Action:Form中的ACTION属性,指定了完成Form中的操作用到的URL
2. Method:表单提交方法:POST或GET(默认是POST)
3. EncType:编码方式
4. EncodeAtSign:是否使用ASCII值对符号“@”编码。Yes或No
5. TargetFrame:包含当前链接或资源的Frame。参见List of Attributes的同名参数
6. Referer、Mode:参见List of Attributes的同名参数
7. ITEMDATA:数据域和属性的分隔符
8. List of Data:数据域列表定义了表单提交的内容。由于此请求是上下文无关的,因此数据域包含了所有的隐含域。使用Form的编码规则组织数据域
数据域列表可以使用下面任意一种格式:
"name=n1", "value=v1", ENDITEM,
"name=n2", "EncryptedValue=qwerty", ENDITEM,
9. EXTRARES:分隔符,标记下一个参数将是资源属性的列表。
10. List of Resource Attributes:参见List of Resource Attributes。
11. LAST:结束标记符。
示例如下:
web_submit_data("default.aspx",
"Action=http://lazarus/flightnet/default.aspx",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=http://lazarus/flightnet/",
"Snapshot=t7.inf",
"Mode=HTML",
ITEMDATA,
"Name=grpType", "Value=radRoundtrip", ENDITEM,
"Name=btnAvailableFlights", "Value=Next >", ENDITEM,
LAST );
2.4 参数化及其他常用函数
1. 对于Http接口中调用的参数还可以进行参数化,模拟多种用户场景,方法都是一样的,在此恕不赘述
2. 脚本中还有lr_start_transaction,根据判断返回码来确定lr_end_transaction pass或fail
3. http接口性能测试脚本示例(包括Get及Post方法)
Action()
{
lr_start_transaction("TestGet"); web_reg_save_param("TGCode",
"LB/IC={\"returnCode\":\"",
"RB/IC=\",\"",
LAST); web_url("TestGet",
"URL=http://192.168.1.1:8080/GetPage",
"Resource=0",
"RecContentType=text/html",
"Mode=HTML",
LAST); if((strstr(lr_eval_string("{TGCode}"),""))==NULL)
{
lr_end_transaction("TestGet", LR_FAIL);
lr_error_message("TestGet Failed! ReturnCode:%s",lr_eval_string ("{TGCode}"));
}
else
{
lr_end_transaction("TestGet", LR_PASS);
lr_output_message("TestGet Sucess! ReturnCode:%s",lr_eval_string ("{TGCode}"));
} lr_start_transaction("TestPost"); web_reg_save_param("TPCode",
"LB/IC={\"returnCode\":\"",
"RB/IC=\",\"",
LAST); web_submit_data("TestPost",
"Action=http://192.168.1.1:8080/TestPost",
"Method=POST",
"RecContentType=text/html",
"Mode=HTML",
ITEMDATA,
"Name=param1", "Value=param1", ENDITEM,
"Name=param2", "Value=param2", ENDITEM,
LAST); if((strstr(lr_eval_string("{TPCode}"),""))==NULL)
{
lr_end_transaction("TestPost", LR_FAIL);
lr_error_message("TestPost Failed!ReturnCode: %s",lr_eval_string ("{TPCode}"));
}
else
{
lr_end_transaction("TestPost", LR_PASS);
lr_output_message("TestPost Sucess! ReturnCode: %s",lr_eval_string ("{TPCode}"));
} return ;
}
Loadrunner Http接口Get/Post方法性能测试脚本解析的更多相关文章
- Loadrunner Webservice接口性能测试脚本编写优化总结
本文主要介绍使用Loadrunner Webservice接口性能测试脚本编写及优化总结. 1.Webservice协议脚本编写流程 下面介绍使用Loadrunner 11调用Webservice接口 ...
- 品味性能之道<九>:利用Loadrunner编写socket性能测试脚本简述
一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socket概述 ...
- LoadRunner编写socket性能测试脚本
利用LoadRunner编写socket性能测试脚本 一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socke ...
- 【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter对SOAP协议性能测试脚本开发
目录: 创建WebService接口模拟服务端 下载SoapUI 新建MathUtil.wsdl文件 创建一个SOAP项目 接口模拟服务端配置以及启动 JMeter对SOAP协议性能测试脚本开发 [阐 ...
- sockt-浅谈接口性能测试脚本编写
平时我们做的都是http请求的接口测试,初次接触socket接口还是有点不知如何下手,其实他如http接口请求区别并不是很大,也是接口的链接-发送数据-断开连接这三大步骤来实现: 以下文章转载自:ht ...
- LR实现http协议性能测试脚本
1. GET方式的HTTP请求性能测试脚本 Action() { web_set_max_html_param_len("); web_reg_save_param("retCo ...
- Fiddler系列教程3:使用Fiddler录制Jmeter性能测试脚本
今天继续给大家带来Fiddler工具的教程3:使用Fiddler录制Jmter性能测试脚本. 我们知道Jmeter本身可以录制脚本,也可以通过BadBoy,BlazeMeter等工具进行录制,其实Fi ...
- Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通
Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通Selenium接口性能自动化测试基础部分:分层自动化思想Slenium介绍Selenium1.0/2.0/3.0Slenium R ...
- 性能测试脚本开发(LR.NET控件)
性能测试过程中,最耗费经历的就是编写性能测试脚本的过程,在大部分的测试工具中都是采用录制的方式,通过录制产生脚本,然后根据需要进行修改,以及参数化.有些时候为了能够完成某一个功能的脚本,需要将录制下来 ...
随机推荐
- 201521123074 《Java程序设计》第14周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多数据库相关内容. 2. 书面作业 Q1. MySQL数据库基本操作 建立数据库,将自己的姓名.学号作为一条记录插入.(截图,需出现 ...
- org.springframework.core.NestedIOException: ASM ClassReader failed to parse class file - probably du
如果出现类似下面的错误,原因就是JDK版本太高了,我换成1.7就没事了 Caused by: org.springframework.core.NestedIOException: ASM Class ...
- 转 Java输入输出流详解(非常详尽)
转 http://blog.csdn.net/zsw12013/article/details/6534619 通过数据流.序列化和文件系统提供系统输入和输出. Java把这些不同来源和目标的数据都 ...
- Git 基本命令有哪些
Git 相关命令 git init 初始化一个项目 git clone 利用url 从远程clone下来一个项目 git status 查看当前项目修改状态 git log 查看日志 查看历史记录 g ...
- C++临时对象以及针对其进行的优化
C++临时对象以及针对其进行的优化 C++中真正的临时对象是看不见的,它们不出现在你的源代码中. 那么什么时候回产生临时对象呢?主要是三个时刻: 产生临时对象的三个时刻: 用构造函数作为隐式类型转换函 ...
- oracle 数据字典和动态性能视图
一.概念数据字典是oracle数据库中最重要的组成部分,它提供了数据库的一些系统信息.动态性能视图记载了例程启动后的相关信息. 二.数据字典1).数据字典记录了数据库的系统信息,它是只读表和视图的集合 ...
- [js高手之路] html5 canvas系列教程 - arc绘制曲线图形(曲线,弧线,圆形)
绘制曲线,经常会用到路径的知识,如果你对路径有疑问,可以参考我的这篇文章[js高手之路] html5 canvas系列教程 - 开始路径beginPath与关闭路径closePath详解. arc:画 ...
- mysql用户权限配置
创建管理员: mysqladmin -u root password 123456 登录 mysql -u root -p 建库及授权 > create database bdp charact ...
- Hive简记
在大数据工作中难免遇到数据仓库(OLAP)架构,以及通过Hive SQL简化分布式计算的场景.所以想通过这篇博客对Hive使用有一个大致总结,希望道友多多指教! 摘要: 1.Hive安装 2.Hive ...
- 利用ASP.netCore自带DI(DependencyInjection)实现批量依赖注入
ASP.net Core自带DI(依赖注入),用法如下: services.AddScoped(typeof(IProductService), typeof(ProductService)); 如果 ...