예제 #1
0
    def test_from_file(self):
        project = self.create_project()
        build = self.create_build(project)
        job = self.create_job(build)
        jobphase = self.create_jobphase(job)
        jobstep = self.create_jobstep(jobphase)
        logger = logging.getLogger('xunit')

        path = os.path.join(os.path.dirname(__file__), 'fixtures',
                            'junit.xml.test')

        with open(path, 'rb') as fp:
            contents = fp.read()

        start = time.clock()
        handler = XunitHandler(jobstep)
        results = handler.get_tests(StringIO(contents))
        logger.info("XUnit handler ran in %f seconds." %
                    (time.clock() - start))

        assert len(results) == 675
        assert results[
            0].name == 'tests.changes.api.test_build_details.TestCase'
        assert results[0].result == Result.skipped
        assert results[
            674].name == 'tests.changes.web.test_auth.LogoutViewTest.test_simple'
        assert results[674].result == Result.passed
예제 #2
0
def test_result_generation():
    jobstep = JobStep(
        id=uuid.uuid4(),
        project_id=uuid.uuid4(),
        job_id=uuid.uuid4(),
    )

    fp = StringIO(SAMPLE_XUNIT)

    handler = XunitHandler(jobstep)
    results = handler.get_tests(fp)

    assert len(results) == 2

    r1 = results[0]
    assert type(r1) == TestResult
    assert r1.step == jobstep
    assert r1.package is None
    assert r1.name == 'tests.test_report'
    assert r1.duration == 0.0
    assert r1.result == Result.failed
    assert r1.message == """tests/test_report.py:1: in <module>
>   import mock
E   ImportError: No module named mock"""
    assert r1.owner == 'foo'
    r2 = results[1]
    assert type(r2) == TestResult
    assert r2.step == jobstep
    assert r2.package is None
    assert r2.name == 'tests.test_report.ParseTestResultsTest.test_simple'
    assert r2.duration == 1.65796279907
    assert r2.result == Result.passed
    assert r2.message == ''
    assert r2.reruns == 1
    assert r2.owner is None
예제 #3
0
def test_result_generation():
    jobstep = JobStep(
        id=uuid.uuid4(),
        project_id=uuid.uuid4(),
        job_id=uuid.uuid4(),
    )

    fp = StringIO(SAMPLE_XUNIT)

    handler = XunitHandler(jobstep)
    results = handler.get_tests(fp)

    assert len(results) == 2

    r1 = results[0]
    assert type(r1) == TestResult
    assert r1.step == jobstep
    assert r1.package is None
    assert r1.name == 'tests.test_report'
    assert r1.duration == 0.0
    assert r1.result == Result.failed
    assert r1.message == """tests/test_report.py:1: in <module>
>   import mock
E   ImportError: No module named mock"""
    r2 = results[1]
    assert type(r2) == TestResult
    assert r2.step == jobstep
    assert r2.package is None
    assert r2.name == 'tests.test_report.ParseTestResultsTest.test_simple'
    assert r2.duration == 1.65796279907
    assert r2.result == Result.passed
    assert r2.message == ''
    assert r2.reruns == 1
예제 #4
0
def test_result_generation_when_a_quarantined_test_has_two_cases():
    jobstep = JobStep(
        id=uuid.uuid4(),
        project_id=uuid.uuid4(),
        job_id=uuid.uuid4(),
    )

    XUNIT_STRING = (SAMPLE_XUNIT_DOUBLE_CASES.replace(
        '<testcase c', '<testcase quarantined="1" c',
        1).replace('<testcase c', '<testcase quarantined="1" c', 1))
    fp = StringIO(XUNIT_STRING)

    handler = XunitHandler(jobstep)
    results = handler.get_tests(fp)

    assert len(results) == 2

    r1 = results[0]
    assert type(r1) is TestResult
    assert r1.step == jobstep
    assert r1.package is None
    assert r1.name == 'test_simple.SampleTest.test_falsehood'
    assert r1.duration == 750.0
    assert r1.result == Result.quarantined_failed
    assert r1.message == ''
    assert len(r1.message_offsets) == 2
    label, start, length = r1.message_offsets[0]
    assert label == 'failure'
    assert XUNIT_STRING[start:start + length] == """\
test_simple.py:8: in test_falsehood
    assert False
E   AssertionError: assert False"""
    label, start, length = r1.message_offsets[1]
    assert label == 'error'
    assert XUNIT_STRING[start:start + length] == """\
test_simple.py:4: in tearDown
    1/0
E   ZeroDivisionError: integer division or modulo by zero"""
    assert r1.reruns == 3

    r2 = results[1]
    assert type(r2) is TestResult
    assert r2.step == jobstep
    assert r2.package is None
    assert r2.name == 'test_simple.SampleTest.test_truth'
    assert r2.duration == 1250.0
    assert r2.result == Result.failed
    assert r2.message is None
    assert len(r2.message_offsets) == 1
    label, start, length = r2.message_offsets[0]
    assert label == 'failure'
    assert XUNIT_STRING[start:start + length] == """\
test_simple.py:4: in tearDown
    1/0
E   ZeroDivisionError: integer division or modulo by zero"""
    assert r2.reruns == 0
