Когда мы пишем автоматизированный код в тестовой среде, руководитель просит развернуть код в совместной среде отладки и протестировать его еще раз. В это время менять конфигурацию в сценарии использования очень больно. Поэтому, когда мы разрабатываем варианты использования автоматизации, мы должны сначала подумать о конфигурации и переключении нескольких сред.
Если вам нужно использовать несколько сред test/uat и т. д., вам следует создать файл config.py в корневом каталоге варианта использования (файл pytest.ini на том же уровне). плагин установки pip
pip install pytest-yaml-yoyo
В версии v1.0.10 реализовано несколько функций переключения среды.
class Config:
"""Несколько наборов сред общедоступной конфигурации"""
version = "v1.0"
class TestConfig(Config):
"""Тестовая среда"""
BASE_URL = 'http://192.168.1.1:8000'
MYSQL_HOST = "192.168.1.1"
MYSQL_USER = "root"
MYSQL_PASSWORD = "123456"
MYSQL_PORT = 3306
MYSQL_DATABASE = "xxx" # Данные подключения из имени библиотеки
class UatConfig(Config):
"""Совместная среда отладки"""
BASE_URL = 'http://192.168.1.3:8080'
MYSQL_HOST = "http://192.168.1.3"
MYSQL_USER = "root"
MYSQL_PASSWORD = "654321"
MYSQL_PORT = 3306
MYSQL_DATABASE = "xxx" # Данные подключения из имени библиотеки
# Отображение взаимосвязей между средами для легкого переключения Конфигурация нескольких сред
env = {
"test": TestConfig,
"uat": UatConfig
}
В соответствии с приведенным выше форматом конфигурации настройте различные среды и, наконец, установите связь между именем среды и конфигурацией. Это должно быть имя среды. Формат следующий.
env = {
"test": TestConfig,
"uat": UatConfig
}
Затем при выполнении варианта использования вы можете выбрать выполнение тестовой среды или среды uat. Существует два способа настройки среды для выполнения.
Способ 1: настройка в pytest.ini
[pytest]
env = test
Способ 2. Установите при выполнении команды pytest.
pytest --env test
Если настройки есть в обоих местах,Тогда приоритет:Параметры командной строки--env test
больше, чем pytest.ini Средняя конфигурацияenv = test
.
В предыдущей статье я рассказал о глобальной конфигурации pytest + yaml -11.
Приоритет адреса среды используется следующим образом:
1. Параметр командной строки глобальной конфигурации --base-url приоритет больше, чем pytest.ini документbase_url в Конфигурация。
2.yaml документ config base_url в Приоритет больше, чемобщая ситуация Конфигурация
3.request Запросить URL Если это абсолютный адрес, затем base_url неверный
В общем : url абсолютный адрес > config base_url в > Параметр командной строки --base-url > pytest.ini документbase_url в
Здесь мы добавили новый base_url, который также можно настроить глобально в config.py (конфигурация в config.py называется BASE_URL в верхнем регистре)
Если глобальный BASE_URL настроен в config.py, он также вступит в силу. Приоритет будет ниже, чем у конфигурации командной строки и pytest.ini.
В общем: URL абсолютный адрес > config base_url в > Параметры командной строки — base-url > pytest.ini в файле base_url > config.py из BASE_URL
Если MySQL необходимо выполнить в варианте использования База данных, или вам нужно запросить MySQL при утверждении база данных. Сначала в config.py Полная настройка в
class TestConfig(Config):
"""Тестовая среда"""
BASE_URL = 'http://192.168.1.1:8000'
MYSQL_HOST = "192.168.1.1"
MYSQL_USER = "root"
MYSQL_PASSWORD = "123456"
MYSQL_PORT = 3306
MYSQL_DATABASE = "xxx" # Данные подключения из имени библиотеки
Когда закончится настройка MySQL, появится встроенная функция, которую можно будет использовать.
Пример использования
config:
base_url: http://124.70.221.221:8201
variables:
username: test
sql: select * from auth_user where username like 'test';
Авторизоваться:
name: step login
request:
url: /api/v1/login
method: POST
json:
username: ${username}
password: "123456"
extract:
token: $.token
validate:
- eq: [status_code, 200]
- eq: [ok, true]
- eq: [$.username, '${query_sql(sql).username}']
Приведенный выше пример — это утверждение из, изучение SQL, получение значения базы данных.
- eq: [$.username, '${query_sql(sql).username}']
Журнал можно включить
[pytest]
log_cli = true
log_cli_level = debug
env = test
Посмотреть журнал бега
body:
{"code": 0, "msg": "login success!", "username": "test", "token": "6112772900193da079e9fcc857613f6125
3648fd"}
2022-12-13 10:34:54 [INFO]: extract Извлечение переменных-> {'token': '6112772900193da079e9fcc857613f61253648fd'}
2022-12-13 10:34:54 [DEBUG]: query sql: select * from auth_user where username like 'test';!
2022-12-13 10:34:54 [INFO]: query result: {'id': 2, 'password': 'pbkdf2_sha256$100000$rSQNBkIc2xOm$VGXiUZk
dsIueT/AsoPwlFSEL1vGODsK7eIjK0nawH/M=', 'last_login': None, 'is_superuser': 0, 'username': 'test', 'first_
name': '', 'last_name': '', 'email': '478391@qq.com', 'is_staff': 0, 'is_active': 1, 'date_joined': dateti
me.datetime(2022, 11, 11, 21, 22, 59, 971425)}
2022-12-13 10:34:54 [INFO]: validate Проверить содержимое-> [{'eq': ['status_code', 200]}, {'eq': ['ok', True]}, {'eq'
: ['$.username', 'test']}]
2022-12-13 10:34:54 [INFO]: validate Результат проверки-> eq: [200, 200]
2022-12-13 10:34:54 [INFO]: validate Результат проверки-> eq: [True, True]
2022-12-13 10:34:54 [INFO]: validate Результат проверки-> eq: [test, test]
Возвращение из тела Извлечь имя пользователя внутри Используйте выражения.username, Получите фактический результат «теста» ‘{query_sql(sql).username}’ Выражение сначала вызовет query_sql(sql) Функция, обратитесь к предыдущей настройке переменной sql, получить результаты
{'id': 2, 'password': 'pbkdf2_sha256$100000$rSQNBkIc2xOm$VGXiUZk
dsIueT/AsoPwlFSEL1vGODsK7eIjK0nawH/M=', 'last_login': None, 'is_superuser': 0, 'username': 'test', 'first_
name': '', 'last_name': '', 'email': '478391@qq.com', 'is_staff': 0, 'is_active': 1, 'date_joined': dateti
me.datetime(2022, 11, 11, 21, 22, 59, 971425)}
Получить из Результат — словарь,Объекты словаря могут продолжать принимать значения,затем'${query_sql(sql).username}'
Вы можете получить желаемый результат “test”
Если вариант использования из параметров,Нужно получить значение из sql,Мы также можем сначала определить переменные,Ссылка на функцию query_sql(sql) в варианте использования
config:
variables:
sql: select * from auth_user where username like 'test';
Авторизоваться:
name: step login
request:
url: /api/v1/login
method: POST
json:
username: ${query_sql(sql).username}
password: "123456"
extract:
token: $.token
x: ${query_sql(sql).username}
validate:
- eq: [status_code, 200]
- eq: [ok, true]
- eq: [$.username, test]
Extract также может поддерживать выполнение sql для получения результатов извлечения.
extract:
token: $.token
x: ${query_sql(sql).username}
Если вам нужно изучить SQL в префиксном и постфиксном варианте использования, Можно использовать крючки Механизм, до запроса и после запроса Обратитесь к предыдущей статье pytest + yaml рамка -6.hooks Реализация функции перехвата