2016-11-12 2 views
1

Ich versuche, einen benutzerdefinierten Pyunit-Testsuite-Ausführungsbericht zu generieren, aber mit einem 'no attributue' Fehler zu schlagen.Generieren von benutzerdefinierten Pyunit-Bericht

import json 
import unittest 
import sys 

class MyTestResult(unittest._TextTestResult): 
    def addSuccess(self, test): 
     TestResult.addSuccess(self, test) 
    def addError(self, test, err): 
     TestResult.addError(self, test, err) 
    def addFailure(self, test, err): 
     TestResult.addFailure(self, test, err) 

class MyTestRunner(unittest.TextTestRunner): 
    def _makeResult(self, verbosity): 
     return MyTestResult(self.stream, self.descriptions, verbosity) 

class TestServer(unittest.TestCase): 
    def testFunction1(self): 
     res = True 
     self.assertTrue(res, "test case failed") 
    def testFunction2(self): 
     res = 5 
     self.assertEqual(res, 5) 
    def testFunction3(self): 
     res = True 
     self.assertEqual(res, True, 'test case failed') 
    def testFunction4(self): 
     res = False 
     self.assertEqual(res, True, 'test case failed') 

# Create an instance of each test case. 
testCase1 = TestServer('testFunction1') 
testCase2 = TestServer('testFunction2') 
testCase3 = TestServer('testFunction3') 
testCase4 = TestServer('testFunction4') 

# Add test cases to the test suite. 
testSuite = unittest.TestSuite() 
testSuite.addTest(testCase1) 
testSuite.addTest(testCase2) 
testSuite.addTest(testCase3) 
testSuite.addTest(testCase4) 

# Execute the test suite. 
testRunner = unittest.MyTestRunner(verbosity=2) 
testRunner.run(testSuite) 

Der Fehler, den ich bekomme, ist unten. Ich benötige auch Hilfe, um meinen endgültigen Testbericht so anzupassen, dass ich einige zusätzliche Informationen hinzufügen kann, die die eine Pyunit generiert. Was sollte ich in der 'MyTestResult' Klasse mehr implementieren?

Zusätzlich suche ich nach einem Vorschlag zum Ändern des Testberichts, der standardmäßig unten angezeigt wird.

testRunner = MyTestRunner(verbosity=2) 
# To refer your test runner. 

Es gibt weitere Probleme:

bash-3.2$ python myreport.py 
testFunction1 (__main__.TestServer) ... ERROR 
testFunction2 (__main__.TestServer) ... ok 
testFunction3 (__main__.TestServer) ... ok 
testFunction4 (__main__.TestServer) ... FAIL 

Antwort

1

Die Linie sollte ersetzt werden. Hier aktualisiert werden MyTestResult und MyTestRunner:

class MyTestResult(unittest._TextTestResult): 
    def addSuccess(self, test): 
     super(MyTestResult, self).addSuccess(test) 
    def addError(self, test, err): 
     super(MyTestResult, self).addError(test, err) 
    def addFailure(self, test, err): 
     super(MyTestResult, self).addFailure(test, err) 
     # To call parent's method use `super` 

     # OR qualify with parent class 
     # unittest._TextTestResult.addFailure(self, test, err) 


class MyTestRunner(unittest.TextTestRunner): 
    def _makeResult(self): 
     # _makeResult is not called with verbosity, use `self.verbosity` 
     return MyTestResult(self.stream, self.descriptions, self.verbosity) 
+0

den Code verwenden, wie ist, bekomme ich folgende Fehlermeldung: Datei "myreport.py", Zeile 49, in testRunner.run (Testsuite) Datei „/ Benutzer/anjangam/pyvenv/venv/lib/python2.7/site-packages/unittest.py ", Zeile 330, in __call__ Test (Ergebnis) Datei" /users/anjangam/pyvenv/venv/lib/python2.7/site "packages/unittest.py", Zeile 209, in __call__ result.addError (self, self .__ exc_info()) Datei "meinbericht.py", Zeile 10, in addError super (MyTestResult, self) .addError (test , err) TypeError: muss type sein, nicht classobj – AnilJ

+0

@AnilJ, Check this out: http://ideone.com/AF4n6w – falsetru

+0

Mit dieser Zeile löst 'unittest._TextTestResult.addFailure (self, test, err)' das Problem. – AnilJ

Verwandte Themen