예제 #5
0
def test_result_generation_when_a_quarantined_test_has_two_cases():
    jobstep = JobStep(
        id=uuid.uuid4(),
        project_id=uuid.uuid4(),
        job_id=uuid.uuid4(),
    )

    XUNIT_STRING = (SAMPLE_XUNIT_DOUBLE_CASES
                    .replace('<testcase c', '<testcase quarantined="1" c', 1)
                    .replace('<testcase c', '<testcase quarantined="1" c', 1))
    fp = StringIO(XUNIT_STRING)

    handler = XunitHandler(jobstep)
    results = handler.get_tests(fp)

    assert len(results) == 2

    r1 = results[0]
    assert type(r1) is TestResult
    assert r1.step == jobstep
    assert r1.package is None
    assert r1.name == 'test_simple.SampleTest.test_falsehood'
    assert r1.duration == 750.0
    assert r1.result == Result.quarantined_failed
    assert r1.message == ''
    assert len(r1.message_offsets) == 2
    label, start, length = r1.message_offsets[0]
    assert label == 'failure'
    assert XUNIT_STRING[start:start + length] == """\
test_simple.py:8: in test_falsehood
    assert False
E   AssertionError: assert False"""
    label, start, length = r1.message_offsets[1]
    assert label == 'error'
    assert XUNIT_STRING[start:start + length] == """\
test_simple.py:4: in tearDown
    1/0
E   ZeroDivisionError: integer division or modulo by zero"""
    assert r1.reruns == 3

    r2 = results[1]
    assert type(r2) is TestResult
    assert r2.step == jobstep
    assert r2.package is None
    assert r2.name == 'test_simple.SampleTest.test_truth'
    assert r2.duration == 1250.0
    assert r2.result == Result.failed
    assert r2.message is None
    assert len(r2.message_offsets) == 1
    label, start, length = r2.message_offsets[0]
    assert label == 'failure'
    assert XUNIT_STRING[start:start + length] == """\
test_simple.py:4: in tearDown
    1/0
E   ZeroDivisionError: integer division or modulo by zero"""
    assert r2.reruns == 0
예제 #6
0
def test_bad_encoding():
    jobstep = JobStep(
        id=uuid.uuid4(),
        project_id=uuid.uuid4(),
        job_id=uuid.uuid4(),
    )

    fp = StringIO(SAMPLE_XUNIT.replace('"utf-8"', '"utf8"'))

    handler = XunitHandler(jobstep)
    results = handler.get_tests(fp)

    assert len(results) == 3
예제 #7
0
def test_bad_encoding():
    jobstep = JobStep(
        id=uuid.uuid4(),
        project_id=uuid.uuid4(),
        job_id=uuid.uuid4(),
    )

    fp = StringIO(SAMPLE_XUNIT.replace('"utf-8"', '"utf8"'))

    handler = XunitHandler(jobstep)
    results = handler.get_tests(fp)

    assert len(results) == 3
예제 #8
0
def test_result_generation_when_a_quarantined_test_has_two_cases():
    jobstep = JobStep(id=uuid.uuid4(), project_id=uuid.uuid4(), job_id=uuid.uuid4())

    fp = StringIO(
        SAMPLE_XUNIT_DOUBLE_CASES.replace("<testcase c", '<testcase quarantined="1" c', 1).replace(
            "<testcase c", '<testcase quarantined="1" c', 1
        )
    )

    handler = XunitHandler(jobstep)
    results = handler.get_tests(fp)

    assert len(results) == 2

    r1 = results[0]
    assert type(r1) is TestResult
    assert r1.step == jobstep
    assert r1.package is None
    assert r1.name == "test_simple.SampleTest.test_falsehood"
    assert r1.duration == 750.0
    assert r1.result == Result.quarantined_failed
    assert (
        r1.message
        == """\
test_simple.py:8: in test_falsehood
    assert False
E   AssertionError: assert False

test_simple.py:4: in tearDown
    1/0
E   ZeroDivisionError: integer division or modulo by zero"""
    )
    assert r1.reruns == 3

    r2 = results[1]
    assert type(r2) is TestResult
    assert r2.step == jobstep
    assert r2.package is None
    assert r2.name == "test_simple.SampleTest.test_truth"
    assert r2.duration == 1250.0
    assert r2.result == Result.failed
    assert (
        r2.message
        == """\
test_simple.py:4: in tearDown
    1/0
E   ZeroDivisionError: integer division or modulo by zero"""
    )
    assert r2.reruns == 0
