Jmeter+Jforum脚本开发
搭建好的测试环境(首页)示意图:模块是搭建好环境后手动添加
完成的脚本示意图:
脚本开发
流程:首页→登录→选择论坛版块→选择帖子→回复帖子
1、添加线程组
添加组件:
HTTP Cookie Manager(cookie管理)、User Defined Variables(用户自定义变量)、HTTP Header Manager(头信息管理)
User Defined Variables:添加下图的变量(txt1和txt2是后面提交回复时用到的变量)
HTTP Header Manager:所添加的变量可以通过badboy录制获得,也可以手动添加
2、首页
添加HTTP请求采样器,进入首页
3、登录
通过fiddler抓包工具发现,在登录时采用的POST请求,需要提交参数:module、action、
OWASP_CSRFTOKEN(固定值)、username、password、login。
登录成功后会有一个重定向请求,通过抓包可以发现重定向到了: http://localhost:8080/jforum-2.5.0/forums/list.page
。此处添加了一个IF控制器,来判断是否取到论坛版块moduleId;如果取到moduleId继续向下执行;如果没有取到modulId,则不进入论坛版块,即停止后续操作,进行下一次迭代。
4、选择论坛模块
任意选择一个首页帖子列表的链接,通过Chrome浏览器的开发则工具或者fiddler分析请求链接及传送的表单数据。从开发者工具可以看到帖子列表的链接是 http://localhost:8080/jforum-2.5.0/forums/show/2.page,其中2是版块在数据库中的ID。
此处ID是通过在上一步添加后置处理器:正则表达式来获取的;通过开发者工具分析,我们要获取的版块ID是从href="/jforum-2.5.0/forums/show/2.page中取得 .page前面的数字 2,这个数字也就时要关联的数字。正则表达式如图所示。
5、选择一个主题
在版块的列表里面任意选择一个主题链接,通过Chrome浏览器的开发则工具或者fiddler分析请求链接及传送的表单数据。从开发者工具可以看到帖子列表的链接是 http://localhost:8080/jforum-2.5.0/posts/list/2.page,其中2是主题在数据库中的ID。
/list/2.page中.page前面的数字就是主题的 id,也是需要关联的数字,主题的id是从上一步中的href="/jforum-2.5.0/posts/list/3.page获得的,正则匹配规则如图所示。
6、回帖
进入回帖页面,同样使用Chrome浏览器可以看出请求的链接: http://localhost:8080/jforum-2.5.0/posts/reply/0/2.page。
reply/0/2.page中2.page前面的2就是主题列表中任意主题的id,id是需要关联(参数化)的数字,该id的值与step5中的id值是同一个id值(即是相同的)。
7、回帖操作(输入内容,点击“发送”确认回复)
输入回复内容后,点击“发送”确认回复后,通过Chrome分析,可以看到是Post请求,并且重定向到 http://localhost:8080/jforum-2.5.0/posts/list/0/2.page#p39?OWASP_CSRFTOKEN=ALRA-H3J9-BL3Z-XQJB-U0KT-UX5W-3GHG-NTRF页面,这个页面就是显示回帖内容的链接。
从Chrome中截取到的回帖表单内容可以看到Post请求的参数表单(图二使用fiddler抓包,看起来更直观)。将表单中的内容填写到Http请求的Parameters中即可。
Http请求的Parameters填写的内容如图所示:
forum_id、subject、OWASP_CSRFTOKEN(该参数是确认回复后,重定向页面所带的参数)需要参数化,这个三个参数需要从/reply/0/2.page中去获取:
回复主题 APP测试中有一个空格,不能直接匹配一次,需要匹配两次,得到两个值,在Parameters中把两个值按照抓包得出的规则用冒号“:”拼接起来即可
OWASP_CSRFTOKEN这个参数是回复成功后,重定向页面需要的参数,是动态变化的,每次回复成功后会生成一个值。
topic_id的值与step5中的id是一致的,所以直接调用step5中正则表达式取得的值即可。
helpbox的值是固定的,txt1、txt2是前面用户自定义中直接定义好的,直接调过来用即可。
message表示回帖的内容,此处是使用Jmeter自带的函数__RandomString生成的随机字符串
最后,我们需要验证是否回帖成功,从前面抓包分析可知,恢复成功后会重定向大页面 http://localhost:8080/jforum-2.5.0/posts/list/0/2.page#p39?OWASP_CSRFTOKEN=ALRA-H3J9-BL3Z-XQJB-U0KT-UX5W-3GHG-NTRF,我们可以在最后一步来添加一个HTTP请求来访问这个链接,这个链接可以从上一步(即是回帖那一步)通过正则表达式来获取,若访问成功则表示回帖成功。
Note:/posts/list/0/2中 /0表示回复列表页面最后一条回复排序的数字,当回复比较多,有翻页时,该数字大于0; /2 表示模块id
到此,我们的登录在回帖的脚本开发完成(* ̄︶ ̄)。