通过Django Admin+HttpRunner1.5.6实现简易接口测试平台
前言
这是一个使用HttpRunner开发接口平台的简单Demo。
新建Django项目
安装依赖包
pip install httprunner=1.5.6 -i https://pypi.doubanio.com/simple/
模型规划
- 项目Project:包含 名称、创建时间、修改时间
- 测试套件TestSuite:对应HttpRunner的一个yaml文件,包含所属项目、name、base_url、request请求配置、variables用户自定义变量、创建时间、修改时间
- 测试用例TestCase:对应HttpRunner中的一个test段,包含所属TestSuite、name、skip、request、validate、extract、创建时间、修改时间
- 测试结果TestResult:测试套件运行的一次结果信息,包含所属TestSuite、HttpRunner运行summary中的时间信息、统计信息、平台信息、详情等
自定义YamlField
由于TestSuite中的request、variables以及用例中的request我们需要使用Python的字典格式,用例中的validate和extract需要使用Python的列表格式。而Django中这些只能按字符串格式TextField存储。
我们编写一个自定义YamlField,存库时按字符串存,读取时转为Python字典或列表。
在apitest目录下新建fields.py,内容如下。
串存,读取时转为Python字典或列表。
在apitest目录下新建fields.py,内容如下。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |
|
使用抽象模型
由于好几个项目、测试套件、测试用例都需要名称、创建时间、修改时间三个属性。为了简化代码,这里创建一个抽象模型ModelWithName,抽象模型用来通过继承来复用属性,并不会创建表。
修改apitest/models.py,添加:
1 2 3 4 5 6 7 8 9 10 |
|
编写模型
修改apitest/models.py,添加:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
|
HttpRunner运行结果的summary的格式如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
|
这里TestResult模型,对summary结果的信息做了简单的拆解。
组装用例数据
对于用例TestCase,我们需要将其name、skip、request、validate、extract组装成HttpRunner的字典格式。
在apitest/models.py的TestCase类中添加data属性方法,代码如下:
1 2 3 4 5 |
|
一个套件最后解析后应该是包含name、config、apis、testcases的一个字典,我们需要将TestSuite对象及包含的所有TestCase对象组装成如下格式。
{"name": "套件名称", "config" : {...}, "apis": {}, "testcases": []}
补充:加载debugtalk.py的方法
config中可以指定一个yaml的path路径,会自动加载该路径下的debugtalk.py文件
如
1 2 3 |
|
config的格式可以为:
1 2 3 4 5 |
|
这样可以自动加载debugtalk.py中的函数以供使用。
在apitest/models.py的TestSuite类中添加data属性方法,代码如下:
1 2 3 4 5 6 7 8 9 10 11 |
|
由于TestCase在外联TestSuite时设置了关联名称tests,因此TestSuite对象可以通过self.tests.all()查询出所有关联它的用例。
注:HttpRunner-1.5.6版本的base_url是放在config/request中的,这里做了分离,要重新放入config/request中。
编写套件运行方法
从 httprunner.task模块中导入HttpRunner类,使用TestSuite数据,运行即可。由于运行时是安多个TestSuite模式运行的,因此TestSuite的数据要放到一个列表中。
在apitest/models.py的TestSuite类添加run方法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
|
运行后,解析summary并创建TestResult对象保存本次运行结果。
模型完整代码
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 |
|
使用Django Admin
修改apitest/admin.py,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
|
这里将项目、测试套件、测试结果三个模型注册到Admin后台,测试用例则作为内联模型放到测试套件中进行编辑。
在测试套件模型中,自定义了一个“运行”,操作,支持运行选中的用例。
运行并测试项目
打开terminal终端,执行数据库变更并创建超级管理员。
python3 manage.py makemigrations
python3 manage.py migrate
python3 manage.py createsuperuser
运行开发服务器
python3 manage.py runserver
访问http://127.0.0.1:8000/admin并登录。
创建一个项目,测试项目,然后创建一个TestSuite,如下:
请求默认配置:
headers: x-text: abc123
变量:
a: 1b: 2
请求数据:
url: /getmethod: GETparams: a: $a b: $b
提取请求:
- res_url: content.url
断言:
- eq: [status_code, 200]
点击保存。
回到TestSuite列表,选中测试套件,动作下拉框中选择“运行”,点击Go按钮。
返回测试结果列表、查看测试结果。
?现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】
最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走!?希望能帮助到你!【100%无套路免费领取】
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!