最近使用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 );

示例如下:

  1. web_url("www.baidu.com",
  2. "URL=http://www.baidu.com/",
  3. "TargetFrame=",
  4. "TargetBrowser=Mercury Technologies",
  5. "Resource=0",
  6. "RecContentType=text/html",
  7. "Snapshot=t1.inf",
  8. "Mode=HTML",
  9. 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:结束标记符。

示例如下:

  1. web_submit_data("default.aspx",
  2.  
  3. "Action=http://lazarus/flightnet/default.aspx",
  4.  
  5. "Method=POST",
  6.  
  7. "TargetFrame=",
  8.  
  9. "RecContentType=text/html",
  10.  
  11. "Referer=http://lazarus/flightnet/",
  12.  
  13. "Snapshot=t7.inf",
  14.  
  15. "Mode=HTML",
  16.  
  17. ITEMDATA,
  18.  
  19. "Name=grpType", "Value=radRoundtrip", ENDITEM,
  20.  
  21. "Name=btnAvailableFlights", "Value=Next >", ENDITEM,
  22.  
  23. LAST );

2.4 参数化及其他常用函数

1. 对于Http接口中调用的参数还可以进行参数化,模拟多种用户场景,方法都是一样的,在此恕不赘述

2. 脚本中还有lr_start_transaction,根据判断返回码来确定lr_end_transaction pass或fail

3. http接口性能测试脚本示例(包括Get及Post方法)

  1. Action()
  2. {
  3. lr_start_transaction("TestGet");
  4.  
  5. web_reg_save_param("TGCode",
  6. "LB/IC={\"returnCode\":\"",
  7. "RB/IC=\",\"",
  8. LAST);
  9.  
  10. web_url("TestGet",
  11. "URL=http://192.168.1.1:8080/GetPage",
  12. "Resource=0",
  13. "RecContentType=text/html",
  14. "Mode=HTML",
  15. LAST);
  16.  
  17. if((strstr(lr_eval_string("{TGCode}"),""))==NULL)
  18. {
  19. lr_end_transaction("TestGet", LR_FAIL);
  20. lr_error_message("TestGet Failed! ReturnCode:%s",lr_eval_string ("{TGCode}"));
  21. }
  22. else
  23. {
  24. lr_end_transaction("TestGet", LR_PASS);
  25. lr_output_message("TestGet Sucess! ReturnCode:%s",lr_eval_string ("{TGCode}"));
  26. }
  27.  
  28. lr_start_transaction("TestPost");
  29.  
  30. web_reg_save_param("TPCode",
  31. "LB/IC={\"returnCode\":\"",
  32. "RB/IC=\",\"",
  33. LAST);
  34.  
  35. web_submit_data("TestPost",
  36. "Action=http://192.168.1.1:8080/TestPost",
  37. "Method=POST",
  38. "RecContentType=text/html",
  39. "Mode=HTML",
  40. ITEMDATA,
  41. "Name=param1", "Value=param1", ENDITEM,
  42. "Name=param2", "Value=param2", ENDITEM,
  43. LAST);
  44.  
  45. if((strstr(lr_eval_string("{TPCode}"),""))==NULL)
  46. {
  47. lr_end_transaction("TestPost", LR_FAIL);
  48. lr_error_message("TestPost Failed!ReturnCode: %s",lr_eval_string ("{TPCode}"));
  49. }
  50. else
  51. {
  52. lr_end_transaction("TestPost", LR_PASS);
  53. lr_output_message("TestPost Sucess! ReturnCode: %s",lr_eval_string ("{TPCode}"));
  54. }
  55.  
  56. return ;
  57. }

Loadrunner Http接口Get/Post方法性能测试脚本解析的更多相关文章

  1. Loadrunner Webservice接口性能测试脚本编写优化总结

    本文主要介绍使用Loadrunner Webservice接口性能测试脚本编写及优化总结. 1.Webservice协议脚本编写流程 下面介绍使用Loadrunner 11调用Webservice接口 ...

  2. 品味性能之道<九>:利用Loadrunner编写socket性能测试脚本简述

            一.概述         Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作.     二.socket概述     ...

  3. LoadRunner编写socket性能测试脚本

    利用LoadRunner编写socket性能测试脚本 一.概述 Loadrunner拥有极为丰富的工具箱,供予我们制造出各种奇妙魔法的能力.其中就有此次要讨论的socket套接字操作. 二.socke ...

  4. 【JMeter4.0学习(三)】之SoapUI创建WebService接口模拟服务端以及JMeter对SOAP协议性能测试脚本开发

    目录: 创建WebService接口模拟服务端 下载SoapUI 新建MathUtil.wsdl文件 创建一个SOAP项目 接口模拟服务端配置以及启动 JMeter对SOAP协议性能测试脚本开发 [阐 ...

  5. sockt-浅谈接口性能测试脚本编写

    平时我们做的都是http请求的接口测试,初次接触socket接口还是有点不知如何下手,其实他如http接口请求区别并不是很大,也是接口的链接-发送数据-断开连接这三大步骤来实现: 以下文章转载自:ht ...

  6. LR实现http协议性能测试脚本

    1.  GET方式的HTTP请求性能测试脚本 Action() { web_set_max_html_param_len("); web_reg_save_param("retCo ...

  7. Fiddler系列教程3:使用Fiddler录制Jmeter性能测试脚本

    今天继续给大家带来Fiddler工具的教程3:使用Fiddler录制Jmter性能测试脚本. 我们知道Jmeter本身可以录制脚本,也可以通过BadBoy,BlazeMeter等工具进行录制,其实Fi ...

  8. Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通

    Selenium自动化测试,接口自动化测试开发,性能测试从入门到精通Selenium接口性能自动化测试基础部分:分层自动化思想Slenium介绍Selenium1.0/2.0/3.0Slenium R ...

  9. 性能测试脚本开发(LR.NET控件)

    性能测试过程中,最耗费经历的就是编写性能测试脚本的过程,在大部分的测试工具中都是采用录制的方式,通过录制产生脚本,然后根据需要进行修改,以及参数化.有些时候为了能够完成某一个功能的脚本,需要将录制下来 ...

随机推荐

  1. 201521123114 《Java程序设计》第10周学习总结

    1. 本章学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结异常与多线程相关内容. 1. 创建线程方式: 定义Thread的子类 定义实现Runnable接口的类,实现run() 2. 调用s ...

  2. 201521123068《Java程序设计》第12周学习总结

    1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多流与文件相关内容. 2. 书面作业 将Student对象(属性:int id, String name,int age,doubl ...

  3. JAVA课程设计-学生信息管理系统(个人博客)

    1. 团队课程设计博客链接 http://www.cnblogs.com/Min21/p/7064093.html 2.个人负责模块或任务说明 负责person类的编写,建立person对象, 完成M ...

  4. python数据分析panda库

    panda内有两种数据结构,Series()和DataFrame() >>> a=pd.Series([1,2],index=['a','b']) >>> a a ...

  5. 《Head First Java》读书笔记(3) - 异常和IO

    1.异常处理 我们在调用某个方法时,会被编译器告知需要捕捉异常和处理,意味着你调用的这个方法是有风险的,可能会在运行期间出状况,你必须写出在发生状况时加以处理的代码,未雨绸缪!这就是Java中异常处理 ...

  6. 鸟哥Linux学习笔记03

    1, 在Linux中,默认情况下所有的系统上的账号都记录在/etc/passwd这个文件内,密码记录在/etc/shadow这个文件下,所有的组名都记录在/etc/group内,这三个文件可以说是Li ...

  7. NIO通讯框架之Mina

          在两三年前,阿堂在技术博客(http://blog.sina.com.cn/heyitang)上曾经写过"JAVA新I/O学习系列笔记(1)"和"JAVA新I ...

  8. Java中增强for循环的用法

    此方法在jdk1.5之后才出现. 1:遍历数组 语法: for (Type value : array) { expression value; } 例子: void Sum() { int[] ar ...

  9. ExtJS配置与入门项目创建

    Sencha Cmd下载:http://cdn.sencha.com/cmd/6.5.2/jre/SenchaCmd-6.5.2-windows-64bit.zip ExtJS-6.2.0下载:htt ...

  10. PIC24 通过USB在线升级 -- USB HID bootloader

    了解bootloader的实现,请加QQ: 1273623966 (验证填bootloader):欢迎咨询或定制bootloader; 我的博客主页www.cnblogs.com/geekygeek ...