“禅道”是一个国产的开源项目管理软件,支持需求管理、任务管理、缺陷管理和测试用例管理。本章将综合之前所学的知识,包括HTTP 协议、Fiddler 抓包和 JMeter 发包,来完成禅道系统的自动化测试。
本章涉及自动化登录禅道、自动开Bug、自动关Bug, 同时讲述 JMeter中HTTP Cookie 管理器和HTTP请求默认值的用法。
1.1
HTTP Cookie 管理器
前面的章节中解释过,HTTP 协议本身是无状态的,为了维持登录的状态,我们引入了Cookie机制。
Cookie 的流程如下。
第一步,浏览器发送第一个HTTP请求给Web 服务器,里面包含用户名和密码。Web服务器验证用户名和密码后,把登录相关的Cookie 发送给浏览器客户端。
第二步,浏览器客户端再一次访问的时候,会带上Cookie.这样才处于登录状态,否则会被服务器跳转到登录页面。
现在用JMeter来模拟整个登录过程,那么我们需要在第一步后,用正则表达式提取器把登录相关的 Cookie 提取出来,然后把登录的 Cookie 插入后续的HTTP请求中形成关联。
这里如果用正则表达式来做的话会稍显麻烦。
JMeter中的HTTP Cookie 管理器可以自动管理Cookie.有了它,我们就不需要去处理Cookie 了,HTTP Cookie 管理器会自动存储和发送Cookie.
如果HTTP响应中包含 Cookie, 那么 HTTP Cookie 管理器会自动保存这些 Cookie.用户再次访问该站点时,HTTP请求会自动使这些Cookie.一个线程组有自己存储 Cookie 的区域,并且一个线程组只能添加一个HTTP Cookie 管理器。
选择线程组,用鼠标右键单击添加-> 配置元件-》HTTP Cookie 管理器,HTTP Cookie 管理器里面不需要修改任何字段,如图1-1所示。
▲图1-1 HTTP Cookie 管理器
1.2
HTTP请求默认值
我们在 Jmeter 里一般都会添加多个HTTP 请求,这些HTTP 请求的HOST、协议和端口都是一样的。我们可以添加一个HTTP 请求默认值,相当于一个模板。在HTTP请求默认值中设置HOST、协议、URL、端口等内容,这样后续的HTTP请求就会继承HTTP 请求默认值中的内容,如图1-2所示。
▲图1-2 HTTP 请求默认值
1.3
禅道介绍和部署
禅道是一个开源的项目管理系统,集产品管理、项目管理、Bug 管理、文档管理、组织管理和测试用例管理于一体,是一款功能完备的项目管理软件,完美地覆盖了项目管理的核心流程。很多创业公司都使用禅道。部署禅道非常简单,强烈建议读者自行搭建一个禅道系统,大概10分钟就能搭建好。不想自己搭建的话就用我提供的禅道。
我部署的禅道地址是 http://49.234.93.93:8081/zentao/, 用户名是admin, 密码是password.
现在用 JMeter 来实现禅道系统的自动登录,新建一个Bug, 把这个Bug修改为“已修复”, 再把这个Bug修改为“已关闭”。
1.4
禅道操作和抓包分析
我们一边用浏览器来手动操作,一边用 Fiddler 抓包分析,一边用 JMeter 来实现,以此逐步实现整个流程的自动化。
1. 4. 1 第1步,自动登录禅道
具体的操作步骤如下。
(1) 启动Fiddler, 启动过滤。过滤掉一些不相干的HTTP请求,能让我们快速找到我们需要的 HTTP请求。
在Fiddler中的 Filter 选项卡中激活 Filter, 并且在 Response Type and size 中选中“Show only HTML”,如图1-3所示。
▲图1-3 Fiddler启动过滤功能
(2)启动Fiddler,打开浏览器,输入http://49.234.93.93:8081/zentao/,然后输入用户名和密码,单击“登录”。抓包如图1-4所示。
▲图1-4 登录抓包
从抓包可以看到,登录用的是 POST方法,但是密码是加密后发送给服务器的,Body中的数据是 account=book&password=5f4dcc3b5aa765d61d8327deb882cf99。
(3) 确认密码是怎么被加密的。该密码估计是用 JavaScript 代码加密的。我们可以查一下 JavaScript代码。打开浏览器的开发工具,查找JS代码。不出所料,我们发现了一个叫MD5的JS文件,如图1-5所示。
▲图1-5 分析密码的加密方式
为了确定该密码是被 MD5 加密的,我们进行一下测试。打开 MD5的在线网站,网址是 http: //www.md5.cz/, 测试结果如图 1-6所示。现在可以确定密码是用MD5加密的。
▲图1-6 密码用MD5加密的
如何实现这个密码的加密呢?有两种方法。
第一种方法,先发送一个请求给 http: //www.md5.cz/, 在HTTP 响应中,我们用正则表达式把加密后的密码提取出来。这个方法的缺点是:如果网站不可用了,我们的脚本就不能工作了。
第二种方法,用 BeanShell 的方法,用Java代码来进行MD5加密,把一个Java的jar包引入进来。
我们采用第一种方法加密。如果读者想采用第二种方法,可以参考上一章中 BeanShell的用法。
(4) 启动JMeter, 新建一个线程组,新建一个用户自定义的变量。添加2个变量:一个叫 username, 一个叫 password, 如图1-7所示。
▲图1-7 JMeter添加变量
(5)添加一个HTTP请求,命名为getmd5,如图1-8所示。
▲图1-8 为getmd5请求
(6)在getmd5 HTTP请求下面新建一个正则表达式提取器,填写的内容如图1-9所示。
▲图1-9正则表达式提取加密后的密码
通过正则表达式,我们把加密后的密码存到变量password2 中。
(7) 选择线程组,添加一个HTTP Cookie 管理器,用来自动管理Cookie。
(8) 选择线程组,添加一个HTTP请求默认值,填写的内容如图1-10所示。
▲图1-10 添加HTTP请求默认值
(9)选择线程组,添加一个HTTP 请求,命名为login, 这个HTTP请求就是用来登录的。我们可以分析图1-11, 这是一个POST请求,URL 地址是/zentao/user-login.html, Body的数据应该是 account=$ {username} &password=$ {password2} 。
▲图1-11 添加登录的HTTP请求
(10) 添加“察看结果树”, 并且运行,保存脚本。查看结果,如图1-12所示。
▲图1-12 添加察看结果树
到这一步,我们的登录终于做好了,可以看到我们的密码是用MD5加密后发送的。
1. 4. 2 第2步,创建一个新的Bug
具体操作步骤如下。
(1)继续在浏览器中操作,在禅道中单击“测试”, 单击“Bug”, 在右边单击“新建一个Bug”,会弹出一个Bug的表单。在表单中填好一些必须字段,如图1-13所示。
▲图1-13 禅道中新建一个Bug
(2)单击保存,新建一个Bug的HTTP请求就被Fiddler抓到了,如图1-14所示。
▲图1-14 新建Bug抓包
我们用 JMeter也模拟出一个一模一样的HTTP请求。
添加一个新的HTTP请求,命名为 CreateBug, 路径和 Body 的数据我们都从 Fiddler 里面复制过来,如图1-15所示。
▲图1-15 JMeter实现新建Bug
在CreateBug中新建一个HTTP信息头管理器,把Header都从Fiddler中复制过来,记得一定要删除Host和Cookie这2个Header,如图1-16所示。
▲图1-16 JMeter实现新建Bug添加Header
1. 4. 3 第3步,找到刚刚新建 Bug的ID
先在 JMeter中把上一步添加的 CreateBug 请求禁用,以防止创建太多的 Bug。
要修改这个Bug, 我们需要知道刚才所创建的Bug的ID是多少。
我们回到Bug 列表的页面,可以看到,根据Bug的标题,可以从这个页面获取到Bug的ID, 如图1-17所示。
▲图1-17 禅道中新建一个Bug
获取Bug列表的HTTP请求用的GET方法。在JMeter中,新建一个HTTP请求,将其命名为GetBugList,如图1-18所示。
▲图1-18 JMeter获取Bug列表页面
在 GetBugList 请求下面,添加一个正则表达式用于提取Bug的ID, 如图1-19所示。通过正则表达式,我们可以从 GetBugList的 HTTP 响应中把Bug的ID的值提取出来,存到变量 bugid 中。
▲图1-19 提取Bug的ID
1.4.4 第4步,修改Bug状态为“已解决”
在浏览器中把Bug的状态修改为“已解决”,浏览器的操作如图1-20所示。
▲图1-20 Bug修改为“已解决”
Fiddler抓包如图1-21所示。
▲图1-21 Bug修改时 Fiddler 抓包
在 JMeter 中新建一个HTTP 请求,命名为 EditBug。按照上面抓到的包,把URL和body 数据都填好,如图1-22所示。注意Bug的ID是动态变化的,URL中我们需要使用${bugid} 。
▲图1-22 JMeter 实现修改Bug
在EditBug这个HTTP请求下面新建一个HTTP信息头管理器,从Fiddler中把Header复制过来,粘贴到HTTP信息头管理器中。记得一定要删除Host和Cookie这2个Header。
1. 4. 5 第5步,关闭 Bug
同样的道理,在浏览器上操作,把Bug关闭,Fiddler 抓包,然后用 JMeter 实现。如图1-23所示。
▲图1-23 JMeter 实现关闭 Bug
1. 4. 6 总结
整个流程就做完了,我们可以用 JMeter 实现禅道的自动登录,自动开Bug, 自动修改Bug的状态并关闭Bug。
同样的道理,我们可以用此方法做接口的自动化测试。除了 JMeter 之外,还可以使用Postman来完成。
https://u.wechat.com/MKJanwpfC9HDXaD19lB-Xz8 (二维码自动识别)