pytest + yaml 框架 -51.一套测试环境配置多个数据库解决方案

2023-08-22 12:08:15 浏览数 (2)

前言

最近有小伙伴提到,一套测试环境会有多个数据库,该如何解决?

config 中配置多个数据库连接对象

之前的案例中是在config配置管理配置一个DB_INFO 就可以直接使用内置方法了。 现在可以在config 中配置多个数据库连接对象的实例

只有一个数据库的情况,可以配置的DB_INFO

代码语言:javascript复制
  DB_INFO = {
        "host": "127.0.0.1",
        "port": 3306,
        "user": "root",
        "password": "123456",
        "database": "aaa"
    }

多个数据库情况,在config.py文件内容

代码语言:javascript复制
from pytest_yaml_yoyo.db import ConnectMysql

class Config:
    """每个环境都有一样的公共配置"""
    version = "v1.0"

class TestConfig(Config):
    """测试环境"""
    BASE_URL = 'http://192.168.1.8:8201'
    db1 = ConnectMysql(**{
        "host": "127.0.0.1",
        "port": 3306,
        "user": "root",
        "password": "123456",
        "database": "aaa"
    })
    db2 = ConnectMysql(**{
        "host": "192.168.1.8",
        "port": 3306,
        "user": "root",
        "password": "123456",
        "database": "bbb"
    })

class UatConfig(Config):
    """联调环境"""
    BASE_URL = 'http://192.168.1.8:8000'
    USERNAME = 'test_uat'
    PASSWORD = '123456'

# 环境关系映射,方便切换多环境配置
env = {
    "test": TestConfig,
    "uat": UatConfig
}

在 TestConfig 中配置了2个连接mysql数据库的示例db1 和 db2

yaml 用例中使用

在yaml 用例中可以通过env对象调用 TestConfig 中配置的对象

  • query_sql(sql) 查询sql, 查询无结果返回None, 查询只有一个结果返回dict, 查询多个结果返回list of dict
  • execute_sql(sql) 执行sql, 操作新增,修改,删除的sql

1.查询sql示例

代码语言:javascript复制
${env.db1.query_sql(sql1)

2.执行sql示例

代码语言:javascript复制
${env.db1.execute_sql(sql)

yaml 用例文件示例

代码语言:javascript复制
config:
  variables:
    sql1: select * from auth_user where username like 'test';
    sql2: select * from auth_user where username like 'yoyo';

test_db_more:
  variables:
    name1: '${env.db1.query_sql(sql1).username}'
    name2: '${env.db2.query_sql(sql2).username}'
  validate:
    - eq: ['${name1}', 'test']
    - eq: ['${name2}', 'yoyo']

执行结果

代码语言:javascript复制
2023-07-14 07:57:09 [INFO]: 取值表达式: env.db1.query_sql(sql1).username, 取值结果:test <class 'str'>
2023-07-14 07:57:10 [INFO]: 取值表达式: env.db2.query_sql(sql2).username, 取值结果:yoyo <class 'str'>
2023-07-14 07:57:10 [INFO]: 取值表达式: name1, 取值结果:test <class 'str'>
2023-07-14 07:57:10 [INFO]: 取值表达式: name2, 取值结果:yoyo <class 'str'>
2023-07-14 07:57:10 [INFO]: validate 校验内容-> [{'eq': ['test', 'test']}, {'eq': ['yoyo', 'yoyo']}]
2023-07-14 07:57:10 [INFO]: validate 校验结果-> eq: [test, test]
2023-07-14 07:57:10 [INFO]: validate 校验结果-> eq: [yoyo, yoyo]
2023-07-14 07:57:10 [INFO]: export 导出全局变量:{}
PASSED

0 人点赞