首先必须抓取网站登陆时所发送的Post参数,以登陆知乎zhihu为例
用Chrome打开 https://www.zhihu.com/,点击登录进入登录页面,保持该页面不动(下图左边)。随后进入Chrome的开发者模式,选择Network视图(下图右边) 。最好勾上Preserve Log的选项 ,以免在提交登录请求的时候由于页面刷新太快漏掉了请求。
输入用户名和密码以后,右边的调试窗口会出现大量的请求列表。找到名字为email的请求,看到它是一个POST请求
用户名和密码在最下面的Form Data中
这就是我们需要向服务器POST的信息。
打开JMeter,添加以下的元素
分别是HTTP请求默认值、HTTP Cookie 管理器、登录请求页面URL、登录后的首页
注意由于知乎使用的是HTTPS协议,所以在HTTP请求默认值页面,需要额外的做一些设置:端口号是443,协议是https
HTTP请求中的登录页面需要把之前抓到的POST请求参数配置进去:密码、字符集设置、是否记住用户、邮箱。以及登录请求的URL(由于服务器名称在HTTP请求默认值中已经设置好了,所以这里只需要填写路径部分 /login/email)
登录成功后的页面https://www.zhihu.com/#signin,应该会有我的草稿、我的收藏、我关注的问题 这些标签,如果在返回的响应种看到了这些文本,则测试是成功的
所以在登录后的首页里面添加一个断言,检查是否包含文本“我的草稿”来判断登录是否成功
点击JMeter运行按钮开始执行,可以看到返回结果里面已经有了“我的草稿”的文本,说明登录成功
截止目前,我们已经能成功的登录知乎系统,并返回结果。但大部分性能测试需求只需要测试登录后用户所能操作的页面,并不需要测试用户登录页面。而我们目前的方案如果要测试这些页面,必须连同登录页面一起测试。JMeter提供了了一个很好的逻辑控制器来处理这样的场景:仅一次控制器
将登录操作放到该逻辑控制下,那么登录操作就只会执行一次
然后在你的线程组里面设置所需要的循环次数,执行结果(这里设置了10次),可以看到返回了10的成功结果
TIPS:在测试过程中发现,如果在短时间内重复登录多次的话,知乎Zhihu会出现人工输入的验证码,JMeter无法处理这样的情况,只能等一段时间验证码机制失效后再重新试。
文中所列的JMeter脚本文件可以在这里下载(用户名和密码需要根据自己的情况修改一下)
http://download.csdn.net/detail/yangqingtao/9546161