Python unittest calculation tests

Is it possible with unittest to have the tou option to count the total test number of missed tests and the number of runs. And after the launch, the number of tests failed (I know that this is visible at the output). I would like to dump it in json if I enter it programmatically, which would be great

thanks a lot

+6
source share
3 answers

After many trials and mistakes, I finally got this job ...

Based on scoffey answer .

Hope this helps.

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() 

run the script with

 python test.py > result.txt 

result.txt:

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

I am not sure if this is the best way, but it works. Unittest is easy to use, but hard to master, now I feel that I know little about it.

+6
source

I do not know how unittest can report in JSON. I know that nose outputs the result in XML format:

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

Here is an excerpt from this XML file:

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

If you are not against the XML format, then this is the solution to consider. I also heard that the nose has a JSON plugin, but it hasn't played with it yet.

+1
source

I use unit tests TestSuite ( Ref ).

After starting, it returns a TextTestResult, which contains a list with errors, errors and missing, a value with Test_runs and many others.

Here is a β€œminimal” working example of how I will do this.

 #!/usr/bin/python3 # -*- coding: utf-8 -*- import unittest class TestDummy(unittest.TestCase): """A Dummy UnitTesting class.""" def test_failure(self): """Fails on test.""" self.fail(msg="Need a failure") @unittest.skip("Need a Skipper") def test_skipping(self): """Skippes on test.""" pass def test_error(self): """Gives a error on test.""" self.not_a_thing() def test_pass(self): """Need a test that passes.""" pass def warp_test_suite(testcase_class): """Load tests from a specific set of TestCase classes.""" suite = unittest.TestSuite() tests = unittest.defaultTestLoader.loadTestsFromTestCase(testcase_class) suite.addTest(tests) return suite if __name__ == "__main__": import json # For saving a JSON-file # The test results dictionary, for the JSON. result_value = {"Failures": 0, "Errors": 0, "Skipped": 0, "Test Runs": 0} # Setup and run the Test runner = unittest.TextTestRunner() TextTestResult = runner.run(warp_test_suite(TestDummy)) # Passes the Result result_value["Failures"] += len(TextTestResult.failures) result_value["Errors"] += len(TextTestResult.errors) result_value["Skipped"] += len(TextTestResult.skipped) result_value["Test Runs"] += TextTestResult.testsRun # Save the result to a JSON-file. with open("result_data.json", 'w') as fp: json.dump(result_value, fp, indent=3) 
0
source

Source: https://habr.com/ru/post/1213323/


All Articles