基于postman+python的接口自动化测试解决方案

基于postman+python的接口自动化测试解决方案

  • 一、楔子:全是扯淡,千万不要看
  • 二、需求:
  • 三、实现:
      • 1、数据库操作-初始化、恢复数据
      • 2、清空测试用例目录
      • 3、获取、生成测试用例
        • 3.1、先从postman测试集里面获取并组装成json格式的用例
        • 3.2、再用模板来替换,生成unittest用例,并临时存放到指定目录
      • 4、执行测试测试用例
      • 5、邮件发送测试结果
        • 5.1、封装python自带邮箱API
        • 5.2、调用API,发送上面生成的测试报告
  • 四、尚需优化的地方

一、楔子:全是扯淡,千万不要看

话说测试之事,莫过于点点点,何其繁琐,何其无聊。若是做接口测试,虽亦无聊,但却能得“有趣”二字。

诚然,在做接口自动化测试的时候,一般来说,会先在postman上调试接口,等到所以接口调通后,在一个个拷贝到Excel里面,然后启动自动化脚本执行Excel中的测试用例。

听起来似乎不错,但你可知,这人世间最为痛苦的事情,莫过于要将这调试好的接口,一个个拆分开(往往一个接口会拆成几部分甚至十几部分,参考请以excel管理你的接口测试用例),填进Excel表格之中。当接口数量一多,个中种种,苦不堪言。

于是,我萌生了一个想法:为何不直接对postman导出的用例集进行自动化测试?

二、需求:

1、能直接使用postman导出的测试集,并且支持多个
2、能对数据进行预处理、恢复
3、能够生成测试报告,通过邮件发送到指定接收人
4、能够定时执行任务,支持持续集成

三、实现:

自动化测试流程一般如下:

Created with Raphaël 2.2.0 开始 初始化数据 获取用例 执行用例 生成报告 发送报告 结束

实际在这个框架设计的时候,多了删除unittest临时用例这么一个步骤,而执行用例和生成报告其实是一起的。整个设计思路如下:
先从postman的测试集中读取所需数据,然后组装到自定义的json变量中。读取完所有测试用例,循环遍历,替换模板中的空缺内容,生成unittest临时用例,放到相应的文件夹unit_cases中。然后再执行整个目录下unittest用例,最后生成报告通过邮件发送到指定接收人。
框架整理结构如下:
基于postman+python的接口自动化测试解决方案_第1张图片程序入口执行如下命令:
基于postman+python的接口自动化测试解决方案_第2张图片

1、数据库操作-初始化、恢复数据

在进行接口测试的时候,有时候需要准备数据,但这数据只是临时需要,测试完成后需要处理掉。所以,一般来说会在测试前生的所需数据,测试完成后,再清除。
封装一个操作数据库的API,这里以MySQL为例。(这里只贴了常用的部分)
基于postman+python的接口自动化测试解决方案_第3张图片

2、清空测试用例目录

由于每次执行的case都是重新生成,所以每次执行前,都要将临时存储case全部清空。这里也是封装一个API,调用即可。
基于postman+python的接口自动化测试解决方案_第4张图片

3、获取、生成测试用例

3.1、先从postman测试集里面获取并组装成json格式的用例

分析postman用例集格式,遍历讲用例所需的东西提取出来,再重新组装进json,以便后续使用。
(函数太长,只截取了一部分)
基于postman+python的接口自动化测试解决方案_第5张图片

3.2、再用模板来替换,生成unittest用例,并临时存放到指定目录

根据上面重新组装的json集,替换模板中的内容,生成unittest用例,放到指定文件夹。
基于postman+python的接口自动化测试解决方案_第6张图片

4、执行测试测试用例

使用discover方法,执行指定目录下所有的unittest用例
基于postman+python的接口自动化测试解决方案_第7张图片

5、邮件发送测试结果

5.1、封装python自带邮箱API

基于postman+python的接口自动化测试解决方案_第8张图片

5.2、调用API,发送上面生成的测试报告

基于postman+python的接口自动化测试解决方案_第9张图片

四、尚需优化的地方

1、跨用例参数传递
使用全局变量,不知道是否可行?希望大佬们指点指点。
2、传参参数化问题
组装时以list方式传进,然后在生成的时候,遍历list,生成多个unittest用例,似乎可行。
3、sql执行优化
可以将sql语句放到postman的pre_request_script里面,组装用例将其加入,如此一来,就可以针对单个用例执行sql,避免影响其他用例执行。

总体来说,这方法很笨,带到有改进的时候,再来更新。就目前而言,暂时解决了目前的需求,也相应的提高了效率。
当然,代码中必然会存在很多问题,也肯定有诸多能够改进的地方,还望各位不吝赐教。
需要全部代码的小伙伴,请关注下方公众号并留言,谢谢。(本来是放在github上,但由于某些原因,不得已全部删除了,望请见谅)
如果有好的想法或者点子,如需投稿,也欢迎投稿“万事屋丫”。
基于postman+python的接口自动化测试解决方案_第10张图片

你可能感兴趣的:(python,postman,接口测试)