2015-12-15 4 views
0

Я довольно новичок в модульном тестировании и py.test.Рекомендации по созданию лучших инструментов py.test

У меня есть вопрос о тестировании. Мне нужно форматировать данные, которые поступают из веб-служб. Эти данные (xml, json или что-то еще) необходимо обработать, часть необходимо извлечь и вернуть в виде встроенного типа python (список, dict, collection, ...).

Если мне нужно создать тестовый метод, который бы проверял, хорошо ли сформированы данные, нужно ли использовать приборы, которые поступают непосредственно из веб-служб, или мне нужно создать мои приборы из представления данных, предоставленных из веб-сервисы?

Например:

tests.py

def test_well_formated_data(the_fixture): 
    assert isintance(formatting_method(the_fixture), list) 
    # and other assertion... 

conftests.py

@pytest.fixture 
def the_fixture() 
    return Webservices.connect() 

Или для представления:

@pytest.fixture 
def the_fixture() 
    # Here is the same string returned by the webservices 
    # each time it's called 
    return "{'foo': [ 'bar', 'spam', 'egg']}" 

В некоторых книгах или учебник я имею читать, purpo se проверяет, обрабатывается ли вход и возвращается, как ожидалось. Для ввода достаточно «моментального снимка» данных на данный момент.

Так что я создаю приспособление из «неизменяемых» данных и не знаю об измененных данных, отправляемых веб-службами, или мне нужно создать приспособление, которое будет в данном случае ближайшим к реальности, но с риск быть слишком зависимым от внешнего поведения (например, ошибка 404, 500)?

Заранее спасибо.

ответ

1

Обычно вы не тестируете внешние службы, а убедитесь, что ваше собственное приложение является правильным при обработке и обработке.

В вашем случае вы можете использовать webservice (т. Е. Реализовать манекен, который возвращает несколько фрагментов данных), и проверить, будет ли ваш код обрабатывать их, как ожидалось.

+0

Хорошо спасибо, так что, как я думал, мне нужно создать фрагмент данных, который похож на оригинал. – Moerin

0

Как правило, вы используете тестовые данные для настройки некоторых данных, которые либо статичны, либо выражаются программно.

Когда я пишу модульные тесты для взаимодействия с внешними службами, обычно я вручную вызываю внешнюю службу и сохраняю ответ. Затем я создам тестовое устройство, которое возвращает ответ - это это приспособление, которое я буду использовать в своих тестах.

Какие данные устройства вы должны использовать, действительно зависит от вашего кода, который вас больше всего интересует при тестировании. Например, если ваш код обрабатывает ответ JSON, вы хотите определить свои данные прибора как необработанный JSON (то есть '{"foo": "bar"}') или как проанализированный JSON (т. Е. {'foo': 'bar'})? Это зависит от вашего мнения о том, что наиболее важно для тестирования.

Смежные вопросы