windows - Retur status for python unittest

Indlæg af Hanne Mølgaard Plasc

Problem



Jeg forsøger at kalde en unittest fra en anden python-fil og evaluere exitkoden. Jeg kunne bruge unittest.TestLoader().loadTestsFromModule og unittest.TextTestRunner.run til at ringe til den eneste fra en anden python-fil, men det returnerer hele resultaterne til cmd. Jeg vil gerne blot indstille en variabel svarende til statuskoden, så jeg kan evaluere den. Jeg var i stand til at finde en metode unittest.TestResult.wasSuccessful, men jeg har problemer med at implementere det. Når jeg tilføjer det til brugssagen, får jeg følgende AttributeError: AttributeError: 'ConnectionTest' object has no attribute 'failures'


Jeg har inkluderet nogle kodeprøver nedenfor og en mockup af det ønskede resultat som en illustration af, hvad jeg forsøger at opnå. Tak på forhånd.


""" Tests/ConnectionTest.py """

import unittest
from Connection import Connection


class ConnectionTest(unittest.TestCase):

    def test\_connection(self):
        #my tests

    def test\_pass(self):
        return unittest.TestResult.wasSuccessful(self)


if \_\_name\_\_ == '\_\_main\_\_':
    unittest.main()


""" StatusTest.py """

import unittest
import Tests.ConnectionTest as test
#import Tests.Test2 as test2
#import Tests.Test3 as test3
#import other unit tests ...

suite = unittest.TestLoader().loadTestsFromModule(test)
unittest.TextTestRunner(verbosity=2).run(suite)


""" Return True if unit test passed
"""
def test\_passed(test):
    if test.test\_pass() == 0:
        return True
    else:
        return False

""" Run unittest for each module before using it in code
"""
def main():
    tests = "test test2 test3".split()
    for test in tests:
        if test\_passed(test):
            # do something
        else:
            # log failure
            pass


Opdater


For at sætte spørgsmålet mere enkelt, skal jeg indstille den markerede variabel nedenfor til den fremhævede værdi.


mål [10]

Bedste reference


Du nævnte, at du forsøgte at implementere result.wasSuccessful, men ville noget som følgende arbejde:


result = unittest.TextTestRunner(verbosity=2).run(suite)
test\_exit\_code = int(not result.wasSuccessful())


Værdien af ​​test\_exit\_code ville da være enten 0, da testpakken kørte med succes eller 1 ellers.


Hvis du vil deaktivere udgangen af ​​TextTestRunner, kan du angive din egen stream, såsom:


from io import StringIO

result = unittest.TextTestRunner(stream=StringIO(), verbosity=2).run(suite)