2013-12-06 2 views
1

Я пытаюсь использовать unittest для автоматизации тестового примера. Однако, когда тест проходит или выходит из строя, он записывает результат на консоль. Есть ли способ, которым я могу иметь unittest, вернуть код состояния результата теста? Это потому, что я хотел бы добавить еще одну функцию в свой тестовый скрипт, чтобы записать результат теста в нашу базу данных. Каков наилучший способ оценки теста, который прошел или не прошел программно?Может ли Python Unittest вернуть код результата одного теста?

ответ

4

Это зависит от того, сколько информации вам нужно о результатах теста. Если вы просто хотите знать, если тест пройден/не удалось с помощью unittest.main:

«По умолчанию основной вызовы sys.exit() с кодом выхода указывает на успех или провал испытаний запустить»

Так что проверка возвращаемого значения (0 = пройдена, не-0 = сбой) вашего тестового скрипта достаточно, чтобы получить переданный/сбойный ответ.

Если вам нужна дополнительная информация об испытаниях, вы можете пропустить вызов unittest.main() и вызвать метод TestRunner.run, который возвращает объект TestResult, описывающий результаты. Пример:

import unittest 
from unittest import TextTestRunner 

class TestExample(unittest.TestCase): 

    def test_pass(self): 
     self.assertEqual(1, 1, 'Expected 1 to equal 1') 

    def test_fail(self): 
     self.assertEqual(1, 2, 'uh-oh') 

if __name__ == '__main__': 
    test_suite = unittest.TestLoader().loadTestsFromTestCase(TestExample) 
    test_result = TestRunner().run(test_suite) 

... и теперь вы можете проверить переменную test_result, чтобы получить более подробную информацию о тестовом прогоне:

>>> test_result.testsRun 
2 
>>> test_result.failures 
[(<test_example.TestExample testMethod=test_fail>, 'Traceback (most recent call last):\n File "test_example.py", line 9, in test_fail\n self.assertEqual(1, 2, \'uh-oh\')\nAssertionError: uh-oh\n')] 
>>> len(test_result.failures) 
1 

Свойство TestResult документируется here и примеры & вариантов объясняется запуск тестового бегунка here.

+0

Да, все, что мне нужно, это код выхода, но как я могу проверить его, когда после вызова unittest.main(), который затем вызывает код выхода? – user2766739

+0

'test_suite = unittest.TestLoader() loadTestsFromTestCase (пример) test_result = TextTestRunner() запустить (test_suite) печати.. 'Код возврата:', unittest.main.sys.exit() Ran 1 испытание в 0.008s FAILED (failures = 1) № прогона тестов: 1 Код выхода: ' – user2766739

+0

Код выхода применяется только в том случае, если вы запускаете единичный тест с использованием 'unittest.main()' в функции _ _ _ _ _ _ _ _ _ _ _ в этом случае это значение возвращается ко всем вызванным вашим тестам (т.е. оболочке). Вы не должны называть 'sys.exit()' самостоятельно. Если вы хотите запустить тест с помощью тестового бегуна, просто проверьте, содержат ли test_results какие-либо ошибки. –

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