Pytest的环境切换

一、环境切换

在公司可能存在多套环境,每个环境对应的数据库,redis,域名,用户都不太一样,尽管有配置文件,但是手动改起来也比较麻烦,我们希望在框架层面执行时,只需要指定执行的环境名称即可,他能够自动将各个环境信息切换到当前执行中来。

1、针对各个环境编写配置文件

比如公司有sit环境,uat环境,test环境,dev环境等,指对这些环境分别使用sit/uat/test/dev等来命名,分别在config目录下创建他们几个环境配置文件,文件名称命名为env_xxx_yml,这个xxx就是各个环境对应的名称,每个配置文件的内容格式都是一致的

common:
  buyerName: [ 'A','B' ]
  buyerPassword: [ 'AP','BP' ]
  captcha: '1512'
  managerName: M
  managerPassword: MP
  mobile_code: '123123'
  sellerName: S
  sellerPassword: SP
http:
  basic: http://......
  buyer: http://......
  manager: http://......
  seller: http://......
db:
  host: ......
  password: ......
  port: 3306
  username: M
redis:
  host: ......
  password: F
  port: 6379

2、环境信息传递的设计和封装

*执行时如何指定环境名称

整体执行框架执行入口是run.py,那么run.py在未来做持续执行的时,是通过命令行的方式执行的方式进行的。在python里命令行执行脚本时我们可以通过脚本传递外来参数,所有我们设计是把环境名称作为run.py的外来参数,执行时是这样的

python run.py test

python run.py sit

python run.py uat

*代码封装

1、通过sys.argv得到命令行执行时传递的环境名称

2、根据得到的环境名称,拼接形成该环境对应的配置文件名称路径,config/env_test.yml

3、读取该环境文件配置中的所有信息

4、分别将环境中的common写入到common.yml,http写入到http.yml,db写入到db.yml,redis写入到redis.yml

#以后修改环境配置时,只有修改环境文件才能成功

import os
import sys

import pytest

from common.file_load import load_yaml_file, write_yaml
from paths_manager import common_yaml_path, http_yaml_path, redis_yaml_path, db_yaml_path

if __name__ == '__main__':
    args = sys.argv
    print(args) # ['run.py', 'test']
    # 给env_file一个默认值,是为了兼容不传递环境名称时,默认执行test环境
    env_file = 'config/env_test.yml'
    if len(args)>1:
        env_name = args[1]
        env_file = f'config/env_{env_name}.yml'
        del args[1]
    # 读取环境配置文件所有信息
    env_info = load_yaml_file(env_file)
    # 依次写入到各个配置文件中去
    write_yaml(common_yaml_path,env_info['common'])
    write_yaml(http_yaml_path, env_info['http'])
    write_yaml(redis_yaml_path, env_info['redis'])
    write_yaml(db_yaml_path, env_info['db'])
    # pytest.main()自动扫描pytest.ini,根据配置执行pytest
    pytest.main()

    os.system('allure serve report\data')
def write_yaml(filepath,content):
    with open(file=filepath,mode='w',encoding='utf-8') as f:
        yaml.dump(content,f,Dumper=yaml.Dumper)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值