Я использую нос для запуска нескольких тестов. Я хотел бы записывать вывод каждого случая в отдельные файлы и знать результат [успех/неудача] каждого случая. к сожалению, я не могу понять, как это сделать с носом. может ли кто-нибудь дать некоторые подсказки? Спасибо
как заставить нос логировать вывод дел в отдельные файлы?
Ответы (1)
Во-первых, это звучит как необычное использование и может означать, что вам следует пересмотреть схему тестирования.
Я могу придумать пару способов решить эту проблему. Проще всего было бы иметь каждый тестовый журнал сам по себе, вместо того, чтобы нос делал это за вас. Если у вас есть только несколько тестов или вы хотите зарегистрировать только результаты нескольких тестов, это, безусловно, способ сделать это.
Более сложный и общий подход заключается в написании подключаемого модуля для носа., который записывает результат каждого теста по мере его завершения. Для этого вам нужно написать подключаемый модуль, реализующий метод afterTest().
from nose.plugins import Plugin
import datetime
class SeparateReports(Plugin):
"Log the results of each test into a separate file."
def afterTest(self, test):
logname = test.id() + '.log'
success = test.passed
date = datetime.datetime.now()
# print logname, datetime.datetime.now(), success
with open(logname, 'a') as log:
log.write("%s: %s\n" % (date, success))
Это добавит к файлу журнала, названному в честь вашего конкретного теста, отметку даты и True для успеха/False для неудачи. Пара замечаний:
- См. закомментированную строку для примера результатов, которые печатаются.
- Этот подключаемый модуль должен быть зарегистрирован нос; см. документы.
- После регистрации плагин должен быть включен; используйте параметр командной строки --with-separatereports (создается автоматически на основе имени подключаемого модуля).
- Это будет довольно медленно, так как при каждом тесте затрагиваются файлы. Вам может понадобиться открытая БД sqlite или что-то в этом роде.
success = test.passed != False
? может ли test.passed быть чем-то другим, кроме логического значения? (Вместо этого можно было бы использовать success = test.passed
)
- person Alex L; 03.01.2013
status = {False: 'Failed', None: 'Not run', True: 'Passed'}
, затем status.get(test.passed)
?
- person Alex L; 03.01.2013