Python 测开27期 - julia - 学习笔记 - 多套被测环境

实现方案-环境管理

  • 使用环境管理文件
    • yaml
    • ini
    • 常量类
  • 使用不同的文件管理不同的环境
  • 在接口用例中只指定path,不指定url
# test.yaml 测试环境的配置
env_config:
  base_url: https://httpbin.org/
db_config:
  host: httpbin.org
  username:  xxxx
  password:  xxxx
redis_config:
  host: httpbin.org
  port: 8100
# dev.yaml 开发环境的配置
env_config:
  base_url: https://httpbin.ceshiren.com/
db_config:
  host: httpbin.ceshiren.com
  username:  xxxx
  password:  xxxx
redis_config:
  host: httpbin.ceshiren.com
  port: 8100

环境切换

通过环境变量进行切换

  • 设置环境变量
  • 读取环境变量
# mac设置环境变量
export env=dev
# windows 设置环境变量
set env=dev
# 在python中读取环境变量
import os
import requests
import yaml

class TestMulitiEnv:
    def setup_class(self):
        default = os.getenv("env", default="test")
        data = yaml.safe_load(open(f"{default}.yaml"))
        self.env = data
        self.base_url = self.env["env_config"]["base_url"]


    def test_devenv(self):
        path = "/get"
        r = requests.get(self.base_url+path)
        assert r.json()["headers"]["Host"] == "httpbin.org"

    def test_testenv(self):
        path = "/post"
        r = requests.post(self.base_url+path)
        assert r.json()["headers"]["Host"] == "httpbin.ceshiren.com"

使用命令行进行切换

与《selenium 多浏览器处理》章节逻辑相同

participant 命令行参数 as command

participant 测试用例 as cases
participant 环境配置 as env
autonumber
command -> cases : 通过命令执行测试用例,通过参数指定环境
command -> env: 通过命令行参数获取指定的环境
cases -> env: 测试用例获取指定的环境。如果没有指定,那么就执行默认的环境
# conftest.py
global_env = {}

def pytest_addoption(parser):
    # group 将下面所有的 option都展示在这个group下。
    mygroup = parser.getgroup("hogwarts")
    # 注册一个命令行选项
    mygroup.addoption("--env",
     # 参数的默认值
    default='test',
    # 存储的变量
    dest='env',
    # 参数的描述信息
    help='设置接口自动化测试默认的环境'
     )

def pytest_configure(config):
    default_ev = config.getoption("--env")
    tmp = {"env": default_ev}
    global_env.update(tmp)
# test_muliti_env.py
class TestMulitiEnv:
    def setup_class(self):
        # 获取命令行配置的环境变量
        default = global_env.get("env", "test")
        data = yaml.safe_load(open(f"{default}.yaml"))
        self.env = data
        self.base_url = self.env["env_config"]["base_url"]

    def test_devenv(self):
        path = "/get"
        r = requests.get(self.base_url+path)
        assert r.json()["headers"]["Host"] == "httpbin.org"

    def test_testenv(self):
        path = "/post"
        r = requests.post(self.base_url+path)
        assert r.json()["headers"]["Host"] == "httpbin.ceshiren.com"