顾翔老师开发的bugreport2script开源了,希望大家多提建议。文件在https://github.com/xianggu625/bug2testscript,
主文件是:zentao.py 。bugreport是禅道,script是python3+selenium 3,按照规则在禅道上书写的bugreport可由zentao.py程序生成py测试脚本。
第一阶段:原始阶段
接口测试在DevOps推广之中的地位得到了显著的提高,对于接口测试相对于GUI自动化测试、基于单元测试的自动化测试脱颖而出,以前测试金字塔模型(图一)逐渐被纺锤模型所取代。
图一 金字塔模型
图二 纺锤模型
当然JMeter、Postman也可以进行接口测试,但是它由于代码不可复用,越来越被类似于基于requests类Python代码取代了。基于requests类Python代码使接口测试变得非常的简单,我们只要组合get或者post参数,通过requests类的post或者get方法调用返回数据就可以实现,下面的代码展示了一个网站的登录功能的最原始接口测试代码。
在这里分别验证了错误用户名,正确密码、正确用户名,错误密码、错误用户名,错误密码、正确用户名,正确密码四种情况。
第二阶段:CSRF Token防护阶段
为了防止CSRF的攻击,现在几乎所有的网站在POST请求的时候都加上了csrftoken,系统通过post参数中的一个hidden元素获取一个随机的由100个字符组成的串,在发送的时候与某个cookie值进行比较,如果二者相同,则进入下面的操作,否则这给出403异常页面。为了对这类产品进行接口测试,可以阅读源代码获得hidden元素名,通过抓包获得cookie名,然后通过post的cookie选项将hidden元素名对应的值和cookie名对应的值保持一致,即可实现。
在这里,仅展示输入正确的用户名和正确的密码用例。通过语句payload={"username":self.correctusername,"password":self.correctpassword,"csrfmiddlewaretoken":self.token}设置hidden参数的值为self.token,通过data = requests.post(self.url,data=payload,cookies=self.cookie)(其中self.cookie在setUp中设置为self.cookie = {"csrftoken":self.token})也设置为self.token值。
第三阶段:利用Excel封装数据,基于数据驱动的自动化测试。
数据驱动是自动化测试的主流,在刚才的代码中测试数据是与测试代码在一起的,在这里我们通过excel表来维护数据,从而得到测试数据与测试代码的分离。建立一个excel表,内容如图三所示。
图三 用Excel管理的数据
在这里cindy/123456是数据库中存在的,而jerry/654321是数据库中不存在的。建立Util.py文件把对Excel表的操作封装在里面。代码如下。
测试代码变为。
调用get_user_data()方法以此得到测试数据,下面的测试实现同第二阶段。
第四阶段:通过测试数据优化测试代码。
(这部分是本文的关键),先来看一下图四。
图四 关于登录操作测试脚本的测试数据问题
测试数据的问题:比如测试错误用户名,错误密码的时候,比如做ET的时候通过手工的方式已经有了这个用户名和错误密码的用户,再比如正确错误用户名,正确密码的时候,比如做ET的时候通过手工的方式已经将这条记录删除。
我们现在考虑测试数据的问题,首先会考虑是否可以讲注册与登录一起测试,即先测试注册接口,然后用注册的信息进行登录,注册完毕直接删除数据库。这又产生两个问题:
然后还可以考虑一种方法,在登录的时候进行检查,测试一个正常测试登录的测试数据,在登录之前先到数据库中检查,如果这个用户数据不存在,通过测试脚本把这条数据写入数据库中(写入之后给出日志信息,便于后续数据维护),然后在进行测试验证;测试一个异常登录的测试数据,在登录之前也先到数据库中检查,如果这个用户数据存在,则将数据库中数据删除(同样删除之后也要给出日志信息)(后续介绍的方法就是这种方法的实现)。也有一些大型企业通过数据管理服务来实现,如果获取的数据不符合测试业务,认为这是一条脏数据,从测试数据文件中删除然后取下一条。当然这种情况不会用Excel,XML文件来维护数据,而是通过测试数据数据库来为维护。另外会启动一个Jenkins Job。定时从测试数据库中获取数据个数,当数量小于某个阈值的时候自动生成批量的测试数据。现在来看下如何实现前一种方法。
在Util类中建立check_user_existence(self,username,password,tag)方法,用来检查当前产品数据库中是否存在这个用户,然后通过tag(tag=0表示测试一个异常登录,tag=1表示测试一个正常测试登录)做相应的措施。
为了便于后续的维护,封装了数据库操作和md5加密。
测试代码最后为。
星云测试
http://www.teststars.cc
奇林软件
http://www.kylinpet.com
联合通测
http://www.quicktesting.net