近期一直困惑LoadRunner中的http协议录制方式。
先说说我自己理解的这两种录制方式吧
- html_based:把所有请求合在一块
第一种是描述型录制:例如页面有什么,他就录什么。像关联需要动态化session他无法录制
第二种是描述型录制:与第一种区别是web_url,web_submit_date与web_link,web_submit_from的区别
https://blog.csdn.net/app_store/article/details/67137259
- url_based:把所有请求一条一条拆开
基于以上特性:
1 基于浏览器的应用程序推荐使用HTML-based Script
2 不是基于浏览器的应用程序推荐使用 URL-based Script。
3 如果基于浏览器的应用程序中包含了 JavaScript 并且该脚本向服务器产生了请求,比如DataGrid 的分页按钮等,也要使用URL-based 方式录制。
4 基于浏览器的应用程序中使用了 HTTPS 安全协议,使用URL-based 方式。
有一个问题?
就是LoadRunner选择html录制模式时,mode显示html,选择http时mode显示http
html的好处就是例如页面有什么,他就录什么。像关联需要动态化session他无法录制,但是正常我们做程序压测时,为了模拟更真实的与服务器交互的请求,是不是选择html。
正常基于html模式选择录制的脚本,都会显示这样,但是我们这样去执行的话,他会把这些操作的接口,渲染出更多js,css,图片啥的。
而我们的测试对象是服务端,但是因为这样选择,就是把前端的东西,也顺便测试了。
这个过程没错吧!
如果我们选择http的话,只会针对后端服务,进行请求,而前端的那些不会在去渲染下载执行了;
基于这种操作。前端层的请求,我们可以通过前端工具去优化,这个没错吧!
但是我好奇的是,这个html模式,是什么情况下改使用呢!因为这两种测试反差实在太了 。
结论分析:
1.事物概念
loadrunner里响应时间指的是事物的响应时间、TPS指的是每秒通过的事物数,因此事物是loadrunner跑脚本的基础。事物是用来计时用的,把一个或多个请求圈起来放在一起,统计这一个或多个请求的时间。
2.定义事物时保证事物的准确性(干净)
- 一个事物里就放一个被测请求,这样事物响应时间就是请求响应时间;
- 除了被测试请求外,事物中不放任何其他东西,检查点、集合点全放在事物外面;
- 录制时用纯的URL,这样一个URL就是一个请求;
- 修改录制脚本中Mode=“HTTP”;
3.单场景压测与混合场景压测
- 单场景测试:先测单个接口是否满足要求,不用考虑其他依赖
- 多场景测试:对多个接口共同进行压测
问题1:对于用户来说,用户要注册必须得先进入首页,要压测注册请求是不是要模拟用户的实际操作来压接口?
要压注册不用脚本中不用加首页,单场景压测脚本的干净性会影响响应时间和TPS,如同样是压注册,小A的脚本里有首页和注册两个请求,小B的脚本里只有注册。同样运行5分钟小A的注册TPS肯定会小于小B的注册TPS。
问题2:单个场景压测,用户操作注册动作,除了注册单个API,还有js、css等请求也会对服务器有压力,怎么处理?
Js、图片、css样式都不用管,一方面有专门的前端性能测试会去测试,另一方面现在都是采用缓存技术,访问一次这些图片等静态资源资源全部缓存下来了,后面发的都是纯的接口请求。
4.检查点概念
检查点的实质是从请求的response里判断有没有返回某个字符串,从而判断请求有没有成功。
压测要保证请求的成功率,检查点会影响请求成功率,通常与金钱相关的要求成功率为100%,其他的为99%、99.9%、99.99%,视具体项目而定。
- 什么情况下加检查点?
- 问题1:脚本中一定要加检查点吗?
- 检查点影响性能,不必要的检查点不加。
- 问题2:如何确定是否要加检查点?
- 数据库的add、update、delete操作不用检查点(跑完数据库查);
- 数据库的查询操作一定要有检查点;