/pytest_demo

pytest demo for api test

Primary LanguagePython

利用pytest特性,实现高可用性自动化测试


测试框架需要解决的问题

1.可维护性

🎈 测试自动化脚本是软件开发, 需要投入到维护的精力的多少,是区分好的测试代码结构的关键因素 🎈

  • 敏捷开发模式下的系统,自动化代码如何应对系统频繁的变动?
  • 大量的测试数据如何管理,如何更新?
  • 测试环境写完的case如何在其他环境执行?

2.易用性

🎈 代码首先是写给人看的,其次才是计算机顺便能够运行 🎈

  • 如何提高自动化case的编写效率?
  • 如何写可读性高的自动化case,达到代码即是用例的效果?
  • 如何减少编码量,降低自动化case编码人员的技术能力要求?

以下所有的设计都是围绕这两点展开,从代码组织和数据管理两个方面入手。示例demo

核心特性

  • 关键字驱动:这样好处是可复用性,测试程式已在高度抽象化的层级下创建,减少维护的成本。还可以提高可读性和开发效率。
  • 测试数据与测试代码分离:方便数据的管理与维护,解决测试数据中变量的支持。
  • 测试数据动态加载:不同环境的配置变量,和请求之间的上下文数据依赖动态加载。
  • 多环境支持:配置化,同一套测试代码可在不同环境执行(开发,测试,预发布),无需额外修改。
  • 报告与日志:集成美观的测试报告框架,记录丰富的执行信息,从执行日志中分析定位问题程序。

代码框架设计

合理的封装函数设计,将使得自动化脚本简洁化、一致性,可维护性高。进行逻辑上的分层,减少重复代码,系统变化对自动化测试程序的影响控制在特定模块,可以快速修改维护。

模块的组织

模块分层图片

每一层的功能如下

1. 用例场景层

将模块层和接口层的关键字,组合成业务流程,完成用例场景的构建和测试。

2. 模块层

按业务模块封装为可复用关键字,供测试场景使用 组合多个api构造特定业务动作

例如:1调用商品列表接口+选取两个商品id调用添加购物车接口+提交订单接口,串成一个工作流,组合成关键字生成一个新订单
2系统A提交审核信息接口+审核系统审核通过,串成一个工作流组成关键字生成一个审核通过的数据

3. 接口层

与被测系统的一次交互,可以是发送一个http请求,消息队列中发送一条数据,或者修改数据库中某个字段
功能:操作中的通用信息实现在此层

例如:HTTP请求需要添加通用字段 对参数进行排序后md5加密,参数中要传时间戳.. 变量的替换

4. 会话层

管理与系统连接,包括http, kafka, Database, Redis...
功能:如打印log,多环境配置信息,通用功能的实现如(参数的动态渲染能力)。

这样做有什么好处

模块细节图片 通过逻辑上的分层,使得testcase是由module和api的调用组成,增加了代码的复用,系统发生变化时,对测试代码的影响也被降低,如图API_1的接口参数发生变化或者API_3的实现方式发生修改,只需要修改对应的数据即可,testcase层不需要修改。

而且,通过分层之后,可以将api公共参数放到不同的层级来实现,就像TCP/IP网络的封装数据一样,实现不同级别的默认数据的添加。减少testdata的维护,使得测试数据中只有控制业务相关的字段。
测试数据减少

example

分层模块化组织自动化测试的实践demo

快速开始

  • clone本项目
  • Dependency
    • python3
    • pip install -r requirements.txt
    • jenkins (*)
    • allure(*)
    • mongodb(*)
  • 运行
    • docker run --name mongo -d -v /root/docker/mongo:/data/db -p 27017:27017 mongo
    • pytest
    • allure serve -p 8090