File: test_xunit2.py

package info (click to toggle)
junitparser 4.0.2-1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 324 kB
  • sloc: python: 2,166; xml: 81; makefile: 14
file content (240 lines) | stat: -rw-r--r-- 9,422 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
from junitparser.xunit2 import JUnitXml, TestSuite, TestCase, RerunFailure, RerunError, FlakyFailure, FlakyError
from junitparser import Failure
from copy import deepcopy


class Test_TestCase:
    def test_case_rerun_fromstring(self):
        text = """<testcase name="testname">
        <failure message="failure message" type="FailureType"/>
        <rerunFailure message="Not found" type="404">
            <system-out>No ha encontrado</system-out>
        </rerunFailure>
        <rerunFailure message="Server error" type="500">
            <system-err>Error del servidor</system-err>
            <stackTrace>Stacktrace</stackTrace>
        </rerunFailure>
        <rerunError message="Setup error"/>
        <system-out>System out</system-out>
        <system-err>System err</system-err>
        </testcase>"""
        case = TestCase.fromstring(text)
        assert isinstance(case, TestCase)
        assert case.name == "testname"
        assert len(case.result) == 1
        assert isinstance(case.result[0], Failure)
        assert case.system_out == "System out"
        assert case.system_err == "System err"
        assert case.is_passed is False
        assert case.is_failure is True
        assert case.is_error is False
        assert case.is_skipped is False
        assert case.is_rerun is True
        assert case.is_flaky is False

        interim_results = case.interim_result
        assert len(interim_results) == 3
        assert isinstance(interim_results[0], RerunFailure)
        assert isinstance(interim_results[1], RerunFailure)
        assert isinstance(interim_results[2], RerunError)

        rerun_failures = case.rerun_failures()
        assert len(rerun_failures) == 2
        assert isinstance(rerun_failures[0], RerunFailure)
        assert rerun_failures[0].message == "Not found"
        assert rerun_failures[0].stack_trace is None
        assert rerun_failures[0].system_out == "No ha encontrado"
        assert rerun_failures[0].system_err is None
        assert isinstance(rerun_failures[1], RerunFailure)
        assert rerun_failures[1].message == "Server error"
        assert rerun_failures[1].stack_trace == "Stacktrace"
        assert rerun_failures[1].system_out is None
        assert rerun_failures[1].system_err == "Error del servidor"

        rerun_errors = case.rerun_errors()
        assert len(rerun_errors) == 1
        assert isinstance(rerun_errors[0], RerunError)
        assert rerun_errors[0].message == "Setup error"
        assert rerun_errors[0].stack_trace is None
        assert rerun_errors[0].system_out is None
        assert rerun_errors[0].system_err is None

        assert len(case.flaky_failures()) == 0

        assert len(case.flaky_errors()) == 0

    def test_case_flaky_fromstring(self):
        text = """<testcase name="testname">
        <flakyFailure message="Not found" type="404">
            <system-out>No ha encontrado</system-out>
        </flakyFailure>
        <flakyFailure message="Server error" type="500">
            <system-err>Error del servidor</system-err>
            <stackTrace>Stacktrace</stackTrace>
        </flakyFailure>
        <flakyError message="Setup error"/>
        <system-out>System out</system-out>
        <system-err>System err</system-err>
        </testcase>"""
        case = TestCase.fromstring(text)
        assert case.name == "testname"
        assert len(case.result) == 0
        assert case.system_out == "System out"
        assert case.system_err == "System err"
        assert case.is_passed is True
        assert case.is_failure is False
        assert case.is_error is False
        assert case.is_skipped is False
        assert case.is_rerun is False
        assert case.is_flaky is True

        interim_results = case.interim_result
        assert len(interim_results) == 3
        assert isinstance(interim_results[0], FlakyFailure)
        assert isinstance(interim_results[1], FlakyFailure)
        assert isinstance(interim_results[2], FlakyError)

        assert len(case.rerun_failures()) == 0

        assert len(case.rerun_errors()) == 0

        flaky_failures = case.flaky_failures()
        assert len(flaky_failures) == 2
        assert isinstance(flaky_failures[0], FlakyFailure)
        assert flaky_failures[0].message == "Not found"
        assert flaky_failures[0].stack_trace is None
        assert flaky_failures[0].system_out == "No ha encontrado"
        assert flaky_failures[0].system_err is None
        assert isinstance(flaky_failures[1], FlakyFailure)
        assert flaky_failures[1].message == "Server error"
        assert flaky_failures[1].stack_trace == "Stacktrace"
        assert flaky_failures[1].system_out is None
        assert flaky_failures[1].system_err == "Error del servidor"

        flaky_errors = case.flaky_errors()
        assert len(flaky_errors) == 1
        assert isinstance(flaky_errors[0], FlakyError)
        assert flaky_errors[0].message == "Setup error"
        assert flaky_errors[0].stack_trace is None
        assert flaky_errors[0].system_out is None
        assert flaky_errors[0].system_err is None

    def test_case_rerun(self):
        case = TestCase("testname")
        rerun_failure = RerunFailure("Not found", "404")
        assert rerun_failure.system_out is None
        assert rerun_failure.system_err is None
        rerun_failure.stack_trace = "Stack"
        rerun_failure.system_err = "E404"
        rerun_failure.system_out = "NOT FOUND"
        case.add_interim_result(rerun_failure)
        assert len(case.rerun_failures()) == 1
        # Interesting, same object is only added once by xml libs
        failure2 = deepcopy(rerun_failure)
        failure2.stack_trace = "Stack2"
        failure2.system_err = "E401"
        failure2.system_out = "401 Error"
        case.add_interim_result(failure2)
        assert len(case.rerun_failures()) == 2


