记录第一个成功的测试实例,文章有些长,尽力记录的详细,欢迎交流。
问题背景
- 2个并发
- 参数化数据为你要查询的地区,提示至少使用csv data 组件。并能够说明组件中的sharing mode含义和实践举例
- 需要具有判断请求成功的检查点或者断言
- 测试结果图形化展示,或者数据展示
分析准备
(1)进入中国天气网(http://www.weather.com.cn/)
(2)点某个城市进入城市天气界面发现,页面网址为:http://www.weather.com.cn/weather1d/101120101.shtml#search
其中101120101,为城市代码编号(citycode)。
意味着,要查询某个城市(city)的天气,需要先获取该城市的城市代码编号citycode,传到到请求地址
http://www.weather.com.cn/weather1d/${citycode}.shtml#search中进行查询,就可以得到该城市的天气内容了。
一、CSV Data set Config的引用
1.建立一个csv文件,建立一个记事本文件,把后缀.txt改为.csv,打开该文件,编辑需要的数据,保存该文件。
2.测试计划,右键添加CSV Data set Config, 点击浏览添加刚才的.csv文件,填写好其他配置(如图),线程共享模式(sharing mode)选择当前线程组,防止影响其他线程。
(切换语言为汉语 参考2-1)
CSV页面
1、名称:标识,建议设置为该组件是提供什么功能2、注释:备注信息
3、Configure the CSV Data Source
(1)Filename:文件路径(包括目录和文件名)
(2)File encoding:文件编码,编码方式utf-8是为了防止存在中文时乱码,我们这个为城市代码提取不要设置为UTF-8,如图设置就可以
(3)Varale Names(Comma-delimited):设置变量名,供其他功能调用。如果存在多个变量 时,用,隔开
(4)Delimiter(use “\t“ for tab):分隔符(用“\t“ 代替制表符),是指在提取有多个参数时,在文件中以那个符号为分界点,进行提取(比如:数据为abc;123;test-----在提取时,需要该选项设置为;),我们用的.CSV文件,分隔符为,
(5)Recycle on EOF ?:是否遇到文件结束符再次循环?设置为True,在循环数超过数据时,会再次从第一条开始读取;设置为False,在读取到最后一条后,不再从第一条开始读取数据;
(6)Stop thread on EOF?:是否遇到文件结束符停止线程?是否在读取完最后一条数据后,停止线程;
(7)Sharing mode:线程共享模式。共享方式;一般使用默认就行(所有线程共享),可根据实际需求修改
--------------------注意:在配置变量和分隔符时一定要注意用英文模式下的符号;CSV文件中的数据分割时,也注意这个问题。
- csv使用本来是要放在文章最后边,但是为了照顾中间的验证过程,后期放到了最前边,所以语言切换在第二章,且后续的图片中有的没有CSV,CSV也可以在一下两大块进行完之后导入。
二、获取城市代码编号
1.进入jmeter 更改语言为汉语(习惯了英文版的可以不用更改)
2.给测试计划(test plan)右键建立线程组(如图),并命名为 天气网 CSV压力测试(名字随意)。设置线程数和循环次数。
3.在天气网 CSV压力测试右键添加HTTP请求,命名为“获取城市代码”,填写服务器地址,和http请求
服务器:toy1.weather.com.cn 这个网站用名字来解析城市代码,中英文都支持
路径:/search?cityname=${city}
当city为“济南”时
地址请求之后为 toy1.weather.com.cn/search?cityname=济南
4.在获取城市代码 右键添加HTTP 信息头管理器(操作如图),然后添加名称“referer”和值 http://www.weather.com.cn
5.在获取城市代码 右键添加正则表达式 提取器(操作如图),可更名为 提取天气代码 (我懒得改了,这样比较清楚 是添加了个什么。)
引用名称:citycode
正则表达式:(\d{9})~
模板:1
匹配数字:1,如果是0,就是随机获取,那么和city就有可能对不上
正则表达式提取器说明:
Apply to:应用范围
要检查的响应字段:样本数据源。
引用名称:其他地方引用时的变量名称,我这里写的phone,可自定义设置,引用方法:${引用名称}
正则表达式:,()括号里为你要获取的的值,\d匹配数字,{n}为重复N次,0-9的数字,为0-9次,此处表达式为重复9次。
模板:用于从找到的匹配项创建字符串的模板。这是一个带有特殊元素的任意字符串,用于引用正则表达式中的组。引用组的语法是:’ $ 1 $
‘引用组1,’ $ 2 $ '引用组2,等等。$ 0 $引用整个表达式匹配的内容。匹配数字:正则表达式匹配数据的所有结果可以看做一个数组,匹配数字即可看做是数组的第几个元素。-1表示全部,0随机,1第一个,2第二个,以此类推。若只要获取到匹配的第一个值,则填写1
缺省值:匹配失败时的默认值。可以不写。若需用于后续逻辑判断,可简单写为 ERROR。
6.添加一个后置处理器中的:BeanShell PostProcessor ,用来处理响应结果的中文乱码显示(没有这行的话,话在接下来的debug取样其中查看当前阶段的 结果树,会有一些乱码);
脚本内容:prev.setDataEncoding("utf-8");
7.添加 debug取样器,添加查看结果树,用来调试,查看正则提取的城市代码编码结果。
8.运行,查看当前城市代码提取结果
结果,获取了citycode 相关的有4个,后面这几个都可以用来被调用,用citycode。
三、获取城市天气
1.添加第二个HTTP请求( HTTP Sampler),命名为 获取城市天气信息,设置基本内容
服务器名称或IP:www.weather.com.cn
get方式,路径 :/weather1d/${citycode}.shtml
例如 city为济南,获取的citycode为101120101,请求为:http://www.weather.com.cn/weather1d/101120101.shtml
2.获取城市天气信息,右键添加 结果树,参考 2-7 的添加截图。
3.运行 查看,城市天气信息获取结果。
附录
可根据自己需要,添加需要的监听器
汇总报告
聚合报告:
表格查看结果:
写在最后
中间由于切换过文件夹,顶部线程组名称改过一次,天气网查询 和天气网 CSV压力测试是同一个线程组,只是改过名字。
CSV可以最后做,只是初学者有时候需要边做边验证,所以把csv的使用放在最开始了。
以上为结果,为个人学习过程,欢迎交流