Python单元测试报告生成HTML

12

如何生成Python单元测试报告并以HTML格式呈现。

6个回答

9

再次回答......可以使用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)

在C:\Report.html中以HTML格式获取结果,为了跳过需要在HTMLTestRunner.py文件中进行自定义。

3
在这段代码中,你的测试将会运行 两次。首先,由 unittest.TextTestRunner::run 启动,然后由 HTMLTestRunner::run 启动。你应该删除 unittest.TextTestRunner(verbosity=2).run(suite) 这一行。 - Jury
对于HTMLTestRunner,有没有一种方法可以使用python -m unittest运行单元测试并生成文件?我必须使用python unit_test.py运行脚本,但我不想这样做,因为我正在创建可重用的CI/CD管道,覆盖我们拥有的所有repo。 - urvish patel

3

我喜欢使用pytest-html,因为它与unittest兼容。如果您已经定义了一个测试套件,只需运行以下命令即可:

pip install pytest pytest-html
pytest -v suite.py --html=pytest_report.html --self-contained-html

3
我使用了 nosenose-html-output 插件,效果非常好。
安装 nose 只需输入 pip install nose
然后安装 nose-html 插件,输入 python setup.py install
最后运行单元测试,输入 nosetests --with-html-out,测试结果会保存在名为 results.html 的文件中。

这并没有真正回答核心问题 - 它使用完全不同的解决方案来回答问题。 - rh0dium
该解决方案会生成一个以HTML格式呈现的Python单元测试报告。我不明白它为什么与问题无关。 - melqkiades
@melqkiades 我们有没有更改生成报告名称的选项。如果我要运行多个nosetests,那么每次都会创建result.html。因此,最终只会有一个result.html文件。但是,我想要与我运行的nosetests数量相同的html文件。我该怎么做? - Karthik
1
@Karthik,你可以使用--html-out-file选项来指定文件名。例如,尝试运行nosetests --with-html-out --html-out-file=my_results_file_name.html。希望这能帮到你。 - melqkiades
我会尝试一下。同时,我创建了一个bash脚本来运行所有文件并为每个文件创建报告。#!/bin/bash for f in *.py do echo "$f" nosetests "$f" --with-html --html-file="$f".html done这个可以正常工作。 - Karthik
当我的测试失败时,选项--with-xunit不生成报告?你知道为什么吗? - rota90

3

我不太了解HTML,但是Nose可以通过--with-xunit选项生成XUnit XML报告。


在某个水平上,我用Python单元测试的Nose HTML报告生成得到了解决方案。直到今天结束,我认为我会获得解决方案。感谢您的支持... - passionTime
2
@prasanna.yelsangika:“谢谢”最好表达为帮助您解决问题的答案左侧的绿色勾选标记(http://stackoverflow.com/faq#howtoask)。 - johnsyweb
我的问题的答案在链接http://testoob.sourceforge.net/features.html中,我使用testoob工具生成了Python单元测试报告的XML / HTML格式,但我生成了XML格式,但我遇到了HTML问题。一旦我得到答案,我会发布...... - passionTime
@prasanna.yelsangika:那么请在此处发布您自己的答案,并将其标记为已接受。 - aknuds1
Python单元测试报告可以轻松地通过两种方式生成:
  1. Testoob:在命令提示符中输入python Python_File_name --xml/html=file_Path
  2. HTMLTestRunner:包括HTMLTestRunner.py并添加以下代码行: outfile = open("C:\Report.html", "w") runner = HTMLTestRunner.HTMLTestRunner( stream=outfile, title='测试报告', description='这是HTMLTestRunner生成的报告。') runner.run(testshuffle)
- passionTime

1

安装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()

1

什么样的报告?我假设你是指测试覆盖率,因为如果你有多个失败的单元测试,那么你就错了。

看看 Nose

nosetests --with-coverage --cover-html

仅以HTML格式传递通过、失败、跳过和错误报告,不包括代码覆盖率报告。 - passionTime
3
也许你想先仔细查看自己,看看这份报告显然是由http://tungwaiyip.info/software/HTMLTestRunner.html生成的。 - user2665694
好的,有没有其他方法可以生成上述HTML格式的报告? - passionTime
1
@prasanna.yelsangika:我有一个想法。如果你想要生成与HTMLTestRunner完全相同的报告,请尝试一个名为HTMLTestRunner的产品(正如@pynator在几个评论中建议的那样)!希望这可以帮到你。祝你有愉快的一天。 - johnsyweb
1
@prasanna.yelsangika:我给了你HTMLTestRunner项目页面的链接。希望你能认真阅读 - 请睁大你的眼睛! - user2665694
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接