class Test_TestSuite:
    def test_properties(self):
        suite = TestSuite("mySuite")
        assert suite.system_out is None
        assert suite.system_err is None
        suite.system_err = "System err"
        suite.system_out = "System out"
        assert suite.system_out == "System out"
        assert suite.system_err == "System err"
        suite.system_err = "System err2"
        suite.system_out = "System out2"
        assert suite.system_out == "System out2"
        assert suite.system_err == "System err2"

    def test_iterate_case(self):
        suite = TestSuite("mySuite")
        suite.add_testcase(TestCase("test1"))
        case = next(iter(suite))
        assert case.name == "test1"

    def test_iterate_suite(self):
        suite = TestSuite("mySuite")
        suite.add_testsuite(TestSuite("suite1"))
        suite = next(suite.testsuites())
        assert isinstance(suite, TestSuite)
        assert suite.name == "suite1"

    def test_remove_case(self):
        suite = TestSuite("mySuite")
        test = TestCase("test1")
        suite.add_testcase(test)
        suite.remove_testcase(test)
        assert len(suite) == 0

    def test_add_testsuites(self):
        suite1 = TestSuite("suite1")
        suite2 = TestSuite("suite2")
        suites = suite1 + suite2
        assert isinstance(suites, JUnitXml)
        assert len(list(iter(suites))) == 2

    def test_iadd_testsuites(self):
        suite1 = TestSuite("suite1")
        suite2 = TestSuite("suite2")
        suite1 += suite2
        assert isinstance(suite1, JUnitXml)
        assert len(list(iter(suite1))) == 2


class Test_JUnitXml:
    def test_init(self):
        xml = JUnitXml("tests")
        assert xml.name == "tests"
        xml = JUnitXml("myname")
        xml.add_testsuite(TestSuite("suite1"))
        xml.update_statistics()
        assert xml.skipped is None
        assert xml.tostring().count(b"errors") == 2
        assert xml.tostring().count(b"skipped") == 1

    def test_fromstring(self):
        text = """<testsuites><testsuite name="suitename1">
        <testcase name="testname1">
        </testcase></testsuite>
        <testsuite name="suitename2">
        <testcase name="testname2"/>
        <testcase name="testname3">
        </testcase></testsuite></testsuites>"""
        xml = JUnitXml.fromstring(text)
        assert isinstance(xml, JUnitXml)
        suites = list(xml)
        assert len(suites) == 2
        suite1, suite2 = suites
        assert isinstance(suite1, TestSuite)
        assert isinstance(suite2, TestSuite)
        assert suite1.name == "suitename1"
        assert suite2.name == "suitename2"
        cases = list(suite2)
        assert len(cases) == 2
        assert isinstance(cases[0], TestCase)
        assert isinstance(cases[1], TestCase)
        assert [test.name for test in cases] == ["testname2", "testname3"]

    def test_suite_fromstring(self):
        text = """<testsuite name="suite name">
         <testcase name="test name 1"/>
         <testcase name="test name 2"/>
        </testsuite>"""
        xml = JUnitXml.fromstring(text)
        assert isinstance(xml, JUnitXml)
        suites = list(xml)
        assert len(suites) == 1
        suite = suites[0]
        assert isinstance(suite, TestSuite)
        assert suite.name == "suite name"
        cases = list(suite)
        assert len(cases) == 2
        assert isinstance(cases[0], TestCase)
        assert isinstance(cases[1], TestCase)
        assert [test.name for test in suite] == ["test name 1", "test name 2"]