多数的性能测试脚本都是基于HTTP协议,本章我们结合实例来讲解HTTP协议的脚本录制与开发。
1、工作区介绍
各个分区介绍:
1、区域1是一个目录树,存放测试设计过程中使用到的元件;执行过程中默认从根节点顺序遍历树上的元件。工作台也可以用来存放元件,元件不会被执行,可以备份;
元件:例如我们要向服务器发送一个Http Post请求,这个请求是由一个HTTP请求取样器来完成的,叫做“HTTP请求”的取样器就是元件。在1区域添加进来的都是元件;
2、区域2是测试计划编辑区域,在【用户定义变量】区域我们可以定义整个测试计划共用的全局变量,这些变量对多个线程组有效,还可以添加测试计划依赖的jar包,比如JDBC方式连接数据库的驱动;
3、区域3是菜单栏,图标是快捷键方式,从左到右依次是:
(1)新建测试计划;
LoadRunner的录制功能让性能测试脚本编写成为一件容易的事情,也只因为这件事情,它坐上了性能测试的头把交椅。JMeter作为开源性能测试工具中的王者当然少不了提供录制功能。JMeter的录制除了自身提供的HTTP代理方式进行录制的原理是解析网络数据包,按Http协议包装成Http Request、Http Response等对象;
4.2.1、Badboy进行录制
Bd是一个浏览器模拟工具,具有录制及回放功能,还可以进行测试。可以用它来做自动化测试,因为它有捕获表单数据的功能。我们可以用它来对Web页面进行诊断,诊断系统响应快慢,响应数据大小。
Badboy录制的脚本可以直接导至成.jmx格式,此后缀正是JMeter脚本保存的格式,jmx实际上是一个XML格式的文件。
Badboy有两种录制方式:Request方式与Navigation方式。以下对Badboy的录制方式的区别仅进行介绍
1、request:模仿浏览器发送表单信息到服务器,每一个资源都将作为请求发送;
2、Navigation:记录用户鼠标动作,类似于著名的自动化测试工具QTP,回放时模拟一个点击;
基于JMeter脚本要求,我们需要选用request方式来进行录制,这些请求将会以jmx的格式保存下来,从而我们才可以导入JMeter中复用。
Badboy可以安装在电脑上,下载地址为:https://badboy.en.softonic.com/,目前只有windows版本的,没有mac版本的。
使用Badboy工具制造测试脚本的步骤(书本62页前后):
1、在Badboy的输入栏中,输入需要录制的地址,之后点击右箭头,开始录制;
2、登录:输入用户名和密码,进入论坛首页;
3、进入其中一个板块;
4、在此板块发送一个新贴;
接下来导出为jmeter文件就可以了;
1、介绍脚本中的各个元件:
(1)设置用户全局变量,即在“用户定义的变量”中定义;
(2)独立进行每个线程组:如果一个测试计划中有多个线程组,设置此项可以生效。不设置时每个线程组同时运行;
(3)Run teardown Thread Group,关闭主线程后运行teardown程序来正常关闭线程组(运行的线程本次迭代完成后关闭);
(4)函数测试模式:在调试脚本的过程中我们可能需要获取服务器返回详细信息就可以选择此项,此项记录较多的数据会影响测试效率,所以在执行性能测试时请关闭此项;
(5)Add directory or jar to classpath,把测试需要依赖的jar包或包所在的目录加入类路径,建议大家放在jmeter/lib目录底下;
2、ThreadGroup:线程组,模拟虚拟用户的发起点,在此可以设置线程数及运行次数或者运行时长,还可以定义调度时间与运行时长;
3、HTTP Cookie Manager:我们知道IE访问Web页面时会记录Cookie信息,JMeter通过加入HTTP Cookie Manager来自动记录Cookie信息,JMeter通过加入HTTP Cookie Manager来自动记录Cookie信息;
(1)JMeter支持的Cookie标准有多种,同时,JMeter也提供了两组程序实现来支持这些Cookie标准,分别是HttpClient3与HttpClient4。可以将他们看成一个没有界面的浏览器,用它来完成浏览器的各种动作。
4、以下是Cookie标准,HttpClient3.1可以支持:
RFC2109、RFC2965、Netscape标准、Browser Compatibility、Ingore Cookie
5、User Defined Variable:用户自定义的变量,在此我们可以定义后面元件需要引用的变量并对其进行赋值。jsessionid一般是服务器返回的,每个用户返回的都不一样,所以在此不应该固定这个值,但是Badboy转换的脚本把jsessionid放到了此元件中,所以我们要把它除掉;
6、Http Header Manager:管理HTTP头信息,我们可以从中找到诸如User-Agent、Connection、content-type、Accpect、Cookie、location302重定向地址等信息;
7、Step1:实际上这是一个循环控制器,我们可以在【逻辑控制器】中找到它。在此我们可以设置循环次数,以我们录制业务为例,一次登录可以多次发送新贴,所以把登录Step1的循环次数设置为1,Step2/3进入板块与发帖的循环次数设置为永远。
8、一个网址就是一个HTTP请求元件,可以在【Sampler】中找到它的身影。
登录页面的脚本模拟,模拟进入登录页面:
9、属性介绍:
(1)Web服务器:指定Http请求的主机地址,不需要加上“http://”,JMeter 自动加上,普通Web服务端口默认是80,邮箱端口一般是443,126邮箱也用此端口;如果访问地址中带有其他端口号应该在对应的位置填上;
(2)Tmieouts:指定超时时间,单位是毫秒;Connect指定连接超时时间,Response指定响应超时时间;
(3)Implementation:下拉列表有3个选择项,其中HttpClient是Apache Jakarta Common下的子项目,通过它可以高效地访问HTTP协议的资源,我们可以把它看成是一个没有界面的浏览器。建议使用HttpClient4;
(4)协议:我们录制的论坛登录用的是http协议,所以在此要填入http。https是SSL的连接;
(5)方法:下拉列表中有八个选项,其中我们常用的是Post提交请求对于表单理论上没有长度限制,用户一般也看不到提交的内容,较get方式安全;
(6)Content encoding:字符编码格式,默认iso8859,不确定时可以向开发团队确认,不妨试一下UTF-8,大多数应用都会指定成UTF-8格式;
(7)路径:除去主机地址部分的访问链接,这是/entry/cgi/ntesdoor;
(8)自动重定向:HttpClient接收到请求后,如果请求中包含重定向请求,HttpClient是可以自动跳转的,但是只针对Get与Head请求,勾选此项则“跟随重定向”失效;
(9)跟随重定向:Http Request取样器是默认选项,当响应Code是3xx是,自动跳转到目标地址。JMeter与自动重定向不同,会记录重定向过程中的所有请求响应,在查看结果树时可以看到服务器返回的内容,可以对响应的内容做关联;