具备的知识和技能
在上一节内容里我们以用户维度分析了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;
}
项目实战系列的文章持续更新中,请小伙伴们多分享和评论,把知识传递下去!!!
领取专属 10元无门槛券
私享最新 技术干货