利用Jmeter对简易投票系统进行刷票的实践

来源:互联网 发布:空中救援队 知乎 编辑:程序博客网 时间:2024/06/02 06:38

背景介绍

一朋友朋友圈分享出一个链接,请求大家帮忙对其表弟参加的一个作文比赛进行投票,按照惯例,要先注册再投票,且同一个ID每日只能投票一次。

探索发现

一开始就想到能不能刷票,后来发现该网站对注册账号几乎除了重复性校验外没有其他任何校验,于是就可以轻松开始刷票了。
使用工具:Jmeter
步骤思路
1. 注册
2. 登录
3. 投票

涉及知识点
1. Jmeter变量定义及函数使用
2. 正则表达式

实现

先手动执行一次投票流程,将用到的请求的相关信息观察一遍(主要就是请求数据以及相应数据)
通过Chrome控制台可以轻松看到注册和登录请求信息如下
1.注册请求 users.json
这里写图片描述
2.登录请求 sign_in.json
这里写图片描述
3.投票请求 vote.json
这里写图片描述

构造请求没有什么复杂的,提一下里面用到的函数方法:
1. 在构造注册请求时,为实现手机号的随机,添加了随机变量。
注意:Options中的Per Thread的设置是用来设定该变量是否线程共享,如果设置为False,意味着在同一次执行中涉及多出调用该变量时,该随机变量只随机一次,即前后一致;
这里写图片描述
2. 三个请求中都有使用到当前时间time,这个可以用Jmeter中的time函数来实现${__time()}
3. 获取上一个请求中的返回数据。投票请求中需要用到一个参数token,观察发现该token在登陆请求中会作为response的内容返回。这里可以采用后置处理器中的正则表达提取器来实现。
登陆请求返回的数据是:

{"id":420239,"email":"18615051081@ljmob.com","user_name":"hello","user_avatar":"/avatar.png","roles":"visitor","token":"TxCxsfz8xgR3LfWPZYsY","team_class":[]}

这里构造"token":"(.+?)",*来进行正则匹配,其中括号内为正则匹配表达式。
依次说明下正则提取器中每个配置项的含义:
- Reference Name: 在测试计划中用来被引用的变量名${}
- Template: 模板是指向群组的指针。
例如:针对Hello World使用Hello (.+)$来匹配
$0$ 指向完全匹配的表达式Hello World
$1$ 指向World
- Match No. 用来表明匹配第几个,0的话表示随机
- Default Value 若没匹配上,将会使用该默认值
这里写图片描述

总结

通过生活中的小需求来解决问题,以点到面,在用中学,记忆更深刻。最近有一个很大的感悟就是:用进废退!

0 0
原创粉丝点击