查询计划(天气查询)
这是一个入门计划,仅使用jmeter进行查询功能的计划,可参考http://www.cnblogs.com/TankXiao/p/4045439.html有代码可下载。不过我还是以自己的学习再讲解一下。
实际编写web测试时,你会发现:只有熟悉HTTP,才能理解Jmeter的实现方式,才能更好的去使用它,因为它就是模拟http的。
计划目标:根据城市名称,获取城市代码,然后获取到天气信息
分析步骤:
第一步: 发送请求到http://toy1.weather.com.cn获取城市代码
比如上海,http://toy1.weather.com.cn/search?cityname=上海
从这个请求的response 中获取到上海的城市代码.
(上海的地区代码是101020100)
第二步: 发送请求: http://www.weather.com.cn/weather2d/101020100.shtml 可以得到该城市的天气数据
我用到的JMETER点有:自定义变量、关联(正则表达式)、断言
1. 第一步:创建线程组
JMETER的所有任务都必须线程处理,可以理解为WEB的请求就是一个线程组,所以需要模拟线程组来实现功能。
操作:添加——Threads(Users)——线程组,如图所示
释:
名称:自定义的线程组名称。
线程数:即设置发送请求的用户数,即并发数。
Ramp-Up Period(in seconds):所有线程启动起来的总时间,单位为妙。如果未指定ramp-up period ,也就是说ramp-up period 为零, JMeter 将立即建立所有线程。假设ramp-up period 设置成T 秒, 全部线程数设置成N个, JMeter 将每隔T/N秒建立一个线程。
循环次数:请求的重复次数,如果选择永远,则一直请求;输入次数,则根据指定次数重复请求;如果为1,则仅执行一次请求。
Delay Thread creation until needed:直到需要时延迟线程的创建。
调度器:选中之后可以配置启动时间、结束时间,立即或者预定的启动及结束时间;
持续时间,即测试计划持续多长时间,会覆盖结束时间;
启动延迟,即测试计划延迟多长时间启动,会覆盖启动时间。
2. 第二步:创建一个请求,获取城市代码
首先:创建自定义变量
我们可以直接把需要查询的“城市”写在url地址进行请求(相当于一个常量),也可以设置为参数进行传递请求(相当于变量)
这里就介绍怎么创建自定义变量
定义一个变量叫 city. 使用它的时候用 ${city}
操作:添加——配置原件——用户定义的变量,如图所示。然后设置变量名称为city,值为上海
然后:创建一个HTTP请求
操作:添加——Sampler——HTTP请求,如图所示
输入http的请求信息,如下图所示
请求名称:citycode。
发送一个Get 方法的http 请求: http://toy1.weather.com.cn/search?cityname=${city}
释:
名称:自定义的HTTP请求的名称。
服务器名称或IP:必填,内容为HTTP请求的Host头域信息,表示请求url的原始服务器或网关的位置(域名)。
HTTP请求:这里测试web查询,所以协议一般默认的都是http。方法,根据http请求使用的方法选择。Content encoding当参数值会有特殊字符时,最好设置一下,一般为utf-8.
路径:主要指跟在服务器名称或IP后的参数信息。
最后:创建HTTP信息头管理器
为什么要创建http信息头呢,我前面说了jmeter就是模拟http发送请求的,但是它毕竟不是http,所以测试某些系统的时候,可能会检测http请求的某些信息,比如这里的系统,可能会检测到http的header,如果不包含,可能跳转出现302.
操作:选择http请求,右键——添加——配置元件——HTTP信息头管理器。
输入信息头的值,这里输入的是Referer的值,也可以添加其他。
补充:添加响应断言、断言结果
响应断言操作:选择http右键添加——断言——响应断言。
断言响应内容是否包含上海的字符串。
释:
模式匹配规则:选择“包括”“匹配”时,支持正则表达式;当为Equals和Substring时,则为完全匹配。
断言结果操作:选择线程组右键添加——监听器——断言结果
3. 第三步:创建结果树
创建结果树,当然就是为了看执行结果了,当然还有其他接听结果的,请自行选择。
操作:右键线程组添加——监听器——查看结果树。
点击执行按钮就可以执行前面编写的citycode请求信息了,通过为绿色,出现问题为红色。
如图,响应数据就是我们需要城市代码信息了,同时第2步会对内容进行断言。
得到了响应数据,但是内容很多。我们只需要上海对应的“城市代码”,那么怎么得到呢?
4. 第四步:关联,正则表达式提取器
所谓关联, 就是第二个Requst, 使用第一个Request中的数据(后置关联)
我们这里,就是需要将城市代码提取出来,给第二个http用,用来获取天气。
操作:右键线程名称——后置处理器——正则表达式提取器,
通过第3步可以看到响应主体内容的格式,我们只要根据格式填写下面的即可。
释:
引用名称:下一个请求要引用的参数名称,如填写title,则可用${title}引用它。
正则表达式:():括起来的部分就是要提取的。
.:匹配任何字符串。
+:一次或多次。
?:不要太贪婪,在找到第一个匹配项后停止。
模板:用$$引用起来,如果在正则表达式中有多个正则表达式,则可以是$2$$3$等等,表示解析到的第几个值给title。如:$1$表示解析到的第1个值
匹配数字:0代表随机取值,1代表全部取值,通常情况下填0
缺省值:如果参数没有取得到值,那默认给一个值让它取。
5. 第五步:创建第二个请求,获取天气
创建第二个http请求,请求信息为 http://www.weather.com.cn/weather2d/${citycode}.html
其中${citycode} 中的数据, 是从第4步正则表达式获取的
此时,再重复第第三步,清空上次结果,再,则可以获取到响应的天气信息,这样的一个计划就完成了。