jmeter视频学习地址:链接:http://pan.baidu.com/s/1mhWFKZe 密码:2n8v
1、如何学好Jmeter:
Jmeter对Web进行性能测试:必须熟练HTTP协议,才能学好Jmeter。 否则很难理解Jmeter中的概念,不熟悉HTTP协议的话,可以参考https://www.cnblogs.com/li0803/archive/2008/11/03/1324746.html
2、下载和运行
官方网站:http://jmeter.apache.org/
解压后,安装步骤参考http://blog.csdn.net/lijingprince9/article/details/7980817
运行 “bin/jmeter.bat”
3、脚本编辑:
(1)、可以通过录制获取:第一种通过badboy模拟用户操作,把录制到的脚本导出,在用jmeter打开就可以了。第二种通过jmeter自带的代理录制器,个人推荐第二种,第一种有时候会出现莫名其妙的报错,以下是第二种录制操作:
第一步:添加线程组:右击"测试计划"→添加→Threads(Users)→线程组
第二步:添加HTTH请求默认值:右击"线程组"→添加→逻辑控制器→录制控制器,目的为了把录制到的脚本放到录制控制器下
第三步:添加HTTP代理服务器,--右击"工作台"→添加→非测试元件→HTTP代理服务器:
目标控制器选择使用录制控制器,HTTPS Domians选择你想要录制网站的域名,注意端口号不是网站的端口号,而是为了和浏览器做代理录制,可以任意输入一个和本机不冲突的端口号
第四步:配置浏览器代理--点击谷歌浏览器--设置--更改代理服务器设置--局域网设置,勾选为LAN使用代理服务器--点击高级把端口号设置成和jmeter代理服务器一样的
第五步:启动HTTP代理服务器,打开要访问的网页,脚本就录制到了
(2)手工编辑:
实际测试的例子
目标: 获取城市的天气数据:
第一步: 发送request 获取城市的城市代号
http://toy1.weather.com.cn/search?cityname=上海
从这个请求的response 中获取到上海的城市代码. 比如:
上海的地区代码是101020100
上海动物园的地区代码是: 10102010016A
第二步: 发送request 到: http://www.weather.com.cn/weather2d/101020100.shtml 可以得到该城市的天气数据
第一步: 新建一个Thread Group
必须新建一个Thread Group, jmeter的所有任务都必须由线程处理,所有任务都必须在线程组下面创建。
第二步:新建一个 HTTP Request
比如我要发送一个Get 方法的http 请求: http://toy1.weather.com.cn/search?cityname=上海
可以按照下图这么填
第三步 添加HTTP Head Manager
选中上一步新建的HTTP request. 右键,新建一个Http Header manager. 添加一个header
第四步: 添加View Results Tree
View Results Tree 是用来看运行的结果的
第五步:运行测试,查看结果
到这里。 我们已经成功运行起来了。
第六步:添加Assertion和Assert Results
选择HTTP Request, 右键 Add-> Assertions -> Response Assertion. 添加 Patterns To Test
然后添加一个Assetion Results 用来查看Assertion执行的结果.
选中Thread Group 右键 Add -> Listener -> Assertion Results.
运行后, 如果HTTP Response中没有包含期待的字符串。 那么test 就会Fail.
第7步: 使用用户自定义变量
我们还可以在Jmeter中定义变量。 比如我定义一个变量叫 city. 使用它的时候用 ${city}
添加一个 User Defined Variables. 选中Thread Group: 右键 Add -> Config Element -> User Defined Variables.
我们添加一个变量: city
然后在Http Request中使用这个变量
第八步:关联
所谓关联, 就是第二个Requst, 使用第一个Request中的数据
我们需要在第一个Http Requst 中新建一个正则表达式,把Response的值提取到变量中,提供给别的Http Request 使用
选择第一个Http Request, 右键 Add -> Post Processors -> Regular Expresstion Extractor
现在新建第二个Http Request, 发送到: http://www.weather.com.cn/weather2d/${citycode}.html
${citycode} 中的数据, 是从Regular Expression Extractor 中取来的
到这, 脚本就全部写好了, 运行下,看下最终结果
场景设计:点击线程组里面设置--线程数代表多少个线程,下面一个参数代表多少时间内启动这些线程,然后设置循环次数
结果报告:--右击HTTP请求--添加--监听器--聚合报告
运行后得到下图结果,
报告参数解释:
Label:每个JMeter的element的Name值。例如HTTP Request的Name
#Samples:发出请求数量。如第三行记录,模拟20个用户,循环100次,所以显示了2000
Average:平均响应时间(单位:)。默认是单个Request的平均响应时间,当使用了Transaction Controller时,也可以以Transaction为单位显示平均响应时间
Median:中位数,也就是50%用户的响应时间
90%Line:90%用户的响应时间
95%Line:95%用户的响应时间
99%Line:99%用户的响应时间
注:为什么要有*%用户响应时间?因为在评估一次测试的结果时,仅仅有平均事物响应时间是不够的。假如有一次测试,总共有100个请求被响应,其中最小响应时间为0.02秒,最大响应时间为110秒,平均事务响应时间为4.7秒,你会不会想到最小和最大响应时间如此大的偏差是否会导致平均值本身并不可信?