Pytest测试框架一键动态切换环境思路

前言

在文章《Pytestfixture及conftest详解》中,我们介绍了fixture的一些关键特性、用法、作用域、参数等,本篇文章将结合fixture及conftest实现一键动态切换自动化测试环境。在开始前,我们可以先思考几个问题:动态切换测试环境的目的是什么(能够解决什么问题)?该如何实现(实现方案)?具体步骤是什么(实现过程)?

一、动态切换测试环境的目的是什么?

动态切换测试环境的目的是什么,或者说它能解决什么样的问题:

便于快速验证功能在不同环境中的表现。比如:有的功能(背后的接口)在开发环境是正常的,但到了测试或预发布环境就出问题了,可以便于快速验证各个功能在不同环境中的表现;

省去修改配置参数的繁琐步骤。通常情况下,我们的配置信息都是写在配置文件中,然后测试用例读取配置文件中不同的配置信息。如果想要切换环境,就需要修改配置文件或读取配置的逻辑。而动态切换测试环境则可以自动根据我们传入的命令行参数和预制好的读取配置的策略,自动识别、解析并返回对应的数据。

为测试框架赋能。之前看过一篇文章《13条自动化测试框架设计原则》中说道:测试框架要能做到,一套脚本多环境运行,支持环境切换,并且能根据环境进行自动化的配置(包括系统配置、测试数据配置等)。

其实以上总结起来就是:一套测试脚本,能根据环境进行自动化的配置,省去手动配置参数的步骤,可以实现在多环境中运行,从而快速验证各个接口及相关服务在不同环境中的表现。

二、动态切换测试环境如何实现?

1.实现方案

我们希望:可以有个开关,自由控制执行脚本的运行环境,而不是需要我们手动修改,比如:选择dev时,自动读取的是开发环境的配置及测试数据:url、数据库配置、账号密码、测试数据;当切换到test时,自动读取的是测试环境的配置及测试数据。

大致实现原理如下所示:

用户通过pytest命令行传入参数驱动脚本执行(pytest_addoption用于实现自定义命令行参数);

fixture函数get_env用于获取用户输入的命令行参数,传递给fixture.py中的各个fixture函数;

fixture.py中的各个fixture函数根据get_env提供的环境参数值,解析测试环境对应的数据文件内容:URL(get_url)、账号(get_user)、数据库配置(get_db),同时传递给api类(api_module_A...B...C)、登录方法(login)、数据库连接方法(use_db)等,用于实例化操作,这部分fixture函数再传递给测试用例,用于用例前后置操作(相当于setup/teardown);

最后测试用例再根据各个fixture函数返回的实例对象、配置信息,调用各个模块的api函数,执行测试,并读写数据库实现数据校验、断言,从而最终实现切换环境策略;

2.目录结构框架设计小技巧

1)目录结构

项目结构大致如下,至于目录结构和文件命名,只能说萝卜青菜各有所爱。比如有人喜欢把存放公共方法的


转载请注明:http://www.aierlanlan.com/rzfs/4001.html