用户注册脚本开发技术揭秘

具备的知识和技能

在上一节内容里我们以用户维度分析了Discuz论坛使用频繁的业务场景,接下来就进入到我们的脚本开发的实战了,小伙伴很激动呢?

需要具备的技能:

进入脚本开发实战前,需要具备以下技能,如果还不具备,请到《Jmeter实战系列》中去学习掌握

(1) 常用函数的应用

(2) 数据库的连接及值引用

(3) 正则表达式值提取及引用

(4) HTTP协议的理解及使用

(5) 断言的应用

(6) 组件的执行顺序

(7) 测试计划基本要素

(8) Discuz论坛数据库表结构的熟悉,参考《Discuz论坛常用数据库表》

需要提前准备的环境及工具

(1) Jmeter环境的搭建(请参考《Jmeter实战系列》里环境搭建内容)

(2) 抓包工具的安装(推荐使用:Fiddler),请自行下载安装

(3) 正则表达式提取工具(推荐使用:正则表达式测试器 deerchao.net)

脚本开发流程

在掌握以上的技能和搭建好环境,安装好所需的工具后就进入到用户注册脚本的开发工作了

注册用户脚本开发流程如下:

数据初始化及配置相关信息

第一步:新建线程组(略)

第二步:数据初始化及配置相关信息

(1) HTTP Cookie 管理器

HTTP请求默认值(填写共享的ip地址及端口信息)

示例里只默认填写了IP地址

(1) 用户定义的变量(定义用户名,密码,邮箱等变量取值规则)

示例里:把用户名,密码,邮箱。定义了3个变量的取值规则,关于这部分内容有疑问的小伙伴,请参考之前分享的内容

(1) JDBC Connection Configuration(配置数据库连接的信息)

关于这部分内容有疑问的小伙伴,请参考之前分享的内容,这里不在做介绍,配置完成效果如下

实现用户注册(核心内容)

提取formhash值,利用正则表达式提取formhash,在注册请求请求参数里用到该值,实现业务逻辑的关联。并写断言判断响应是否正确,最后效果图如下

用户名合法性校验(可写可不写)初学者建议写,这样逻辑衔接没有遗漏,也方便找问题,效果图如下

邮箱合法性校验(可写可不写)

注册成功场景(这个非常重要,是核心内容)

这里的formhash引用了之前正则表达式提取的值,用户名和密码,邮箱都有引用用户定义变量里定义的值,实现每次变量取值不相同,这样我们就可以重复的提交注册请求,这也是实现自动化的价值所在。不比每次都手动修改

以上请求如果我们不做调整,会发现用户注册失败,需要对请求的参数调整,即需要调整请求入参

同时,注册请求需要加固定定时器,因为提交请求需要等待几秒才得到响应,否则我们的断言会失败,最终效果图如下

数据库查询校验

做过测试的小伙伴都清楚,任何业务提交成功后,预期结果通常会从几个方面进行校验

(1. 系统校验,看是否能登录 2.数据库校验,看相应的表是否存在数据 3.系统日志,日志里是否打印业务的信息)

下面我们从数据库的维度来校验我们的用户注册信息

直接查询我们的用户注册表,然后断言引用查询返回值做判断

到此我们注册脚本的开发工作就完成了,最终的效果图如下

运行我们的脚本

从运行结果来,脚本执行全部通过,绿色代表成功,红色代表失败,然后我们用该用户登录论坛验证是否正常登录

登录成功,到此用户注册的整个脚本就完成了

注意事项

我们在提交请求时可能会遇到提示有非法字符

解决方法如下:

(1) 在xampp的路径下找到这个文件:

\Xampp\htdocs\upload\source\class\discuz

(discuz_application.php)

修改内容,参考如下

找到文件里的这段内容:

private function _xss_check() {

static $check = array('"', '>', '

if(isset($_GET['formhash']) && $_GET['formhash'] !== formhash()) {

system_error('request_tainting');

}

if($_SERVER['REQUEST_METHOD'] == 'GET' ) {

$temp = $_SERVER['REQUEST_URI'];

} elseif(empty ($_GET['formhash'])) {

$temp = $_SERVER['REQUEST_URI'].file_get_contents('php://input');

} else {

$temp = '';

}

if(!empty($temp)) {

$temp = strtoupper(urldecode(urldecode($temp)));

foreach ($check as $str) {

if(strpos($temp, $str) !== false) {

system_error('request_tainting');

}

}

}

return true;

将上面的整段内容修改为:

private function _xss_check() {

$temp = strtoupper(urldecode(urldecode($_SERVER['REQUEST_URI'])));

if(strpos($temp, '

system_error('request_tainting');

}

return true;

}

项目实战系列的文章持续更新中,请小伙伴们多分享和评论,把知识传递下去!!!

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180203G08O4000?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券