Добрый день ув. форумчане. Есть ряд тестов, грубо говоря юнит тестов через API интерфейс. В системе существуют разные роли и в зависимости от роли которая выполняет, будет разный респонс. Вот пример одного из тестов:
@pytest.mark.usefixtures('credential', 'clear_routes')
class Test_Routes:
@allure.feature('Позитивный тест')
@allure.story('Получаем информацию по роуту')
def test_get_route(self, add_route, make_request):
url = URL.route
# Делаем запрос и получаем ответ
data = {"agentNumber": "1022","page_size":10,"page_number":1}
response = make_request(method = "GET", url=url, params=data)
#Формируем ожидаемый ответ
answer = _.get_JSON_response('get_route', **add_route)
#Сравниваем полученый response с ожидаемым
assert response.status_code == 200
assert answer == response.json()
Тест выполняется от root пользователя, если я буду выполнять от user пользователя, пришел бы ответ “user have no permissions”. Тесты от разных пользователей буду прогонять в разных job в jenkins. Авторизация - basic, то есть один профиль = header.
Вопрос как правильно организовать профили. В каждом тесте нужно использовать assert в зависимости от профиля.
а не хочешь добавить какой то параметр типа юзер?
сам твой тест будет проверять перед тестом есть ли локальная переменная если есть то берем ее, а если нет то дефолтная.
environment = ['root', 'simple', 'super_root'][0] if 'TEST_ENV' not in os.environ.keys() else os.environ['TEST_ENV']
и создать обьект в котором будут ключи как значение environment по которым будет список тех переменных какие нужно асертить.
в каждой джобе перед тестом сетить значение TEST_ENV
Assert можно завернуть в какие то @step методы, в которых прохендлите развязку проверки (если она у вас на глобальном уровне). А если нет, тогда выводите ожидаемые результаты в дата соурсы, где спец методом будете вынимать в зависимости от типа пользователя.
Вы не так наверно поняли, у меня в моем продукте есть распределение по ролям: User, Root, Administrator, Supervisor + можно самому создать пользователя с определенным набором прав, вот нужно авто тестами проверить правильно ли работают права.
да наооброт кода минимум
пример @pytest.mark.parametrize(‘user’, ‘exp_res’,[(User, exp1),(root, exp2), (admin, expe3), (superuser,exp4)]
def test_user_assert:
params = {}
response = http_method.get(endpoint, user, headers, params)
assert response.json()==exp_res
Вот и весь ваш код на 5 юзеров
Хочу всех поблагодарить, я решил данную задачу след образом:
В Jenkins сделал параметризированную сборку, передаю параметр (юзера от которого хочу запустить тест). В проекте есть 4 системные коли (user, root, administrator, supervisor)
Потом в тесте считываю данный параметр, вот как приблизительно будет организованно: