我最近更新文章比较频繁,介绍了比较多的测试方面的知识。其实主要是为了讲到今天的内容,为什么我急于讲到这个内容?测试工作做久了我们往往会有一个困惑,如何量化我们的工作价值?产品经理设计了更友善更实用的产品,研发人员用代码将这些功能实现,UI 工程师将这些功能以吸引人的方式体现出来,一个产品的形成他们总是被想到的功臣。测试人员总是被习惯性的忽视,但是产品出了问题,所有的矛头又都指向了测试人员。这都是他妈的什么玩意嘛。所以今天讲到的这个尽管他有很多用处,但是我认为他最重要的一个用处是测试人员价值的一个直观体现。
Usage
import HtmlTestRunner
import unittest
class TestStringMethods(unittest.TestCase):
# Example test for HtmlRunner.
def test_upper(self):
self.assertEqual('foo'.upper(), 'FOO')
def test_isupper(self):
self.assertTrue('FOO'.isupper())
self.assertFalse('Foo'.isupper())
def test_split(self):
s = 'hello world'
self.assertEqual(s.split(), ['hello', 'world'])
# check that s.split fails when the separator is not a string
with self.assertRaises(TypeError):
s.split(2)
def test_error(self):
""" This test should be marked as error one. """
raise ValueError
def test_fail(self):
""" This test should fail. """
self.assertEqual(1, 2)
@unittest.skip("This is a skipped test.")
def test_skip(self):
""" This test should be skipped. """
pass
if __name__ == '__main__':
unittest.main(testRunner=HtmlTestRunner.HTMLTestRunner(output='example_dir'))
上面这个示例是一个完整可执行的脚本,并可生成测试报告。
只需从包中导入HtmlTestRunner
,然后使用关键字testRunner
将其传递给unittest.main
。这个类只有一个必需的参数,output
是用来放置TestCase的报告的,它保存在一个reports目录下。
report_title
是显示在测试报告顶部的标题,比如上面的Test Result,如果用户不设置该参数,则使用该默认值。
对于拥有test suites
(测试套件)的人来说,它也可以工作,只需创建一个runner实例,并使用您的套件调用run方法。下面一个例子:
from unittest import TestLoader, TestSuite
from HtmlTestRunner import HTMLTestRunner
import ExampleTest
import Example2Test
example_tests = TestLoader().loadTestsFromTestCase(ExampleTests)
example2_tests = TestLoader().loadTestsFromTestCase(Example2Test)
suite = TestSuite([example_tests, example2_tests])
runner = HTMLTestRunner(output='example_suite')
runner.run(suite)
这是runner默认使用的模板的结果示例。如果您想使用自己的模板,可以在实例化HtmlTestRunner类时将abolute路径传递给它,比如HtmlTestRunner(output='example_suite', template='path/to/template', report_title='My Report')
。您的模板必须使用jinja2语法,因为这是我们使用的引擎。
HTMLTestRunner.py 下载地址。下载之后将该文件放到 Python 的安装目录下。
网友评论