测试Http协议的web应用时我们需要了解http协议。
*Test plan:
测试计划,jmeter测试脚本根节点,每一个测试脚本就是一个测试计划,名称可以自定义。
@设置用户全局变量,在“用户定义的变量”中定义
@独立运行每个线程组,如果一个测试计划中有多个线程组,设置此项可以生效。
@运行的线程本次迭代完成后关闭Run teardown Thread Groups after shutdown od main threads
@函数测试模式,在调试脚本的过程中我们可能需要获取服务器返回的详细信息就可以选择此项,此项记录较多的数据会影响测试效率,所以在执行性能测试时关闭此项。
@把测试需要依赖的jar包或包所在的目录加入类路径。Add directory or jar to classpath
*ThreadGroup 线程组,模拟虚拟用户的发起点,在此可以设置线程数。
*Http Cookie Manage:访问web页面使会记录Cookie信息,选择默认即可
*User defined variables:用户自定义的变量。
*Http Header Manager:管理Http头信息。可以找到User-Agent Connection content-type cookie location302重定向地址等信息。
*Step1实际上是一个循环控制器,在逻辑控制器下,可以设置循环次数
整体的一个小例子:
第一步录制,可以用badboy工具录制,或者是jmeter配置代理进行录制
第二步回放用badboy录制好的脚本,加入一个监听器:查看结果树,查看服务器返回信息;
结果回放不成功,不能新增内容。登录请求设置和发送新内容请求更改为“跟随重定向“,沿用前面的jsessionid,不用新生成一个。
第三步再次回放,成功。但是新帖乱码。在Http请求中编码处填上UTF-8
第四步用户可以在任何板块发布内容。首先获取到板块的链接,然后再发帖。jmeter通过后置处理器(此场景需要用到正则表达式提取器)完成关联,获取到板块链接。
...
第五步性能测试,需要并发多个用户,模拟多个不同账号,需要参数化,配置元件。
此处选择CSV Data Set Config:Filename文件本地地址,参数名称逗号隔开,参数文件格式为:username,password
这些设置好之后,在Http请求中也要更改变量名,登录名${login}密码是${pwd}与上面名称一样就好、
第六步发送内容不希望每次发送同样信息,希望内容随机生成,需要参数化内容,用到函数助手。此处选择_RandomString,随机生成字符串。
第七步测试地址可能多个,访问地址参数化。Http请求中服务器名称或IP,甚至是端口号。
在用户自定义变量中定义URL、port变量输入相应的IP地址、端口号;然后引用${URL}
第八步优化,访问地址毕竟不变,如果是手动开发脚本,每个请求都要写一遍,这样工作量太大,用到Http请求默认值。填上服务器名称、端口、编码、协议就好
第九步验证结果正确性。有可能出现失败的情况,通过断言组件验证测试结果。
此处用到响应断言,对服务器的响应数据进行规制匹配。此处判断登录是否成功,首先要找到需要匹配的内容:用户名。在要测试的模式中输入${username}
第十步把多个操作统计成一个事务,每个事务对应的是我们的请求。(性能测试的结果我们会关注TPS,代表的是每秒事务数),用到逻辑控制器中的事务控制器来完成。
第十一步让虚拟用户同一时刻发送请求,用到集合点定时器。
此处选择同步定时器,保证取样器在同一时刻向服务器发起负载,也可设置同步线程数量。
以上就完成了用户登录发送内容的模拟行为。
最终修改Jmeter元件运行顺序
脚本显示的树形结构,先执行根节点再执行子节点
重点小结
*Jmeter的代理录制方式
*关联
*参数化,把固定的数据动态化
*检查点,响应断言也支持正则表达式何变量,方便匹配服务器返回的内容
*事务,事务控制器可以帮我们把一堆请求归到一个大的事务中区,便于报告分析
*集合点,更真实的模拟用户负载
*Jmeter元件运行顺序
网友评论