概要
之前做过一版自动化测试框架v1.0,1.0版本主要功能实现的是自动化读取excel中的url,参数,然后使用python中的get/post的方法自动请求接口,将结果再写入excel中。
但是后来发现一个问题:对于接口参数的类型判断这类用例数很多,但是又很基础,一般不牵涉到业务场景。
因此有个想法:是否能输入接口的参数后,自动生成关于类型判断和缺少必填项/非必填项的用例,然后再自动请求,写入结果。
所以这段时间消失就是去完善了之前的自动化测试框架,升级到了v2.0~
框架
v2.0还是基于python的requests库的,只是多了一个简单的前端页面和随机生成类型参数、缺少必填项/非必填项参数的业务逻辑。但是因为前后端需要交互,所以我这里用的是python自带的CGI库来实现。
实现思路
接下来说一下我的实现思路
-
首先确定传参的数据结构
因为接口参数类型除了基本的数据类型外还有复杂一点的,类似object和数组。所以最初想到的是用dict来承载,但是在实现过程中发现,dict不可哈希,因此他的key不可以是dict类型,这样的话就没办法用嵌套dict实现object类型的参数了,最后确定使用tuple为参数的数据结构。
params:
({‘name’:‘a’,‘type’:‘int’},{‘name’:‘b’,‘type’:‘string’},{‘name’:’’,‘type’:‘object’,‘object’😦{‘name’:’’,‘type’:’’,‘isRequired’:’’},{‘name’:’’,‘type’:’’,‘isRequired’:’’})}) -
随机生成各类型的参数:int string bool float 数组 object
确定好参数的数据结构后,此时就基于业务分为随机生成各类型的参数和随机生成缺少必填项/非必填项的参数。
随机生成各类型的参数的实现思路就是当在前端页面传入A的正确类型type A后,随机生成除type A外的其他type的A的值。其他参数的类型正确,但是值也是随机的。
这里就封装了一个小方法,因为python中没有switch方法,所以自定义了一个方法来实现生成对应类型的随机值。部分代码如下:
然后再嵌套for循环,生成对应的类型值。
这里有点绕的就是需要分为对象类型和非对象类型的参数。对于对象类型的参数,需要把对象内的参数单独再for循环,在这里会麻烦一些,相较于非对象类型的参数。部分代码如下:
-
随机生成缺少某个参数
这部分的业务逻辑比较简单,只要将需要缺少的参数a给剔除掉,生成其他参数的正确类型值即可。较麻烦的也是在对象类型参数,需要对对象参数本身和对象参数内的参数都做处理。部分代码如下:
-
生成测试用例
随机生成参数,保存在param中后就可以循环读取该参数,将值写入excel,生成测试用例
-
请求接口
请求接口这部分可以使用v1.0中的代码。 -
页面
到第五步差不多后台逻辑就已经完成了,接下来就是对外的前端页面。我写的前端页面很简陋,主要都是input输入框和select框的结合。可以自由输入接口名称、接口url、接口请求方式、参数名称和选择参数类型。 -
CGI
因之前学的后台框架是基于java的,对于Python中的前后端交互是从0开始学习了解的,因此就找了个比较简单的python自带的CGI库来实现交互。
完整的CGI使用我这里不多做叙述了,因为自己也是学了皮毛,感兴趣的可以自行百度~
CGI中获取表单的值使用的是form.getvalue()方法,传入的是元素的name值。
然后就是服务器的搭建,本地使用的是http.server这个库,运行以下代码,就可以跑起来啦:
port可以自定义,切勿端口占用
-
运行server.py启动本地服务器,访问localhost:port,就可以访问页面,然后提交表单,生成用例,运行接口,生成结果啦。
总结
本篇写的比较简单,只是大致讲了一下自己的思路,但中间自己实现的时候还是遇到了许多坑的。可能是写代码的经验不足,有时候直接因为变量引用不正确,导致了死循环出来。。。。
再者就是CGI那一块还是踩了很多坑,前端页面也有某部分找了专业的前端开发者帮忙的。。。
但总体下来这个框架还是完成了,可以实现最基本的需求的。
但v2.0框架还是有些需要改进的点(基于工作的需要):
1、对于某些参数的值必须要是正确的,比如校验身份的参数。这类参数在其他参数随机生成的时候,必须保证值正确,不然就会返回身份验证不通过的结果,直接卡在了第一关,连参数校验都没有进行。。。
所以还得对这类需要固定值的参数进行特殊处理。
2、其他的点想到了再慢慢加吧~
最后,完整代码我也会附在资源中的!