2015-02-13 3 views
5

Возможно ли, если unittest будет иметь возможность подсчитать количество тестовых номеров пропущенных тестов и количество прогонов. И после запуска число тестов не удалось (я знаю, что это видно на выходе). Я хотел бы, чтобы сбросить его в JSON, если я тусклый считать, что программно было бы здоровотесты на подсчеты python unittest

Thx намного

+1

Что вы пробовали? Пожалуйста, прочитайте здесь: http://stackoverflow.com/help/how-to-ask – aberna

+0

просто попробовал функцию обнаружения unittest, но не смог проверить, какие тесты были пропущены – user3142208

ответ

5

После многих проб и ошибок, я, наконец, получил эту работу ...

Основываясь на scoffey's answer.

Надеюсь, что это поможет.

import unittest 

class MyTest(unittest.TestCase): 

    currentResult = None # holds last result object passed to run method 

    @classmethod 
    def setResult(cls, amount, errors, failures, skipped): 
     cls.amount, cls.errors, cls.failures, cls.skipped = \ 
      amount, errors, failures, skipped 

    def tearDown(self): 
     amount = self.currentResult.testsRun 
     errors = self.currentResult.errors 
     failures = self.currentResult.failures 
     skipped = self.currentResult.skipped 
     self.setResult(amount, errors, failures, skipped) 

    @classmethod 
    def tearDownClass(cls): 
     print("\ntests run: " + str(cls.amount)) 
     print("errors: " + str(len(cls.errors))) 
     print("failures: " + str(len(cls.failures))) 
     print("success: " + str(cls.amount - len(cls.errors) - len(cls.failures))) 
     print("skipped: " + str(len(cls.skipped))) 

    def run(self, result=None): 
     self.currentResult = result # remember result for use in tearDown 
     unittest.TestCase.run(self, result) # call superclass run method 

    def testA(self): 
     self.assertTrue(True) # succeeds 

    def testB(self): 
     self.assertTrue(False) # fails 

    def testC(self): 
     self.assertTrue(1 + None is None) # raises TypeError 

    @unittest.skip("skip it") # skipped 
    def testD(self): 
     self.assertTrue("whatever") 

if __name__ == '__main__': 
    unittest.main() 

запустить скрипт с

python test.py > result.txt 

Result.txt:

tests run: 3 
errors: 1 
failures: 1 
success: 1 
skipped: 1 

Я не уверен, что это лучший способ, но он работает. Модуль Unittest прост в использовании, но трудно овладеть, теперь я чувствую, что об этом мало знаю.

+0

awsome thx много помогает !!! – user3142208

+0

Хотели бы вы остановиться ... – laike9m

+0

У меня недостаточно инструментов, чтобы сделать upvote, потому что я новый :( – user3142208

1

Я не знаю, каким-либо образом для UnitTest сообщать в формате JSON. Я знаю, что nose является outputing результат в формате XML:

nosetests --with-xunit --xunit-file=mytests.xml mytests.py 

Вот отрывок из этого XML-файла:

<testsuite name="nosetests" tests="3" errors="0" failures="1" skip="1"> 

Если вы не возражаете формат XML, то это решение рассматривать. Я также слышал, что у носа есть плагин JSON, но он еще не играл с ним.

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