如何生成Python单元测试报告并以HTML格式呈现。
再次回答......可以使用HTMLTestRunner生成测试报告,例如:
import random
import unittest
import HTMLTestRunner
class TestSequenceFunctions(unittest.TestCase):
def setUp(self):
self.seq = range(10)
def test_shuffle(self):
# make sure the shuffled sequence does not lose any elements
random.shuffle(self.seq)
self.seq.sort()
self.assertEqual(self.seq, range(10))
# should raise an exception for an immutable sequence
self.assertRaises(TypeError, random.shuffle, (1,2,3))
@unittest.skip("Test Skipped1")
def test_choicep(self):
element = random.choice(self.seq)
self.assertTrue(element in self.seq)
@unittest.skip("Test Skipped2")
def test_samplep(self):
with self.assertRaises(ValueError):
random.sample(self.seq, 20)
for element in random.sample(self.seq, 5):
self.assertTrue(element in self.seq)
suite = unittest.TestLoader().loadTestsFromTestCase(TestSequenceFunctions)
unittest.TextTestRunner(verbosity=2).run(suite)
outfile = open("C:\Report.html", "w")
runner = HTMLTestRunner.HTMLTestRunner(
stream=outfile,
title='Test Report',
description='This demonstrates the report output by Prasanna.Yelsangikar.'
)
runner.run(suite)
我喜欢使用pytest-html
,因为它与unittest
兼容。如果您已经定义了一个测试套件,只需运行以下命令即可:
pip install pytest pytest-html
pytest -v suite.py --html=pytest_report.html --self-contained-html
pip install nose
。python setup.py install
。nosetests --with-html-out
,测试结果会保存在名为 results.html
的文件中。result.html
。因此,最终只会有一个result.html
文件。但是,我想要与我运行的nosetests数量相同的html文件。我该怎么做? - Karthik--html-out-file
选项来指定文件名。例如,尝试运行nosetests --with-html-out --html-out-file=my_results_file_name.html
。希望这能帮到你。 - melqkiades#!/bin/bash
for f in *.py
do
echo "$f"
nosetests "$f" --with-html --html-file="$f".html
done
这个可以正常工作。 - Karthik我不太了解HTML,但是Nose可以通过--with-xunit
选项生成XUnit XML报告。
安装HTMLTestRunner-rv
pip install HTMLTestRunner-rv
import unittest
from test_print_all_details import TestCasePrintAllDetails
from test_by_id import TestCaseDetailsById
from test_details_by_name import TestCaseDetailsByNmae
from HTMLTestRunner import HTMLTestRunner
def test_suite():
test1 = unittest.TestLoader().loadTestsFromTestCase(TestCasePrintAllDetails)
test2 = unittest.TestLoader().loadTestsFromTestCase(TestCaseDetailsById)
test3 = unittest.TestLoader().loadTestsFromTestCase(TestCaseDetailsByNmae)
suite = unittest.TestSuite([test1,test2,test3])
runner = HTMLTestRunner(log=True, verbosity=2, output='report', title='Test report', report_name='report',
open_in_browser=True, description="HTMLTestReport")
runner.run(suite)
if __name__ == '__main__':
test_suite()
unittest.TextTestRunner::run
启动,然后由HTMLTestRunner::run
启动。你应该删除unittest.TextTestRunner(verbosity=2).run(suite)
这一行。 - Jury