录毛线脚本,直接手写接口最简洁的LoadRunner性能测试脚本(含jmeter脚本)
近日翻看了下招聘信息,很多都要求loadrunner和jmeter这两款工具,毕竟是性能测试的主流客户端并发工具。
录制的问题
做性能脚本是性能测试的基本功,loadrunner和jmeter这两款工具都提供录制的功能,经常在群里看到有测试朋友问录制脚本的问题:
1、录制不到脚本;
2、浏览器卡死;
3、录制的脚本杂乱;
4、其它问题;
loadrunner录制可以参考:LoadRunner原理、使用流程及脚本实战,jmeter录制可以参考:https://www.cnblogs.com/uncleyong/p/10990053.html
我以前最开始学的时候也遇到过这个问题,很苦恼,哪怕录到了,录的还乱七八糟(各种css,js,img等),索性就不录了,直接抓包手写吧
听起来好高大上啊,其实很简单,抓包获取请求的参数即可,可以用谷歌F12或者火狐插件firebug、或者fiddler
通常情况下,我们测试性能先要做单场景测试,即某个功能的性能测试,这里用谷歌F12抓包loadrunner自带的订票系统登录功能来演示
前提需要安装loadrunner,参考:https://www.cnblogs.com/uncleyong/p/10698925.html
手写loadrunner脚本
启动服务后,谷歌浏览器访问:http://127.0.0.1:1080/WebTours/
按F12,然后输入用户名和密码(jojo/bean),登录
登录成功
下面是F12抓到的请求,login.pl就是登录请求
点击login.pl这个请求,在最下面可以看到请求参数,是form表单
点击view source,可以看到&符号连接的键值对
为了把上面字符串处理成loadrunner传参的样式,专门写了一个脚本来处理(需要脚本的可以关注【全栈测试笔记】联系作者),处理结果是:
"Name=userSession","Value=118674.760955853zVAtDDDpAVzzzzzHDzzcfpQQiV",ENDITEM,
"Name=username","Value=jojo",ENDITEM,
"Name=password","Value=bean",ENDITEM,
"Name=login.x","Value=41",ENDITEM,
"Name=login.y","Value=8",ENDITEM,
"Name=login","Value=Login",ENDITEM,
"Name=JSFormSubmit","Value=off",ENDITEM,
userSession每次都不一样,是登录之前服务器返回的,经过查找,是下面这个请求返回的
所以,这里需要用到关联,loadrunner关联参考:https://www.cnblogs.com/uncleyong/p/10702702.html
所以,下面两个请求是登录必须的
这里,登录后,我们要判断是否登录成功
登录成功的返回结果
登录成功,loadrunner的日志
为了精准找到登录成功和失败的差异,退出后,用错误的用户名或密码登录,得到登录失败的响应信息
通过工具对比,在body中查找frame src=的值比较靠谱
照葫芦画瓢,打开loadrunner,按F1,在帮助手册中搜索对应的方法,复制里面相应的例子改改即可。
如果是get请求,搜索web_url;
如果是post请求:
表单提交,搜索web_submit_data;
传json,搜索web_custom_request;
完整脚本
Action()
{
// lr_start_transaction("hp_homepage");
// web_url("hp_homepage","url=http://127.0.0.1:1080/WebTours/",LAST);
// lr_end_transaction("hp_homepage", LR_AUTO); //web_reg_save_param("userSession","LB=name=userSession value=","RB=>","Search=body",LAST);
web_reg_save_param_ex("ParamName=userSession","LB=name=userSession value=","RB=>",SEARCH_FILTERS,"Scope=body",LAST); lr_start_transaction("hp_webtours");
web_url("hp_webtours","url=http://127.0.0.1:1080/WebTours/nav.pl?in=home",LAST);
lr_end_transaction("hp_webtours", LR_AUTO);
lr_error_message("userSession=%s",lr_eval_string("{userSession}"));
web_reg_save_param("result","LB=<frame src=","RB=?intro=true","Search=body",LAST);
//web_reg_save_param("result","LB=login.pl?intro=","RB= ","Search=body",LAST);
//判断事物的时候和true比较,if(strcmp(lr_eval_string("{result}"),"true")==0) lr_start_transaction("login");
web_submit_data("login",
"Action=http://127.0.0.1:1080/WebTours/login.pl",
"Method=POST",
"TargetFrame=",
"RecContentType=text/html",
"Referer=",
"Snapshot=t7.inf",
"Mode=HTML",
ITEMDATA,
"Name=userSession","Value={userSession}",ENDITEM,
"Name=username","Value=jojo",ENDITEM,
"Name=password","Value=bean",ENDITEM,
"Name=login.x","Value=41",ENDITEM,
"Name=login.y","Value=8",ENDITEM,
"Name=login","Value=Login",ENDITEM,
"Name=JSFormSubmit","Value=off",ENDITEM,
LAST );
//系统自动判断写为:lr_end_transaction("login", LR_AUTO);
if(strcmp(lr_eval_string("{result}"),"login.pl")==0)
{
lr_end_transaction("login", LR_PASS);
lr_error_message("log succes");
}
else{
lr_error_message("log fail");
lr_end_transaction("login", LR_FAIL);
lr_error_message("log fail");
}
return 0;
}
设置日志打印服务器响应内容
不下载非html资源
请求后,日志返回的userSession(下面显示是Error红色,是因为脚本中用的lr_error_message来打印userSession,显示红色,方便查看)
登录成功
用其它用户登录,获取到的userSession也是OAA(具体原因未知),但是这样容易造成用户信息混乱,如果把主页的请求加上,增加如下代码,获取到的userSession就正常了,且登录成功
lr_start_transaction("hp_homepage");
web_url("hp_homepage","url=http://127.0.0.1:1080/WebTours/",LAST);
lr_end_transaction("hp_homepage", LR_AUTO);
获取到的userSession
登录成功
手写jmeter脚本
基于上面抓包及分析的结果,我们也可以直接写jmeter的脚本了
http请求默认值:ip、端口
信息头
首页get请求
登录页get请求
正则表达式提取userSession
登录请求
登录断言
登录请求传参
登录成功
是不是感觉很简单?
录毛线脚本,直接手写接口最简洁的LoadRunner性能测试脚本(含jmeter脚本)的更多相关文章
- 录毛线脚本,直接抓包手写最简洁的LoadRunner性能测试脚本
通常情况下,我们测试性能先要做单场景测试,即某个功能,一般情况下,这个功能依赖的功能(可能是需要先登录)不会太多, 如果录制脚本的话,会录制到很多无关的请求,大大增加了脚本的复杂度以及调整脚本的工作量 ...
- 跨域的案例 以百度接口/手写接口为例,还有jQuery写法
仅在js部分输入即可 百度接口的案例 <script> function fn(data){ console.log(data) } </script> <script ...
- [LoadRunner]性能测试实践_Hessian协议脚本编写
第一步,新建LR的脚本,选择Java Vuser协议: 第二步,编写hessian测试脚本,如下: import lrapi.lr; import java.net.MalformedURLExcep ...
- [LoadRunner]性能测试实践_Hessian协议脚本编写2
协议选取和运行配置请参考:http://www.cnblogs.com/whylaughing/p/5430821.html 这次直接贴代码让大家参考: import lrapi.lr; import ...
- 性能学习笔记之四--事务,思考时间,检查点,集合点和手写lr接口
一.事物,思考时间,检查点,集合点 1.事务 lr里面的事物是lr运行脚本的基础.lr里面 要测试的三个维度都以事物为单位,所以一定要有事物.事务的概念贯穿loadrunner的使用,比如我们说的响应 ...
- LoadRunner手写脚本、检查点、集合点、事务、思考时间
手写脚本 什么时候要手写? 可以有条件手写脚本的场景有两类: 有接口说明文档 没有借口说明文档,要去录制,录制不了,抓包手写 所需函数 我们这里讲的例子是基于 http 协议的,也是常见的两种请求类型 ...
- 好记性不如烂笔头--linux学习笔记9练手写个shell脚本
#!/bin/bash #auto make install httpd #by authors baker95935 #httpd define path variable H_FILES=http ...
- 微软手写识别模块sdk及delphi接口例子
http://download.csdn.net/download/coolstar1204/2008061 微软手写识别模块sdk及delphi接口例子
- 快速开发框架(FDMS)新增1000个对外接口都不须要手写一行代码
一个大型系统难免会跟其它系统有数据交换,这里就要提供数据接口给外部系统. 曾经在一家智能终端设备的公司上班.那段时间的主要工作就是写接口.接口须要与手机.手持设备.系统管理软件等进行数据交换.总结了一 ...
随机推荐
- Java高效开发-远程debug
1.前言 "这怎么回事?在本地还好好,放到服务器就不行了.这该怎么排查,日志也看不出来啥呀",日常开发中经常会出现这种问题,这时候就可以尝试idea远程debug的模式试试 2.使 ...
- Java异常理解之Exception in thread “main“ java.lang.ArrayIndexOutOfBoundsException
这个异常是Java中的数组越界问题 当你使用不合法的索引访问数组是会出现这种错误例如: class Solution { public static int climbStairs(int n) { ...
- 短视频正当时,如何让你的App快速构建视频创作能力?
视频编辑服务(Video Editor Kit)是华为开放给开发者快速构建视频编辑能力的服务,提供视频导入.编辑处理.特效渲染.视频导出.媒体资源管理等一站式视频处理能力.视频编辑服务为全球开发者提供 ...
- NOIP2020 排水系统
几度欲写,却望高精而却步,今习得__int128,君子报仇,一年不晚. NOIP2020 排水系统 DAG图,拓扑就好,核心难点在于毒瘤的分数的操作,毕竟只是T!只有分数相加,就很简单了. a/b + ...
- Servlet-base标签的作用(相对路径和绝对路径)
Web中的相对路径和绝对路径 在javaWeb中,路径分为相对路径和绝对路径: 相对路径: . 表示当前目录 .. 表示上一级目录 资源名 表示当前目录/资源名 绝对路径: http://ip ...
- 为什么 Redis 的查询很快, Redis 如何保证查询的高效
Redis 如何保证高效的查询效率 为什么 Redis 比较快 Redis 中的数据结构 1.简单动态字符串 SDS 对比 c 字符串的优势 SDS可以常数级别获取字符串的长度 杜绝缓冲区溢出 减少修 ...
- Python如何把八进制转换成ASCII码
做题途中拿到一串八进制字符串 0126 062 0126 0163 0142 0103 0102 0153 0142 062 065 0154 0111 0121 0157 0113 0111 010 ...
- 删除文件行末尾的^M符号方法
有时发现某些文件的末尾总是带有^M符号 cat /etc/hosts.allow|col -b > /etc/hosts.allow.old
- 带你十天轻松搞定 Go 微服务系列(八、服务监控)
序言 我们通过一个系列文章跟大家详细展示一个 go-zero 微服务示例,整个系列分十篇文章,目录结构如下: 环境搭建 服务拆分 用户服务 产品服务 订单服务 支付服务 RPC 服务 Auth 验证 ...
- 入门 - k8s伸缩应用程序 (六)
目标 使用 kubectl 伸缩应用程序. Scaling(伸缩)应用程序 在之前的文章中,我们创建了一个 Deployment,然后通过 服务 提供访问 Pod 的方式.我们发布的 Deployme ...