예제 #9
0
def test_result_generation_when_one_test_has_two_cases():
    jobstep = JobStep(
        id=uuid.uuid4(),
        project_id=uuid.uuid4(),
        job_id=uuid.uuid4(),
    )

    fp = StringIO(SAMPLE_XUNIT_DOUBLE_CASES)

    handler = XunitHandler(jobstep)
    results = handler.get_tests(fp)

    assert len(results) == 2

    r1 = results[0]
    assert type(r1) is TestResult
    assert r1.step == jobstep
    assert r1.package is None
    assert r1.name == 'test_simple.SampleTest.test_falsehood'
    assert r1.duration == 750.0
    assert r1.result == Result.failed
    assert r1.message == """\
test_simple.py:8: in test_falsehood
    assert False
E   AssertionError: assert False

test_simple.py:4: in tearDown
    1/0
E   ZeroDivisionError: integer division or modulo by zero"""
    assert r1.reruns == 0

    r2 = results[1]
    assert type(r2) is TestResult
    assert r2.step == jobstep
    assert r2.package is None
    assert r2.name == 'test_simple.SampleTest.test_truth'
    assert r2.duration == 1250.0
    assert r2.result == Result.failed
    assert r2.message == """\
test_simple.py:4: in tearDown
    1/0
E   ZeroDivisionError: integer division or modulo by zero"""
    assert r2.reruns == 0
예제 #10
0
    def test_from_file(self):
        project = self.create_project()
        build = self.create_build(project)
        job = self.create_job(build)
        jobphase = self.create_jobphase(job)
        jobstep = self.create_jobstep(jobphase)
        logger = logging.getLogger('xunit')

        path = os.path.join(os.path.dirname(__file__), 'fixtures', 'junit.xml.test')

        with open(path, 'rb') as fp:
            contents = fp.read()

        start = time.clock()
        handler = XunitHandler(jobstep)
        results = handler.get_tests(StringIO(contents))
        logger.info("XUnit handler ran in %f seconds." % (time.clock() - start))

        assert len(results) == 675
        assert results[0].name == 'tests.changes.api.test_build_details.TestCase'
        assert results[0].result == Result.skipped
        assert results[674].name == 'tests.changes.web.test_auth.LogoutViewTest.test_simple'
        assert results[674].result == Result.passed
예제 #11
0
def test_get_test_single_suite(xml, suite_name, duration):
    jobstep = JobStep(
        id=uuid.uuid4(),
        project_id=uuid.uuid4(),
        job_id=uuid.uuid4(),
    )

    fp = StringIO(xml)

    handler = XunitHandler(jobstep)
    suites = handler.get_test_suites(fp)
    assert len(suites) == 1
    assert suites[0].name == suite_name
    assert suites[0].duration == duration
    assert suites[0].result == Result.failed
    assert suites[0].date_created is not None

    # test the equivalence of get_tests and get_test_suites in the case where
    # there is only one test suite, so that we can call get_tests directly
    # in the rest of this file.
    fp.seek(0)
    other_results = handler.get_tests(fp)

    results = suites[0].test_results
    assert len(results) == len(other_results)
    for i in range(len(results)):
        assert other_results[i].step == results[i].step
        assert other_results[i].step == results[i].step
        assert other_results[i]._name == results[i]._name
        assert other_results[i]._package == results[i]._package
        assert other_results[i].message == results[i].message
        assert other_results[i].result is results[i].result
        assert other_results[i].duration == results[i].duration
        assert other_results[i].reruns == results[i].reruns
        assert other_results[i].artifacts == results[i].artifacts
        assert other_results[i].owner == results[i].owner
        assert other_results[i].message_offsets == results[i].message_offsets
