在xmltestRunner的源代码中,他们将(系统输出)和(系统错误)的整个输出格式化为dom元素。因此,这就是您在整个系统执行的所有测试用例中争夺整个系统输出的原因。
xmltestrunner中的源代码
def _report_output(test_runner,xml_testsuite,xml_document):
"""
Appends the system-out and system-err sections to the XML document.
"""
systemout = xml_document.createElement('system-out')
xml_testsuite.appendChild(systemout)
systemout_text = xml_document.createCDATASection(sys.stdout.getvalue())
systemout.appendChild(systemout_text)
systemerr = xml_document.createElement('system-err')
xml_testsuite.appendChild(systemerr)
systemerr_text = xml_document.createCDATASection(sys.stderr.getvalue())
systemerr.appendChild(systemerr_text)
来源:
https://github.com/pycontribs/xmlrunner/blob/master/xmlrunner/xmlrunner.py
例如,如果您执行以下代码段
import sys
import datetime
import unittest
import xmlrunner
import random
class TestSomeFunc(unittest.TestCase):
def setUp(self):
self.seq = list(range(10))
def testCase(self,value):
with self.subTest(value=value):
result = False
print("Input")
print(value)
self.assertTrue(result,msg='Test failed for the case :: {0}'.format(value))
def test_some_func(self):
for i in random.sample(self.seq,10):
self.testCase(i)
if __name__ == '__main__':
currentTime = str(datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S'))
scriptName = sys.argv[0].split('.')[0]
testResultsName = scriptName + '_' + currentTime
unittest.main(
testRunner=xmlrunner.XMLTestRunner(output='testResults/' + testResultsName),failfast=False,buffer=True,catchbreak=False,exit=False)
您的xml如下所示
<?xml version="1.0" encoding="UTF-8"?>
<testsuite errors="1" failures="10" file=".py" name="TestSomeFunc-20191118181814" skipped="0" tests="11" time="0.044" timestamp="2019-11-18T18:18:14">
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="18" name="test_some_func (value=1)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 1" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",line 16,in testCase
self.assertTrue(result,msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 1
]]> </failure>
<system-out>
<![CDATA[Input
1
Input
0
Input
7
Input
6
Input
2
Input
8
Input
4
Input
3
Input
9
Input
5
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="18" name="test_some_func (value=0)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 0" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 0
]]> </failure>
<system-out>
<![CDATA[Input
1
Input
0
Input
7
Input
6
Input
2
Input
8
Input
4
Input
3
Input
9
Input
5
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="18" name="test_some_func (value=7)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 7" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 7
]]> </failure>
<system-out>
<![CDATA[Input
1
Input
0
Input
7
Input
6
Input
2
Input
8
Input
4
Input
3
Input
9
Input
5
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="18" name="test_some_func (value=6)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 6" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 6
]]> </failure>
<system-out>
<![CDATA[Input
1
Input
0
Input
7
Input
6
Input
2
Input
8
Input
4
Input
3
Input
9
Input
5
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="18" name="test_some_func (value=2)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 2" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 2
]]> </failure>
<system-out>
<![CDATA[Input
1
Input
0
Input
7
Input
6
Input
2
Input
8
Input
4
Input
3
Input
9
Input
5
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="18" name="test_some_func (value=8)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 8" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 8
]]> </failure>
<system-out>
<![CDATA[Input
1
Input
0
Input
7
Input
6
Input
2
Input
8
Input
4
Input
3
Input
9
Input
5
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="18" name="test_some_func (value=4)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 4" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 4
]]> </failure>
<system-out>
<![CDATA[Input
1
Input
0
Input
7
Input
6
Input
2
Input
8
Input
4
Input
3
Input
9
Input
5
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="18" name="test_some_func (value=3)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 3" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 3
]]> </failure>
<system-out>
<![CDATA[Input
1
Input
0
Input
7
Input
6
Input
2
Input
8
Input
4
Input
3
Input
9
Input
5
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="18" name="test_some_func (value=9)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 9" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 9
]]> </failure>
<system-out>
<![CDATA[Input
1
Input
0
Input
7
Input
6
Input
2
Input
8
Input
4
Input
3
Input
9
Input
5
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="18" name="test_some_func (value=5)" time="0.037" timestamp="2019-11-18T18:18:14">
<failure message="False is not true : Test failed for the case :: 5" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 5
]]> </failure>
<system-out>
<![CDATA[Input
1
Input
0
Input
7
Input
6
Input
2
Input
8
Input
4
Input
3
Input
9
Input
5
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="11" name="testCase" time="0.007" timestamp="2019-11-18T18:18:14">
<error message="testCase() missing 1 required positional argument: 'value'" type="TypeError">
<![CDATA[TypeError: testCase() missing 1 required positional argument: 'value'
]]> </error>
<system-out>
<![CDATA[]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
</testsuite>
如果您确实需要获取失败的值,可以在assetTrue中使用“ msg”参数,类似这样
self.assertTrue(result,msg='Test failed for the case :: {0}'.format(value))
为了更加清楚,如果将print语句添加到测试用例之外,那么您也可以在每个测试用例中获得该语句,下面是显示该语句的代码段。
import sys
import datetime
import unittest
import xmlrunner
import random
class TestSomeFunc(unittest.TestCase):
def setUp(self):
self.seq = list(range(10))
def testCase(self,value):
with self.subTest(value=value):
result = False
self.assertTrue(result,10):
self.testCase(i)
print("Input")
if __name__ == '__main__':
currentTime = str(datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S'))
scriptName = sys.argv[0].split('.')[0]
testResultsName = scriptName + '_' + currentTime
unittest.main(
testRunner=xmlrunner.XMLTestRunner(output='testResults/' + testResultsName),exit=False)
以上的XML输出。
<?xml version="1.0" encoding="UTF-8"?>
<testsuite errors="1" failures="10" file=".py" name="TestSomeFunc-20191118182556" skipped="0" tests="11" time="0.014" timestamp="2019-11-18T18:25:56">
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="16" name="test_some_func (value=7)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 7" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",line 14,msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 7
]]> </failure>
<system-out>
<![CDATA[Input
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="16" name="test_some_func (value=6)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 6" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 6
]]> </failure>
<system-out>
<![CDATA[Input
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="16" name="test_some_func (value=4)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 4" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 4
]]> </failure>
<system-out>
<![CDATA[Input
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="16" name="test_some_func (value=2)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 2" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 2
]]> </failure>
<system-out>
<![CDATA[Input
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="16" name="test_some_func (value=0)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 0" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 0
]]> </failure>
<system-out>
<![CDATA[Input
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="16" name="test_some_func (value=8)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 8" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 8
]]> </failure>
<system-out>
<![CDATA[Input
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="16" name="test_some_func (value=1)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 1" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 1
]]> </failure>
<system-out>
<![CDATA[Input
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="16" name="test_some_func (value=9)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 9" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 9
]]> </failure>
<system-out>
<![CDATA[Input
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="16" name="test_some_func (value=5)" time="0.000" timestamp="0001-01-01T00:00:00">
<failure message="False is not true : Test failed for the case :: 5" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 5
]]> </failure>
<system-out>
<![CDATA[Input
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="16" name="test_some_func (value=3)" time="0.007" timestamp="2019-11-18T18:25:56">
<failure message="False is not true : Test failed for the case :: 3" type="AssertionError">
<![CDATA[Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(value))
AssertionError: False is not true : Test failed for the case :: 3
]]> </failure>
<system-out>
<![CDATA[Input
]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
<testcase classname="TestSomeFunc" file="sampleInstancetest.py" line="11" name="testCase" time="0.007" timestamp="2019-11-18T18:25:56">
<error message="testCase() missing 1 required positional argument: 'value'" type="TypeError">
<![CDATA[TypeError: testCase() missing 1 required positional argument: 'value'
]]> </error>
<system-out>
<![CDATA[]]> </system-out>
<system-err>
<![CDATA[]]> </system-err>
</testcase>
</testsuite>
在控制台中打印必要消息的小解决方法如下
import sys
import datetime
import unittest
import xmlrunner
import random
import sys,string
import traceback
import time
class TestSomeFunc(unittest.TestCase):
def setUp(self):
self.seq = list(range(10))
def test_some_func(self):
for index in random.sample(self.seq,3):
try:
with self.subTest(index=index):
result = False
messsage = "stdout :: Test failed at index :: "+str(index)
print(messsage,file=sys.__stdout__)
self.assertTrue(result,msg='Test failed for the case :: {0}'.format(index))
except AssertionError:
print("Exception")
if __name__ == '__main__':
currentTime = str(datetime.datetime.now().strftime('%Y-%m-%d_%H-%M-%S'))
scriptName = sys.argv[0].split('.')[0]
testResultsName = scriptName + '_' + currentTime
unittest.main(
testRunner=xmlrunner.XMLTestRunner(output='testResults/' + testResultsName),exit=False)
控制台输出:
Running tests...
----------------------------------------------------------------------
stdout :: Test failed at index :: 4
stdout :: Test failed at index :: 0
stdout :: Test failed at index :: 5
F
======================================================================
FAIL [0.000s]: test_some_func (__main__.TestSomeFunc) (index=4)
----------------------------------------------------------------------
Traceback (most recent call last):
File "sampleInstancetest.py",line 21,in test_some_func
self.assertTrue(result,msg='Test failed for the case :: {0}'.format(index))
AssertionError: False is not true : Test failed for the case :: 4
======================================================================
FAIL [0.000s]: test_some_func (__main__.TestSomeFunc) (index=0)
----------------------------------------------------------------------
Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(index))
AssertionError: False is not true : Test failed for the case :: 0
======================================================================
FAIL [0.014s]: test_some_func (__main__.TestSomeFunc) (index=5)
----------------------------------------------------------------------
Traceback (most recent call last):
File "sampleInstancetest.py",msg='Test failed for the case :: {0}'.format(index))
AssertionError: False is not true : Test failed for the case :: 5
----------------------------------------------------------------------
Ran 1 test in 0.014s
FAILED (failures=3)
Generating XML reports...
来源:
https://github.com/xmlrunner/unittest-xml-reporting/issues/156
https://github.com/xmlrunner/unittest-xml-reporting/pull/166
本文链接:https://www.f2er.com/3123618.html