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

前言

最近有小伙伴提到,一套测试环境会有多个数据库,该如何解决?
备注:从v1.2.4 以后新版本不再公开,新功能内部 VIP 学员可以使用,公开版本仅解决bug, 不提供新功能了。

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

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

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

  DB_INFO = {
        "host": "127.0.0.1",
        "port": 3306,
        "user": "root",
        "password": "123456",
        "database": "aaa"
    }

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

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示例

${env.db1.query_sql(sql1)}

2.执行sql示例

${env.db1.execute_sql(sql)}

yaml 用例文件示例

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']

执行结果

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   

网易云完整视频课程https://study.163.com/course/courseMain.htm?courseId=1213419817&share=2&shareId=480000002230338
报名咨询wx:283340479 (已报名的同学学习过程中有问题,都可以协助解决)

posted @ 2023-07-14 07:58  上海-悠悠  阅读(317)  评论(0编辑  收藏  举报