예제 #12
0
def test_result_generation():
    jobstep = JobStep(
        id=uuid.uuid4(),
        project_id=uuid.uuid4(),
        job_id=uuid.uuid4(),
    )

    fp = StringIO(SAMPLE_XUNIT)

    handler = XunitHandler(jobstep)
    results = handler.get_tests(fp)

    assert len(results) == 3

    r1 = results[0]
    assert type(r1) == TestResult
    assert r1.step == jobstep
    assert r1.package is None
    assert r1.name == 'tests.test_report'
    assert r1.duration == 0.0
    assert r1.result == Result.failed
    assert r1.message is None
    assert len(r1.message_offsets) == 1
    label, start, length = r1.message_offsets[0]
    assert label == 'failure'
    assert SAMPLE_XUNIT[start:start + length] == """\
tests/test_report.py:1: in &lt;module&gt;
&gt;   import mock
E   ImportError: No module named mock"""
    assert r1.owner == 'foo'
    r2 = results[1]
    assert type(r2) == TestResult
    assert r2.step == jobstep
    assert r2.package is None
    assert r2.name == 'tests.test_report.ParseTestResultsTest.test_simple'
    assert r2.duration == 1.65796279907
    assert r2.result == Result.passed
    assert r2.message is None
    assert r2.message_offsets == []
    assert r2.reruns == 1
    assert r2.owner is None
    r3 = results[2]
    assert type(r3) == TestResult
    assert r3.step == jobstep
    assert r3.package is None
    assert r3.name == 'test_simple.SampleTest.test_falsehood'
    assert r3.duration == 500.0
    assert r3.result == Result.passed
    assert r3.message is None
    assert len(r3.message_offsets) == 3
    label, start, length = r3.message_offsets[0]
    assert label == 'system-out'
    assert SAMPLE_XUNIT[start:start + length] == 'Running SampleTest'
    label, start, length = r3.message_offsets[1]
    assert label == 'error'
    assert SAMPLE_XUNIT[start:start + length] == """\
test_simple.py:4: in tearDown
    1/0
E   ZeroDivisionError: integer division or modulo by zero"""
    label, start, length = r3.message_offsets[2]
    assert label == 'system-out'
    assert SAMPLE_XUNIT[start:start + length] == 'Running SampleTest'
    assert r3.reruns == 3
    assert r3.owner is None
예제 #13
0
def test_result_generation():
    jobstep = JobStep(
        id=uuid.uuid4(),
        project_id=uuid.uuid4(),
        job_id=uuid.uuid4(),
    )

    fp = StringIO(SAMPLE_XUNIT)

    handler = XunitHandler(jobstep)
    results = handler.get_tests(fp)

    assert len(results) == 3

    r1 = results[0]
    assert type(r1) == TestResult
    assert r1.step == jobstep
    assert r1.package is None
    assert r1.name == 'tests.test_report'
    assert r1.duration == 0.0
    assert r1.result == Result.failed
    assert r1.message is None
    assert len(r1.message_offsets) == 1
    label, start, length = r1.message_offsets[0]
    assert label == 'failure'
    assert SAMPLE_XUNIT[start:start + length] == """\
tests/test_report.py:1: in &lt;module&gt;
&gt;   import mock
E   ImportError: No module named mock"""
    assert r1.owner == 'foo'
    r2 = results[1]
    assert type(r2) == TestResult
    assert r2.step == jobstep
    assert r2.package is None
    assert r2.name == 'tests.test_report.ParseTestResultsTest.test_simple'
    assert r2.duration == 1.65796279907
    assert r2.result == Result.passed
    assert r2.message is None
    assert r2.message_offsets == []
    assert r2.reruns == 1
    assert r2.owner is None
    r3 = results[2]
    assert type(r3) == TestResult
    assert r3.step == jobstep
    assert r3.package is None
    assert r3.name == 'test_simple.SampleTest.test_falsehood'
    assert r3.duration == 500.0
    assert r3.result == Result.passed
    assert r3.message is None
    assert len(r3.message_offsets) == 3
    label, start, length = r3.message_offsets[0]
    assert label == 'system-out'
    assert SAMPLE_XUNIT[start:start + length] == 'Running SampleTest'
    label, start, length = r3.message_offsets[1]
    assert label == 'error'
    assert SAMPLE_XUNIT[start:start + length] == """\
test_simple.py:4: in tearDown
    1/0
E   ZeroDivisionError: integer division or modulo by zero"""
    label, start, length = r3.message_offsets[2]
    assert label == 'system-out'
    assert SAMPLE_XUNIT[start:start + length] == 'Running SampleTest'
    assert r3.reruns == 3
    assert r3.owner is None