2014-10-15 2 views
1

Я пытаюсь адаптировать инструмент pytest так, чтобы его можно было использовать в моей тестовой среде, для чего создается и хранится точный отчет об испытаниях. Отчет о тестах представлен в формате xml. До сих пор мне удалось создать новый плагин, который создает xml, который я хочу, за одним исключением: Мне нужно зарегистрировать в моем xml-отчете переданное утверждение с соответствующим кодом, если это возможно. Я не мог найти способ сделать это. Единственная возможная возможность - перегрузить pytest_assertrepr_compare im py pytest плагин, но он вызван только при отказе утверждения, а не на переданном утверждении.есть способ обработать утверждение, переданное в pytest

Любая идея для этого?

Благодарим за помощь!

Etienne

ответ

0

Не уверен, если я понимаю ваши требования точно, но другой подход заключается в создании файла текст/XML с ожидаемыми результатами вашей обработки: первый раз ваши запустить тест, вы проверяете файл вручную для обеспечения правильности и сохранения теста. Дальнейшие тестовые прогоны будут производить аналогичный файл и сравнить его с предыдущим, если они не совпадают (при необходимости создавая diff для облегчения диагностики).

Плагин pytest-regtest использует подобный подход, захватывая выходные данные тестовых функций и сравнивая их с предыдущими запусками.

+0

Благодарим за ответ! Дело в том, что я действительно хочу, чтобы мой тестовый процесс был полностью автоматизирован, поэтому он не очень совместим с ручной проверкой текстового файла. Я решил модифицировать pytest переписать вместо этого, так что я могу иметь интроспекцию на уровне утверждений, а не только на уровне тестового теста – toubab

1

Я думаю, что это принципиально невозможно без изменения самого утверждения. py.test не видит, что происходит на уровне уровня assert, он просто выполняет тестовую функцию, и он либо возвращает значение (игнорируется), либо вызывает исключение. В случае, когда он вызывает исключение, он затем проверяет информацию об исключениях, чтобы обеспечить хорошее сообщение об ошибке.

Логика повторной записи утверждения просто заменяет оператор assert if not <assert_expr>: create_detailed_assertion_info. Я предполагаю, что теоретически можно продлить повторение утверждения, чтобы он вызывал крючки как при прохождении, так и при выходе из строя <assert_expr>, но это была бы новая функция.

+0

Спасибо за ответ, и извините, что мне потребовалось ответить. После дальнейших исследований я, наконец, решил изменить переписать, как вы сказали. Пока это работает очень хорошо, хотя мне не очень нравится концепция ast. Но я уверен, что узнаю! – toubab

+0

Если вы счастливы работать над этим, пожалуйста, подумайте над тем, чтобы сделать его достаточно общим для запроса на тяну, это была бы отличная возможность. Мне было интересно, можно ли вообще вызвать крючок для каждого утверждения, крючок может получить результат теста и объяснение. Вероятно, лучше всего продолжить обсуждение списка рассылки pytest-dev, #pylib на IRC или в проблеме/PR на битбакете. – flub

+0

Я закончил разработку этой функции, для этой цели я создал специальный крючок. Это делает мои отчеты богаче. Я создам запрос на растяжение, как только у меня найдется время для этого. – toubab

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