def test_add_three_ips(xorp_and_tredy_hosts): """ Тест проверяет метод add_ip. Кейс3. Создаем пользователя. Создаем ему профиль. Пытаемся добавить три ip-адреса с комментариями. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) ip_list = [generate_public_ip() for _ in range(3)] profile_id = create_profile(xorp_and_tredy_hosts, login, password) full_ip_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'ip': ip_list, 'profile': profile_id, 'comment': ['ip_1_comment', 'ip_2_comment', 'ip_3_comment'], } response = make_request(xorp_and_tredy_hosts, 'add_ip', full_ip_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data['added_addresses'] == ip_list
def test_update_email(xorp_and_tredy_hosts): """ Тест проверяет метод обновления email пользователя. Создается пользователь с почтой. Почта пользователя обновляется. """ login, password = generate_login_password() # К новой почте добавляем префикс для исключения совпадений при параллельном запуске тестов new_email = 'new_' + login registration_params = { 'key': API_PUBLIC_KEY, 'login': login, 'password': password, 'email': login, } updating_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'email': new_email, } response = make_request(xorp_and_tredy_hosts, 'subscribe', registration_params) make_verification(response) response = make_request(xorp_and_tredy_hosts, 'update_email', updating_params) make_verification(response)
def test_subscription_info(xorp_and_tredy_hosts): """ Тест проверяет метод получения информации о подписке. Api-методы не поддерживают опционал изменения даты окончания подписки. Пользователи создаются с неограниченно действующей подпиской для всех тарифов. Создается пользователь с платным тарифом. Проверяется неограниченность срока действия тарифа. """ login, password = generate_login_password() info_params = { 'key': API_PUBLIC_KEY, 'ident': login, } create_user(xorp_and_tredy_hosts, login, password) response = make_request(xorp_and_tredy_hosts, 'subscription_info', info_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) date_end = data.get('date_end') assert not date_end
def test_profiles(xorp_and_tredy_hosts): """ Тест проверяет метод получения информации о профилях пользователя. Cоздается пользователь. Запрашиваем и валидируем его профиль. """ login, password = generate_login_password() profiles_params = { 'key': API_PUBLIC_KEY, 'ident': login, } create_user(xorp_and_tredy_hosts, login, password) response = make_request(xorp_and_tredy_hosts, 'profiles', profiles_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) profile_id = eval([key for key in data.keys()][0]) profile_name = data.values() assert isinstance(profile_id, int) assert 'Default' in profile_name
def test_add_user_with_the_same_ip(xorp_and_tredy_hosts): """ Тест проверяет метод add_ip. Кейс2. Создаем пользователя, добавляем ему ip-адрес. Создаем еще одного пользователя и пытаемся добавить ему ip-адрес первого пользователя. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) ip_address = generate_public_ip() mandatory_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'ip': ip_address, } response = make_request(xorp_and_tredy_hosts, 'add_ip', mandatory_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data['added_addresses'][0] == ip_address assert 'invalid_adresses' not in data.keys() new_login, new_password = generate_login_password() create_user(xorp_and_tredy_hosts, new_login, new_password) # Пытаемся добавить ему адрес, ранее добавленный первому пользователю mandatory_params_case_2 = { 'key': API_PUBLIC_KEY, 'ident': new_login, 'ip': ip_address, } response = make_request(xorp_and_tredy_hosts, 'add_ip', mandatory_params_case_2) make_verification(response) try: data = response.json()['data'] invalid_adress = data['invalid_adresses'][0] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data['added_addresses'] == [] assert invalid_adress[ ip_address] == 'Address already added to another user'
def test_deactivate(xorp_and_tredy_hosts): """ Тест проверяет метод деактивации пользователя. Создается активный пользователь, который деактивируется. """ login, password = generate_login_password() deactivation_params = { 'key': API_PUBLIC_KEY, 'ident': login, } create_user(xorp_and_tredy_hosts, login, password) response = make_request(xorp_and_tredy_hosts, 'deactivate', deactivation_params) make_verification(response)
def test_clear_vpn_for_profile(xorp_and_tredy_hosts): """ Тест проверяет метод clear_vpn_for_profile. Создаем пользователя. Создаем пользователю профиль. Добавляем VPN на созданный профиль. Проверяем, что VPN добавился. Удаляем VPN c созданного профиля. Проверяем, что VPN удалился. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) profile_id = create_profile(xorp_and_tredy_hosts, login, password) add_vpn_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'name': 'vpn_name', 'profile_id': profile_id, } response = make_request(xorp_and_tredy_hosts, 'add_vpn', add_vpn_params) make_verification(response) data = response.json()['data'] expected_keys = [ 'BEGIN CERTIFICATE', 'END CERTIFICATE', 'BEGIN PRIVATE KEY', 'END PRIVATE KEY', ] assert all(key in data['ovpn'] for key in expected_keys) check_params = { 'key': API_PUBLIC_KEY, 'ident': login, } response = make_request(xorp_and_tredy_hosts, 'get_vpn_list', check_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data[0]['profile'] == 'my_profile_test' assert data[0]['name'] == 'vpn_name' clear_params = { 'key': API_PUBLIC_KEY, 'profile_id': profile_id, } response = make_request(xorp_and_tredy_hosts, 'clear_vpn_for_profile', clear_params) make_verification(response) response = make_request(xorp_and_tredy_hosts, 'get_vpn_list', check_params) make_verification(response) assert response.json( )['data'] == [], 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())
def test_update_password(xorp_and_tredy_hosts): """ Тест проверяет метод обновления пароля пользователя. Создается пользователь. Пароль пользователя обновляется. """ login, password = generate_login_password() _, new_password = generate_login_password() updating_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'password': new_password, } create_user(xorp_and_tredy_hosts, login, password) response = make_request(xorp_and_tredy_hosts, 'update_password', updating_params) make_verification(response)
def test_update_nat(xorp_and_tredy_hosts, nat_ip): """ Тест проверяет метод update_nat. Создаем пользователя. Добавляем ему профиль. Привязываем созданный профиль к DNS адресу. """ login, password = generate_login_password() # Используем для теста первый адрес из списка create_user(xorp_and_tredy_hosts, login, password) profile_id = create_profile(xorp_and_tredy_hosts, login, password) update_params = { 'key': API_PUBLIC_KEY, 'profile_id': profile_id, 'address': nat_ip, } response = make_request(xorp_and_tredy_hosts, 'update_nat', update_params) make_verification(response)
def test_subscribe_plans(xorp_and_tredy_hosts, expected_plans): """ Тест проверяет метод по получению списка доступных тарифов для создания/изменения пользователя реселлером. """ params = {'key': API_PUBLIC_KEY} response = make_request(xorp_and_tredy_hosts, 'subscribe_plans', params) make_verification(response) try: subscribe_plans = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert subscribe_plans == expected_plans
def test_subscribe_user(xorp_and_tredy_hosts): """ Тест проверяет метод регистрации пользователя. Создаем пользователя с двумя обязательными и двумя необязательными параметрами. """ login, password = generate_login_password() full_subscribe_params = { 'key': API_PUBLIC_KEY, 'login': login, 'password': password, 'email': login, # Привязка к конкретной таймзоне не сказывается на результатах теста 'timezone': 'Asia/Yekaterinburg', } response = make_request(xorp_and_tredy_hosts, 'subscribe', full_subscribe_params) make_verification(response)
def test_clear_ip(xorp_and_tredy_hosts): """ Тест проверяет метод clear_ip. Создается пользователь. Добавляем ему ip-адреса. Определяем айдишник дефолтного профиля. Удаляем добавленные пользователю ip-адреса. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) ip_list = [generate_public_ip() for _ in range(3)] ip_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'ip': ip_list, } response = make_request(xorp_and_tredy_hosts, 'add_ip', ip_params) make_verification(response) profiles_params = { 'key': API_PUBLIC_KEY, 'ident': login, } response = make_request(xorp_and_tredy_hosts, 'profiles', profiles_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) # Инвертируем словарь для поиска айдишника профиля по его названию profile_id = [key for key, value in data.items() if value == 'Default'][0] clear_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'profile': profile_id, } response = make_request(xorp_and_tredy_hosts, 'clear_ip', clear_params) make_verification(response) response = make_request(xorp_and_tredy_hosts, 'list_ip', clear_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert 'ip' in data assert not data['ip']
def test_list_ip_optional(xorp_and_tredy_hosts): """ Тест проверяет метод list_ip с обязательным и дополнительным параметрами. Создается пользователь. Добавляем ему ip-адреса на дефолтный профиль. Создаем пользователю второй профиль. Добавляем на него ip-адреса. Определяем айдишник дефолтного профиля. Получаем список ip-адрессов с обоих профилей. Валидируем результат запроса. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) ip_for_profile = generate_public_ip() profile_id = create_profile(xorp_and_tredy_hosts, login, password) ip_params_my_profile = { 'key': API_PUBLIC_KEY, 'ident': login, 'ip': ip_for_profile, 'profile': profile_id, 'comment': 'comment_list_ip_my_profile', } response = make_request(xorp_and_tredy_hosts, 'add_ip', ip_params_my_profile) make_verification(response) list_params_full = { 'key': API_PUBLIC_KEY, 'ident': login, 'profile': profile_id, } response = make_request(xorp_and_tredy_hosts, 'list_ip', list_params_full) make_verification(response) try: data = response.json()['data'] profile = data['ip'][0] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert profile['profile'] == int(profile_id) assert profile['comment'] == 'comment_list_ip_my_profile' assert profile['address'] == ip_for_profile
def test_remove_ip(xorp_and_tredy_hosts): """ Тест проверяет метод remove_ip. Создаем пользователя, добавляем ему айпишник. Удаляем добавленный айпишник. Валидируем по статусу ответа. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) public_ip = generate_public_ip() mandatory_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'ip': public_ip, } response = make_request(xorp_and_tredy_hosts, 'update_ip', mandatory_params) make_verification(response) response = make_request(xorp_and_tredy_hosts, 'remove_ip', mandatory_params) make_verification(response)
def test_prolongate_mandatory(xorp_and_tredy_hosts, expected_plans): """ Тест проверяет метод включения или изменения платного тарифа для пользователя Создается пользователь. Вызываем для пользователя метод prolongate c одним обязательным параметром. Валидируем полученный результат. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) mandatory_prolongate_params = { 'key': API_PUBLIC_KEY, 'ident': login, } # Включаем для пользователя платный тариф. Если по умолчанию у провайдера создается пользователь # с платным тарифом, то метод все равно отработает корректно. response = make_request(xorp_and_tredy_hosts, 'prolongate', mandatory_prolongate_params) make_verification(response) result = get_plan(xorp_and_tredy_hosts, login, password) assert result.get('name') == expected_plans['PREMIUM']
def test_prolongate_full(xorp_and_tredy_hosts, expected_plans): """ Тест проверяет метод включения или изменения платного тарифа для пользователя Создается пользователь. Вызываем для пользователя метод prolongate c двумя параметрами. Подключается тариф, передаваемый необязательным параметром. Валидируем полученный результат. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) for plan in expected_plans.keys(): full_prolongate_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'plan': plan, } response = make_request(xorp_and_tredy_hosts, 'prolongate', full_prolongate_params) make_verification(response) result = get_plan(xorp_and_tredy_hosts, login, password) assert result.get('name') == expected_plans[plan]
def test_get_vpn_list(xorp_and_tredy_hosts): """ Тест проверяет метод get_vpn_list. Создаем пользователя. Добавляем пользователю VPN. Получаем список VPN. Валидируем полученный ответ. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) profiles_params = { 'key': API_PUBLIC_KEY, 'ident': login, } response = make_request(xorp_and_tredy_hosts, 'profiles', profiles_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) profile_id = [k for k, v in data.items() if v == 'Default'][0] add_vpn_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'name': 'vpn_name', 'profile_id': profile_id, } response = make_request(xorp_and_tredy_hosts, 'add_vpn', add_vpn_params) make_verification(response) data = response.json()['data'] expected_keys = [ 'BEGIN CERTIFICATE', 'END CERTIFICATE', 'BEGIN PRIVATE KEY', 'END PRIVATE KEY', ] assert all(key in data['ovpn'] for key in expected_keys) check_params = { 'key': API_PUBLIC_KEY, 'ident': login, } response = make_request(xorp_and_tredy_hosts, 'get_vpn_list', check_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data[0]['profile'] == 'Default' assert data[0]['name'] == 'vpn_name'
def test_unsubscribe(xorp_and_tredy_hosts, expected_plans): """ Тест проверяет метод отключения у пользователя платного тарифа. Создается пользователь, подключаем ему платный тариф. Проверяем, что тариф подключился. Отключаем пользователю тариф. Проверям, что тариф отключился. """ login, password = generate_login_password() mandatory_prolongate_params = { 'key': API_PUBLIC_KEY, 'ident': login, } create_user(xorp_and_tredy_hosts, login, password) result = get_plan(xorp_and_tredy_hosts, login, password) assert result.get('name') == expected_plans['PREMIUM'] response = make_request(xorp_and_tredy_hosts, 'unsubscribe', mandatory_prolongate_params) make_verification(response) result = get_plan(xorp_and_tredy_hosts, login, password) assert result.get('name') == 'FREE'
def test_update_profile(xorp_and_tredy_hosts, expected_plan): """ Тест проверяет метод update_profile. Создаем пользователя, делаем для него новый профиль. Методом update_profile меняем параметры профиля. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) profile_id = create_profile(xorp_and_tredy_hosts, login, password) update_params = { 'key': API_PUBLIC_KEY, 'profile_id': profile_id, } response = make_request(xorp_and_tredy_hosts, 'update_profile', update_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert not data['tls'] assert data['name'] == 'my_profile_test' full_update_params = { 'key': API_PUBLIC_KEY, 'profile_id': profile_id, 'name': 'modified_profile', 'tls': 'True', } prolongate_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'plan': expected_plan, } response = make_request(xorp_and_tredy_hosts, 'prolongate', prolongate_params) make_verification(response) response = make_request(xorp_and_tredy_hosts, 'update_profile', full_update_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data['tls'] assert data['name'] == 'modified_profile' assert data['id'] == int(profile_id)
def test_clear_vpn_for_user(xorp_and_tredy_hosts): """ Тест проверяет метод clear_vpn_for_profile. Создаем пользователя. Привязываем VPN к дефолтному профилю. Создаем пользователю профиль. Привязываем VPN к созданному профилю. Удаляем все VPN. Проверяем, что все VPN удалены. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) profiles_params = { 'key': API_PUBLIC_KEY, 'ident': login, } response = make_request(xorp_and_tredy_hosts, 'profiles', profiles_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) profile_id = [k for k, v in data.items() if v == 'Default'][0] add_vpn_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'name': 'vpn_name_default', 'profile_id': profile_id, } response = make_request(xorp_and_tredy_hosts, 'add_vpn', add_vpn_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) expected_keys = [ 'BEGIN CERTIFICATE', 'END CERTIFICATE', 'BEGIN PRIVATE KEY', 'END PRIVATE KEY', ] assert all(key in data['ovpn'] for key in expected_keys) profile_id = create_profile(xorp_and_tredy_hosts, login, password) add_vpn_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'name': 'vpn_name_my_profile', 'profile_id': profile_id, } response = make_request(xorp_and_tredy_hosts, 'add_vpn', add_vpn_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) expected_keys = [ 'BEGIN CERTIFICATE', 'END CERTIFICATE', 'BEGIN PRIVATE KEY', 'END PRIVATE KEY', ] assert all(key in data['ovpn'] for key in expected_keys) check_params = { 'key': API_PUBLIC_KEY, 'ident': login, } response = make_request(xorp_and_tredy_hosts, 'get_vpn_list', check_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data[0]['profile'] == 'Default' assert data[0]['name'] == 'vpn_name_default' assert data[1]['profile'] == 'my_profile_test' assert data[1]['name'] == 'vpn_name_my_profile' response = make_request(xorp_and_tredy_hosts, 'clear_vpn_for_user', check_params) make_verification(response) response = make_request(xorp_and_tredy_hosts, 'get_vpn_list', check_params) make_verification(response) assert response.json()['data'] == []
def test_add_ip_free(xorp_and_tredy_hosts): """ Тест проверяет метод add_ip. Кейс1. Создаем пользователя с тарифом FREE и пытаемся добавить ему непубличный ip-адрес. Пытаемся добавить пользователю два ip-адреса. Первый адрес добавляется, второй не может быть добавлен. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) unsubscribe_params = { 'key': API_PUBLIC_KEY, 'ident': login, } response = make_request(xorp_and_tredy_hosts, 'unsubscribe', unsubscribe_params) make_verification(response) # Case1 mandatory_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'ip': '255.255.255.255', } response = make_request(xorp_and_tredy_hosts, 'add_ip', mandatory_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data['added_addresses'] == [], 'Case1. Добавлен непубличный адрес' invalid_adress = data['invalid_adresses'][0] assert invalid_adress['255.255.255.255'] == 'This address is not public', \ 'Case1. Адрес отсутствует в invalid_adresses' # Case2 address = generate_public_ip() mandatory_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'ip': address, } response = make_request(xorp_and_tredy_hosts, 'add_ip', mandatory_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data['added_addresses'][0] == address, 'Case2. Адрес не добавлен' assert 'invalid_adresses' not in data.keys() # Case3 address = generate_public_ip() mandatory_params = { 'key': API_PUBLIC_KEY, 'ident': login, 'ip': address, } response = make_request(xorp_and_tredy_hosts, 'add_ip', mandatory_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data['added_addresses'] == [], 'Case3. Добавлен лишний ip-адрес' assert address in data['invalid_adresses'][0].keys() assert data['invalid_adresses'][0].get( address ) == 'The limit is reached', 'Case3. Отсутствует сообщение об ошибке'
def test_list_ip_compulsory(xorp_and_tredy_hosts): """ Тест проверяет метод list_ip с одним обязательным параметром. Создается пользователь. Добавляем ему ip-адреса на дефолтный профиль. Создаем пользователю второй профиль. Добавляем на него ip-адреса. Определяем айдишник дефолтного профиля. Получаем список ip-адрессов с обоих профилей. Валидируем результат запроса. """ login, password = generate_login_password() create_user(xorp_and_tredy_hosts, login, password) default_ip = generate_public_ip() ip_for_profile = generate_public_ip() profile_id = create_profile(xorp_and_tredy_hosts, login, password) profiles_params = { 'key': API_PUBLIC_KEY, 'ident': login, } response = make_request(xorp_and_tredy_hosts, 'profiles', profiles_params) make_verification(response) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) default_id = eval( [key for key, value in data.items() if value == 'Default'][0]) # Накатываем айпишники на каждый профиль отдельно, т.к. совместно запрос не проходит ip_params_default = { 'key': API_PUBLIC_KEY, 'ident': login, 'ip': default_ip, 'comment': 'comment_list_default_ip', } response = make_request(xorp_and_tredy_hosts, 'add_ip', ip_params_default) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data['added_addresses'][ 0] == default_ip, 'Адрес не добавлен {}'.format(response.json()) make_verification(response) ip_params_my_profile = { 'key': API_PUBLIC_KEY, 'ident': login, 'ip': ip_for_profile, 'profile': profile_id, 'comment': 'comment_list_ip_my_profile', } response = make_request(xorp_and_tredy_hosts, 'add_ip', ip_params_my_profile) try: data = response.json()['data'] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert data['added_addresses'][ 0] == ip_for_profile, 'Адрес не добавлен {}'.format(response.json()) make_verification(response) list_params = { 'key': API_PUBLIC_KEY, 'ident': login, } response = make_request(xorp_and_tredy_hosts, 'list_ip', list_params) make_verification(response) try: data = response.json()['data'] default = data['ip'][0] profile = data['ip'][1] except KeyError: pytest.fail( 'Ошибка поиска значения по ключу "data" в ответе: {}'.format( response.json())) assert default['profile'] == int(default_id) assert default['comment'] == 'comment_list_default_ip' assert default['address'] == default_ip assert profile['profile'] == int(profile_id) assert profile['comment'] == 'comment_list_ip_my_profile' assert profile['address'] == ip_for_profile