测试一个学习平台项目时,需要验证用户账号是否可以正常登录。使用jmeter工具测试,fiddler辅助查看请求和响应消息。
开始的想法很简单,在登录页面查看到,点击登录按键会出发一个POST请求,想通过jmeter模拟post请求,以用户名和密码为参数,测试是否能返回登录后的界面。
客户端浏览器 服务器
发POST请求————>
<————回登录响应
jmeter添加HTTP请求,配置服务器地址、路径、用户名密码参数,设置post方式:
请求结果失败,查看消息显示,浏览器不停的在登录页面链接和登录请求链接间重定向:
想到可能是session参数没有加对,因为打开登录页时,服务器返回的set-cookie中带了PHPSESSID的值,
等到发送post请求登录时,请求头中带的cookie参数中有PHPSESSID等之前set-cookie的值。
我复制浏览器登录时,请求头中的cookie值,在jmeter中设置header参数,后能够正常登录一次。但是如果更换用户,或者浏览器退出登录,jmeter中设置的cookie参数PHPSESSID等就失效了。还是会登录失败。
这样无法进行批量的账号登录测试。当然jmeter提供了响应的功能,不必每次手动配置cookie,只需要添加一个HTTP cookie manager就行了。
我在测试线程中增加一个打开登录页面的HTTP请求,然后在执行login请求,这个过程与学员实际操作一致。最终测试结果也与人工测试结果一致。
消息交互流程如下:
用户 | 客户端浏览器 服务器
|
打开登录页 | 发GET请求 ————>
| 回登录页响应的同时,
| <———— 在返回的set-cookie参数,带PHPSESSID
填写用户名密码 | 发POST请求
并点击登录按键 | 同时请求头cookie
参数中带之前
收到的PHPSESSID——>
返回302重定向到登录后地址,
<———— 在返回的set-cookie参数中带token等
发请求打开
302重定向提供的地址
同时请求头cookie中
参数中带之前
PHPSESSID、token等——>
<———— 最终返回登录后的学习列表页面