Здравствуйте ув. форумчане. Я знаю что этот вопрос задавался тысячу плюс один раз, но, я так и не нашел для себя решения. Сейчас пишу тесты для API, в тестах мне нужны данные для генерации request, а так же для сравнения полученного response с валидными данными. Я должен запускать тесты от 4-х разных пользователей, в которых разные права в приложении и в следствии, они получают разные респонсы на один и тот же запрос.
Пример теста для одного пользователя:
def test_add_route(self, make_request, clear_result):
url = URL.fixed_routes
# Подготавливаем данные в JSON для запроса
data = _.get_JSON_request('add_route', **{"internalNumber": "1111",
"externalNumber": "0666816657"})
# Делаем запрос и получаем ответ
response = make_request(url, data)
# Получаем id с респонса, для формирования ответа
route_id = response.json()['id']
# Формируем валидный ответ
answer = _.get_JSON_response('add_route', **{'id': route_id,
"internalNumber": "1111",
"externalNumber": "0666816657"})
clear_result['url'], clear_result['id'] = url, route_id
assert response.status_code == 200
assert answer == response.json()
Сейчас тесты поменялись и исполняются от 4-х юзеров:
@pytest.fixture(scope='session')
def get_role():
#Получаем роль из параметров теста из jenkins
try:
role_name_from_jenkins = os.environ['role_for_test']
# Если не передали используем рут роль
except KeyError:
role_name_from_jenkins = 'ROOT'
roles = {'ROOT' : "Basic Q231Q6QVBJX2F1dG90ZXN0X1JPT1Q=",
'ADMINISTRATOR' : "Basic Q123NUUkFUT1I6QVBJX2F1dG90ZXN0X0FETUlOSVNUUkFUT1I=",
'USER' : "Basic QV1230ZXN0X1VTRVI=",
'SUPERVISOR' : "Basic QVBJX2F1dG90ZXN0X1NVUEVS124VklTT1I="}
auth = roles[role_name_from_jenkins]
headers = {
'content-type': "application/json;charset=UTF-8",
'authorization': auth}
data = {'headers': headers, 'role' : role_name_from_jenkins}
return data
add_route_users_data = {'ROOT' : {'request':{"internalNumber": "1111","externalNumber": "0666816657"},
'response': {"internalNumber": "1111", "externalNumber": "0666816657"},
'status_code':200},
'USER':{'request':{"internalNumber": "1111","externalNumber": "0666816657"},
'response': {'SCB_ROUTE_CREATE_EXCEPTION': 'User have no permissions'},
'status_code':403},
'ADMINISTRATOR' : {'request':{"internalNumber": "1111","externalNumber": "0666816657"},
'response': {"internalNumber": "1111", "externalNumber": "0666816657"},
'status_code':200}}
def test_add_route(make_request, clear_result, get_role):
url = URL.fixed_routes
role = get_role['role']
# Подготавливаем данные в JSON для запроса
data = _.get_JSON_request('add_route', **add_route_users_data[role]['request'])
# Делаем запрос и получаем ответ
response = make_request(url, data)
# Получаем id с респонса, для формирования ответа
route_id = response.json()['id']
# Формируем валидный ответ
answer = _.get_JSON_response('add_route', **add_route_users_data[role]['response'])
clear_result['url'], clear_result['id'] = url, route_id
assert response.status_code == add_route_users_data[role]['status_code']
assert answer == response.json()
Вопрос собственно в чем, мне данные как в переменной “add_route_users_data”, нужны будут для каждого теста, как можно их хранить или мой подход вообще не верный?