python单元测试简单使用介绍,在openstack/tempest测试框架也是基于unitest发展而来的。
python-unittest测试基础框架
基础demo
import unittest
class TestStringMethods(unittest.TestCase):
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)
if __name__ == '__main__':
unittest.main()
我们可以调用unittest.main()来运行单元测试用例,除此之外我们还可以使用python -m unittest 测试文件(不要输入.py)的方式进行。
Mock框架
基础demo
import mock
class Foo:
def eat(self):
print "eating eating all the time!"
foo = Foo()
foo.eat()
foo.eat = mock.Mock(return_value=123)
# it would return a 3
foo.eat()
foo.eat = mock.Mock(side_effect=KeyError("idiot"))
# it would raise a key error exception
foo.eat()
values = {"a": 1, "b":2, "c":3}
def side_effect(args):
return values[args]
mock = Mock()
mock.side_effect = side_effect
# return 1
mock("a")
# return 2
mock("b")
# return 3
mock("c")
在这个例子中,我们使用了mock.Mock()。除了使用Mock
类之外,我们还可以使用mock.MagicMock
类,该类是mock.Mock
子类,已经实现了mock.Mock
类的大多数方法。So,推荐使用MagicMock
类。
patch装饰器
patch()
装饰器能够在测试用例中轻而易举地mock出用测试的类。
import mock
@mock.patch("module.class1", return_value=1)
@mock.patch("module.class2")
def test(mock_class_2,mock_class_1):
mock_class_2.return_value = 3
self.asserteq(mock_class_2.return_value, 2)
ddt框架
DDT(Data-Driven Tests)容许我们在写测试用例的时候产生不同的测试用例。
ddt 基础demo
import unittest
import ddt
@ddt.ddt
class FooTest(unittest.TestCase):
@ddt.data(123)
def test_demo1(self, value):
print value
@ddt.data({"a":1, "b":2})
@ddt.unpack
def test_demo2(self, a, b):
print a
print b
coverage框架
Coverage.py是测试代码python程序覆盖度的测试框架,coverage会监测你的程序,分析代码的执行情况。
基础用法
进入源码更目录,执行 coverage report -m
(-m会显示未被执行的代码行)。执行coverage html
会输出覆盖度执行报告。