class xUnitSucceedTest(unittest.TestCase): def setUp(self): class SimpleTest(Test): def test(self): pass self.tmpfile = tempfile.mkstemp() self.tmpdir = tempfile.mkdtemp(prefix='avocado_' + __name__) args = argparse.Namespace() args.xunit_output = self.tmpfile[1] self.job = job.Job(args) self.test_result = Result(FakeJob(args)) self.test_result.tests_total = 1 self.test_result.start_tests() self.test1 = SimpleTest(job=self.job, base_logdir=self.tmpdir) self.test1.status = 'PASS' self.test1.time_elapsed = 1.23 unittests_path = os.path.dirname(os.path.abspath(__file__)) self.junit_schema_path = os.path.join(unittests_path, 'junit-4.xsd') def tearDown(self): os.close(self.tmpfile[0]) os.remove(self.tmpfile[1]) shutil.rmtree(self.tmpdir) def testAddSuccess(self): self.test_result.start_test(self.test1) self.test_result.end_test(self.test1.get_state()) self.test_result.end_tests() xunit_result = xunit.XUnitResult() xunit_result.render(self.test_result, self.job) with open(self.job.args.xunit_output) as fp: xml = fp.read() try: dom = minidom.parseString(xml) except Exception as details: raise ParseXMLError("Error parsing XML: '%s'.\nXML Contents:\n%s" % (details, xml)) self.assertTrue(dom) els = dom.getElementsByTagName('testcase') self.assertEqual(len(els), 1) with open(self.junit_schema_path, 'r') as f: xmlschema = etree.XMLSchema(etree.parse(f)) self.assertTrue(xmlschema.validate(etree.parse(StringIO(xml))), "Failed to validate against %s, content:\n%s" % (self.junit_schema_path, xml))
class xUnitSucceedTest(unittest.TestCase): def setUp(self): class SimpleTest(Test): def test(self): pass self.tmpfile = tempfile.mkstemp() self.tmpdir = tempfile.mkdtemp(prefix='avocado_' + __name__) args = argparse.Namespace(logdir=self.tmpdir) args.xunit_output = self.tmpfile[1] self.job = job.Job(args) self.test_result = Result(FakeJob(args)) self.test_result.tests_total = 1 self.test_result.start_tests() self.test1 = SimpleTest(job=self.job, base_logdir=self.tmpdir) self.test1.status = 'PASS' self.test1.time_elapsed = 1.23 unittests_path = os.path.dirname(os.path.abspath(__file__)) self.junit_schema_path = os.path.join(unittests_path, 'junit-4.xsd') def tearDown(self): os.close(self.tmpfile[0]) os.remove(self.tmpfile[1]) shutil.rmtree(self.tmpdir) def testAddSuccess(self): self.test_result.start_test(self.test1) self.test_result.end_test(self.test1.get_state()) self.test_result.end_tests() xunit_result = xunit.XUnitResult() xunit_result.render(self.test_result, self.job) with open(self.job.args.xunit_output) as fp: xml = fp.read() try: dom = minidom.parseString(xml) except Exception as details: raise ParseXMLError("Error parsing XML: '%s'.\nXML Contents:\n%s" % (details, xml)) self.assertTrue(dom) els = dom.getElementsByTagName('testcase') self.assertEqual(len(els), 1) with open(self.junit_schema_path, 'r') as f: xmlschema = etree.XMLSchema(etree.parse(f)) self.assertTrue(xmlschema.validate(etree.parse(StringIO(xml))), "Failed to validate against %s, content:\n%s" % (self.junit_schema_path, xml))
class JSONResultTest(unittest.TestCase): def setUp(self): class SimpleTest(Test): def test(self): pass self.tmpfile = tempfile.mkstemp() self.tmpdir = tempfile.mkdtemp(prefix='avocado_' + __name__) args = argparse.Namespace(json_output=self.tmpfile[1]) self.job = job.Job(args) self.test_result = Result(FakeJob(args)) self.test_result.filename = self.tmpfile[1] self.test_result.start_tests() self.test1 = SimpleTest(job=self.job, base_logdir=self.tmpdir) self.test1.status = 'PASS' self.test1.time_elapsed = 1.23 def tearDown(self): os.close(self.tmpfile[0]) os.remove(self.tmpfile[1]) shutil.rmtree(self.tmpdir) def testAddSuccess(self): self.test_result.start_test(self.test1) self.test_result.end_test(self.test1.get_state()) self.test_result.end_tests() json_result = jsonresult.JSONResult() json_result.render(self.test_result, self.job) with open(self.job.args.json_output) as fp: j = fp.read() obj = json.loads(j) self.assertTrue(obj) self.assertEqual(len(obj['tests']), 1) def testAddSeveralStatuses(self): def run_fake_status(status): self.test_result.start_test(self.test1) self.test_result.check_test(status) def check_item(name, value, exp): self.assertEqual( value, exp, "Result%s is %s and not %s\n%s" % (name, value, exp, res)) # Set the number of tests to all tests + 3 self.test_result.tests_total = 13 # Full PASS status self.test_result.start_test(self.test1) self.test_result.check_test(self.test1.get_state()) # Only status - valid statuses run_fake_status({"status": "PASS"}) run_fake_status({"status": "SKIP"}) run_fake_status({"status": "FAIL"}) run_fake_status({"status": "ERROR"}) run_fake_status({"status": "WARN"}) run_fake_status({"status": "INTERRUPTED"}) # Only status - invalid statuses run_fake_status({"status": "INVALID"}) run_fake_status({"status": None}) run_fake_status({"status": ""}) # Postprocess self.test_result.end_tests() json_result = jsonresult.JSONResult() json_result.render(self.test_result, self.job) res = json.loads(open(self.job.args.json_output).read()) check_item("[pass]", res["pass"], 2) check_item("[errors]", res["errors"], 4) check_item("[failures]", res["failures"], 1) check_item("[skip]", res["skip"], 4) check_item("[total]", res["total"], 13) def testNegativeStatus(self): def check_item(name, value, exp): self.assertEqual( value, exp, "Result%s is %s and not %s\n%s" % (name, value, exp, res)) self.test_result.tests_total = 0 self.test_result.start_test(self.test1) self.test_result.check_test(self.test1.get_state()) self.test_result.end_tests() json_result = jsonresult.JSONResult() json_result.render(self.test_result, self.job) res = json.loads(open(self.job.args.json_output).read()) check_item("[total]", res["total"], 1) check_item("[skip]", res["skip"], 0) check_item("[pass]", res["pass"], 1)
class JSONResultTest(unittest.TestCase): def setUp(self): class SimpleTest(Test): def test(self): pass self.tmpfile = tempfile.mkstemp() self.tmpdir = tempfile.mkdtemp(prefix='avocado_' + __name__) args = argparse.Namespace(json_output=self.tmpfile[1]) self.job = job.Job(args) self.test_result = Result(FakeJob(args)) self.test_result.filename = self.tmpfile[1] self.test_result.tests_total = 1 self.test_result.start_tests() self.test1 = SimpleTest(job=self.job, base_logdir=self.tmpdir) self.test1.status = 'PASS' self.test1.time_elapsed = 1.23 def tearDown(self): os.close(self.tmpfile[0]) os.remove(self.tmpfile[1]) shutil.rmtree(self.tmpdir) def testAddSuccess(self): self.test_result.start_test(self.test1) self.test_result.end_test(self.test1.get_state()) self.test_result.end_tests() json_result = jsonresult.JSONResult() json_result.render(self.test_result, self.job) with open(self.job.args.json_output) as fp: j = fp.read() obj = json.loads(j) self.assertTrue(obj) self.assertEqual(len(obj['tests']), 1) def testAddSeveralStatuses(self): def run_fake_status(status): self.test_result.start_test(self.test1) self.test_result.check_test(status) def check_item(name, value, exp): self.assertEqual(value, exp, "Result%s is %s and not %s\n%s" % (name, value, exp, res)) # Set the number of tests to all tests + 3 self.test_result.tests_total = 13 # Full PASS status self.test_result.start_test(self.test1) self.test_result.check_test(self.test1.get_state()) # Only status - valid statuses run_fake_status({"status": "PASS"}) run_fake_status({"status": "SKIP"}) run_fake_status({"status": "FAIL"}) run_fake_status({"status": "ERROR"}) run_fake_status({"status": "WARN"}) run_fake_status({"status": "INTERRUPTED"}) # Only status - invalid statuses run_fake_status({"status": "INVALID"}) run_fake_status({"status": None}) run_fake_status({"status": ""}) # Postprocess self.test_result.end_tests() json_result = jsonresult.JSONResult() json_result.render(self.test_result, self.job) res = json.loads(open(self.job.args.json_output).read()) check_item("[pass]", res["pass"], 2) check_item("[errors]", res["errors"], 4) check_item("[failures]", res["failures"], 1) check_item("[skip]", res["skip"], 4) check_item("[total]", res["total"], 13) def testNegativeStatus(self): def check_item(name, value, exp): self.assertEqual(value, exp, "Result%s is %s and not %s\n%s" % (name, value, exp, res)) self.test_result.tests_total = 0 self.test_result.start_test(self.test1) self.test_result.check_test(self.test1.get_state()) self.test_result.end_tests() json_result = jsonresult.JSONResult() json_result.render(self.test_result, self.job) res = json.loads(open(self.job.args.json_output).read()) check_item("[total]", res["total"], 1) check_item("[skip]", res["skip"], 0) check_item("[pass]", res["pass"], 1)