关键词:
主要学习Web(HTTP/HTML)协议的两种录制方式,重点包括以下内容:
--脚本录制的基本原则
--HTML和URL based script介绍
--选择录制方式的原则
--HTML based script设置介绍
1、脚本录制的基本原则
(1)充分考虑脚本的执行效率。
性能测试脚本关注的是如何模拟用户的真实行为。因此,用于测试的脚本应该接近用户的真实操作。这就要求录制后的脚本在修改的过程中不要增加过多内容,尤其是不能降低其运行效率。例如尽量不要增加循环、检查等操作,除非这些操作是必须的。
"基于此:检查点的设置一定要合理"
(2)录制重要的用户业务
要录制常用的、使用频率较高的业务来进行测试,不要什么内容都录制。
(3)选择需要的进行录制
在Web性能测试中,如果有些操作对于用户所关注的事物没有什么影响,那么可以不进行录制。例如,一些查询事物中,选择查询条件页面的请求过程可以不予录制,但对于一些要传递查询参数的过程则必须录制。(即凡是与Server服务器端进行交互的必须录制)
(4)录制前对参数要进行正确的配置
2、HTML和URL based script介绍
(1)基本概要
HTML based script:可以为每个用户请求生成单独的函数。
URL based script:可以捕获所有作为用户操作的结果发送到服务器的HTTP请求,然后一条条记录下来。它甚至可以捕获非HTML的程序,比如小程序和非浏览器应用程序。
HTML这种录制方式录制出来的脚本直观,易于理解和维护。而URL生成的脚本看起来比较长比较多。
(2)选择配置路径
当然还可以在:Tools-->>Recording Options处进行选择设置。
(3)两种录制方式录制出的脚本比较。
录制场景:Web Tours网站的登陆和退出
使用HTML based script录制的脚本如下显示:
Action() { web_url("tk.gif", "URL=http://addons.g-fox.cn/tk.gif?when=run&r=0.9908384090193264", "TargetFrame=", "Resource=1", "RecContentType=image/gif", "Referer=", "Snapshot=t1.inf", LAST); web_url("qvod-hao123.gif", "URL=http://addons.g-fox.cn/qvod-hao123.gif?c=http%3A%2F%2F127.0.0.1%3A1080%2FWebTours%2F&r=0.3669484254643438", "TargetFrame=", "Resource=1", "RecContentType=image/gif", "Referer=", "Snapshot=t2.inf", LAST); web_add_cookie("uid=38oGGVZ+d3CIW0zdBBKNAg==; DOMAIN=i.g-fox.cn"); web_url("coba_official_v2.json", "URL=http://i.g-fox.cn/notification/coba_official_v2.json", "TargetFrame=", "Resource=1", "RecContentType=application/json", "Referer=", "Snapshot=t3.inf", LAST); web_url("adu.gif", "URL=http://adu.g-fox.cn/adu.gif?channelid=www.firefox.com.cn&fxversion=32.0.1&ceversion=&ver=2_2&pk=%7Bd3c72884-7347-4670-9212-879a13a350f6%7D&uk=%7B4f29b2c6-db66-4dcd-ac4a-e548e110fce4%7D&cehome=false&locale=zh-CN&moexts=cpmanager,cehomepage,share_all_cn,coba,quicklaunch,commonfix,wx-assistant&age=626&default=false&defaultHttp=false&flash=25.0.0.148&now=1503456605300", "TargetFrame=", "Resource=1", "RecContentType=image/gif", "Referer=", "Snapshot=t4.inf", LAST); web_url("adu-new.gif", "URL=http://adu.g-fox.cn/adu-new.gif?ver=2_2&now=1503456605301&channelid=www.firefox.com.cn&fxversion=32.0.1&ceversion=&locale=zh-CN&age=626&pk=%7Bd3c72884-7347-4670-9212-879a13a350f6%7D&uk=%7B4f29b2c6-db66-4dcd-ac4a-e548e110fce4%7D&ude=true&default=false&defaultHttp=false&cehome=false&flash=25.0.0.148&moexts=cpmanager:1.5.14,cehomepage:0.10.47.3,share_all_cn:0.22,coba:1.0.35,quicklaunch:1.1.8,commonfix:0.13,wx-assistant:1.1.5&fxa=true", "TargetFrame=", "Resource=1", "RecContentType=image/gif", "Referer=", "Snapshot=t5.inf", LAST); lr_think_time(6); web_url("WebTours", "URL=http://127.0.0.1:1080/WebTours/", "TargetFrame=", "Resource=0", "RecContentType=text/html", "Referer=", "Mode=HTML", EXTRARES, "Url=http://addons.g-fox.cn/firstLocation.gif?p=false&a=false&e=false&bsp=1&r=0.9296673577517076", "Referer=", ENDITEM, LAST); web_url("header.html", "URL=http://127.0.0.1:1080/WebTours/header.html", "TargetFrame=", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/", "Mode=HTML", LAST); web_url("getcontentnew", "URL=http://front.meimotuan.com/api/getcontentnew?callback=jQuery18302938407202506831_1503456614146&guid=ZZ2FA3B363A1982A803A50A149BA5FAE&_=1503456614159", "TargetFrame=", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/", "Snapshot=t6.inf", "Mode=HTML", LAST); web_url("welcome.pl", "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true", "TargetFrame=", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/", "Snapshot=t7.inf", "Mode=HTML", LAST); web_add_cookie("renren_tag_0526=isTag; DOMAIN=127.0.0.1"); lr_think_time(12); web_submit_data("login.pl", "Action=http://127.0.0.1:1080/WebTours/login.pl", "Method=POST", "TargetFrame=body", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home", "Snapshot=t8.inf", "Mode=HTML", ITEMDATA, "Name=userSession", "Value=121786.684082625zczttAcpfzcfDHfizptVfDHf", ENDITEM, "Name=username", "Value=wang", ENDITEM, "Name=password", "Value=wang123456", ENDITEM, "Name=login.x", "Value=32", ENDITEM, "Name=login.y", "Value=12", ENDITEM, "Name=JSFormSubmit", "Value=off", ENDITEM, LAST); web_url("SignOff Button", "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1", "TargetFrame=body", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t9.inf", "Mode=HTML", LAST); web_add_cookie("MSO=SID&1503456615; DOMAIN=127.0.0.1"); web_add_cookie("MTUserInfo=firstName&wa&address2&beijing&username&wang&hash&39&lastName&ng%0A&address1&hebei&creditCard&88996688&expDate&11%2F12%0A; DOMAIN=127.0.0.1"); web_url("welcome.pl_2", "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1", "TargetFrame=", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home", "Snapshot=t10.inf", "Mode=HTML", LAST); return 0; }
使用URL based script录制的脚本如下显示:
Action() { web_url("tk.gif", "URL=http://addons.g-fox.cn/tk.gif?when=run&r=0.7604677810829451", "Resource=1", "RecContentType=image/gif", "Referer=", "Snapshot=t11.inf", LAST); lr_think_time(5); web_url("adu.gif", "URL=http://adu.g-fox.cn/adu.gif?channelid=www.firefox.com.cn&fxversion=32.0.1&ceversion=&ver=2_2&pk=%7Bd3c72884-7347-4670-9212-879a13a350f6%7D&uk=%7B4f29b2c6-db66-4dcd-ac4a-e548e110fce4%7D&cehome=false&locale=zh-CN&moexts=cpmanager,cehomepage,share_all_cn,coba,quicklaunch,commonfix,wx-assistant&age=626&default=false&defaultHttp=false&flash=25.0.0.148&now=1503456910813", "Resource=1", "RecContentType=image/gif", "Referer=", "Snapshot=t12.inf", LAST); web_add_cookie("renren_tag_0526=isTag; DOMAIN=127.0.0.1"); web_url("WebTours", "URL=http://127.0.0.1:1080/WebTours/", "Resource=0", "RecContentType=text/html", "Referer=", "Mode=HTTP", LAST); web_url("firstLocation.gif", "URL=http://addons.g-fox.cn/firstLocation.gif?p=false&a=false&e=false&bsp=1&r=0.9261678897929481", "Resource=1", "RecContentType=image/gif", "Referer=", "Snapshot=t13.inf", LAST); web_url("header.html", "URL=http://127.0.0.1:1080/WebTours/header.html", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/", "Mode=HTTP", LAST); web_url("welcome.pl", "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/", "Snapshot=t14.inf", "Mode=HTTP", LAST); web_concurrent_start(NULL); web_url("home.html", "URL=http://127.0.0.1:1080/WebTours/home.html", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true", "Mode=HTTP", LAST); web_url("nav.pl", "URL=http://127.0.0.1:1080/WebTours/nav.pl?in=home", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=true", "Snapshot=t15.inf", "Mode=HTTP", LAST); web_concurrent_end(NULL); lr_think_time(11); web_submit_data("login.pl", "Action=http://127.0.0.1:1080/WebTours/login.pl", "Method=POST", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?in=home", "Snapshot=t16.inf", "Mode=HTTP", ITEMDATA, "Name=userSession", "Value=121786.708464966zczttADpiVzzzzzHDHfizptccQ", ENDITEM, "Name=username", "Value=wang", ENDITEM, "Name=password", "Value=wang123456", ENDITEM, "Name=login.x", "Value=53", ENDITEM, "Name=login.y", "Value=4", ENDITEM, "Name=JSFormSubmit", "Value=off", ENDITEM, LAST); web_concurrent_start(NULL); web_url("nav.pl_2", "URL=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/login.pl", "Snapshot=t17.inf", "Mode=HTTP", LAST); web_url("login.pl_2", "URL=http://127.0.0.1:1080/WebTours/login.pl?intro=true", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/login.pl", "Snapshot=t18.inf", "Mode=HTTP", LAST); web_concurrent_end(NULL); lr_think_time(5); web_url("SignOff Button", "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1", "Resource=0", "RecContentType=text/html", "Referer=", "Snapshot=t19.inf", "Mode=HTTP", LAST); web_add_cookie("MSO=SID&1503456916; DOMAIN=127.0.0.1"); web_add_cookie("MTUserInfo=firstName&wa&address2&beijing&username&wang&hash&39&lastName&ng%0A&address1&hebei&creditCard&88996688&expDate&11%2F12%0A; DOMAIN=127.0.0.1"); web_url("welcome.pl_2", "URL=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/nav.pl?page=menu&in=home", "Snapshot=t20.inf", "Mode=HTTP", LAST); web_concurrent_start(NULL); web_url("home.html_2", "URL=http://127.0.0.1:1080/WebTours/home.html", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1", "Mode=HTTP", LAST); web_url("nav.pl_3", "URL=http://127.0.0.1:1080/WebTours/nav.pl?in=home", "Resource=0", "RecContentType=text/html", "Referer=http://127.0.0.1:1080/WebTours/welcome.pl?signOff=1", "Snapshot=t21.inf", "Mode=HTTP", LAST); web_concurrent_end(NULL); return 0; }
3、通过两种录制方式的比较,我们得出脚本录制的原则,如下:
[1]基于浏览器的应用程序推荐使用HTML-based Script。
不是基于浏览器的应用程序推荐使用URL-based Script。
[2]如果基于浏览器的应用程序中包含了JavaScript并且该脚本向服务器产生了请求,比如DataGrid的分页按钮等,也要使用URL方式录制。
[3]基于浏览器的应用程序中使用了HTTPS安全协议,使用URL方式进行录制。
[4]对于初学者来说,如果HTML录制方式不成功,可以换成URL方式录制。
4、HTML based script设置介绍
(1)用来描述用户行为的脚本。直接创建的URL(web-url)、表单提交(Web_submit_form)、链接(Web_link)、和图像(Web_image)等函数。
(2)仅包含明确的URL脚本。这些脚本中所有的链接、图像请求和URL操作都被录制为Web_url函数,而表单提交则被录制为Web_submit_data函数。
lr学习笔记4-lr界面分析2
本次笔记主要针对LR中的Controller进行详细的介绍。主要包括以下内容:--Controller--创建运行脚本--方案设置--运行方案--Resultssetting--监视方案--关于系统资源监视下面我们展开说来:1、Controller可以使用LoadRunnerController来管理和维护... 查看详情
lr学习笔记5-lr界面分析3
本次最后一次介绍LR的界面了,这次学完,LR的三大组件就有了一定的了解了。--Analysis基础知识--了解Analysis报告--Analysis分析基础--IP欺诈1、Analysis基础知识(1)创建会话在运行方案时,数据将存储在结果文件中,扩展名为.lrr。An... 查看详情
lr学习笔记2-loadrunner目录分析
...傻瓜式应用,那么就会忽略掉LR自带的分析方法和方式,学习这个可以帮助我们更好的掌握。主要学习完本节要做到:--了解软件安装后目录结构的必要性--简单分析主要目录2.下面进入重点内容:--analysistemplates--分析模板,我的... 查看详情
lr学习笔记16-lr脚本调试
任何测试大师写出来的脚本都会出现错误,所以我有必要学习LR脚本调试的技巧。本次学习的内容如下:------脚本调试的概述------Animatedrun与None-Animatedrun-----调试小技巧-----日志设置1、概述对于解释性语言的调试,只能通过输出... 查看详情
lr学习笔记15-lr的错误处理
...ttings上面。那么如何在脚本中直接处理?就是我们下面要学习的内容,具体内容包括以下几个方面:--脚本的健壮性--VuGen的处理机制--lr_continue_on_error--示例代码1、脚本的健壮性与VuGen的处理机制一个健壮的脚本应该能够捕捉到一... 查看详情
lr学习笔记6-常用术语
学习LR中的常用术语,可以防止以后在学习的过程中感到迷惑;主要涉及的包含以下方面:--场景--负载发生器--虚拟用户--虚拟用户脚本--事务--思考时间--集合点--事务响应时间1、场景(1)在LR中主要表现为controller中设计与执行... 查看详情
lr学习笔记9-回放测试脚本
主要学习内容如下:--设置runtimesettings--实时观察回放的图像--回放脚本--查看results1.设置runtimesettings,具体设置如下:路径在:Vuser-->>runtimesettings(1)设置运行迭代次数为2 (2)"步"设置为random (3)"日志"选择扩展... 查看详情
lr学习笔记12-测试脚本的增强方法
本次开始步入重点了,好好学习哦。学习内容如下:--事务--参数化--如何验证网页的内容(检查点)--如何产生调试信息(输出函数)1、事务事务就是一系列操作的集合插入事务方便我们今后的分析2、参数化LR的参数化功能是为... 查看详情
pytorch笔记:调整学习率(torch.optim.lr_scheduler)(代码片段)
...rch.optim.lr_scheduler模块提供了一些根据epoch训练次数来调整学习率(learningrate)的方法。一般情况下我们会设置随着epoch的增大而逐渐减小学习率从而达到更好的训练效果。2 lr_scheduler调整策略举例2.1 torch.optim.lr_scheduler.Lam... 查看详情
lr学习笔记1-性能测试常见用语
学习性能测试,首先要明确几个常用用语,这样才能加固我们对性能测试的理解。主要包括以下几个:--并发用户数量--请求响应时间--事务响应时间--吞吐率--TPS--点击率--资源利用率下面我们展开进行概念性的讲解1.并发用户数... 查看详情
lr和svm的联系与区别
参考技术ALR与SVM都是机器学习中经常会用到的算法。现在想深入了解每种模型直接的异同,提升自身水平。找到一个博客解释的比较好:博客:LR与SVM的异同。下面的内容也是跟着这篇博客进行学习的。按照label的类型进行判别... 查看详情
软工综合实践学习笔记02
在这次软件工程时间的短学期课程中,我学到了很多东西,现在重点说一下在本次课程中对我来说比较难也是比较感兴趣的地方:关于映射请求和返回值。首先是@RequestMapping映射请求的一些知识点1.SpringMVC使用@RequestMapping注解为... 查看详情
汇编语言学习笔记
六、选择结构if-then结构C语言版本 if(count==10){count--;i++;} MASM汇编.ifcount==10deccountinci.endif cmp指令,该指令用于比较两个参数大小cmpmem,imm比较内存mem和立即数imm大小cmpreg,imm比较寄存器reg和立即数imm大小cmpreg,mem比较寄存器... 查看详情
编译原理学习笔记~lalr分析法
前言 进行完LR(1)分析后,我们会发现,存在一些同心项目【同心:如果除展望符外,两个LR(1)项目集是相同的,则称这两个LR(1)项目集是同心的】那么是否可以简化这些项目呢?是的,可以... 查看详情
《深度学习笔记》——pytorch调整学习率(代码片段)
1定义调整学习率函数defadjust_learning_rate(optimizer,epoch,lr):"""SetsthelearningratetotheinitialLRdecayedby10every2epochs"""#optimizer表示优化器对象lr*=(0.1**(epoch//2))forparam_groupinop 查看详情
关于get和post的学习笔记
一.Get和Post的优缺点1.Get>优点:编写起来比较简单,只要在地址后面拼接数据即可。>缺点:提交的数据有长度限制、安全性比较差2.Post>优点:提交的数据没有长度限制、使用的是流的方式提交,安全性比较高>缺点:编... 查看详情
jmeter学习笔记——参数化
JMeter也有像LR中的参数化,本篇就来介绍下JMeter的参数化如何去实现。参数化:录制脚本中有登录操作,需要输入用户名和密码,假如系统不允许相同的用户名和密码同时登录,或者想更好的模拟多个用户来登录系统。这个时候... 查看详情
编译原理学习笔记(代码片段)
目录引论什么是编译程序为什么要学习编译原理从计算机科学与技术中学什么?编译原理的应用编译过程编译程序的结构编译程序总框遍编译前后端高级程序设计语言概述常用的高级程序设计语言程序设计语言的定义高级程... 查看详情