1、PyUnit 用法
先来个简单计算器的示例:my_calculator.py
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
#!/usr/bin/env python # encoding: utf-8 """ A demo calcultor """ class MyCalculator: """ A calculator to realize the function of addition, subduction, multiplication and division """ def add(self, a, b): """add funtion""" return a+b def minus(self, a, b): """minux funtion""" return a-b def multiply(self, a, b): """multiply funtion""" return a*b def divide(self, a, b): """divide funtion""" return a/b; if __name__ == '__main__': calc = MyCalculator() print calc.add(1, 2) print calc.minus(1, 2) print calc.multiply(1, 2) print calc.divide(1, 2) |
如果被测试代码文件名为xxx.py,那么测试代码文件应该被命名为xxx_test.py,那么这里单测文件命名my_calculator_test.py,下面撰写单测文件,
首先引入unittest模块,编写一个测试类,继承至unittest.TestCase,
测试方法必须以 test开头,这样会在运行单测时被执行,否则不会被执行,但内置的setUp与tearDown两个方法除外,
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
#!/usr/bin/env python # encoding: utf-8 """ A test case for my_calcultor """ import unittest import my_calculator class MyCalculatorTestCase(unittest.TestCase): """A demo test case for MyCalculator""" def setUp(self): print 'Startup test:' self.calc = my_calculator.MyCalculator() def test_add(self): print 'test addition' c = self.calc.add(a=1, b=2) self.assertEqual(c, 3) def test_minus(self): print 'test subduction' d = self.calc.minus(a=1, b=2) self.assertEqual(d, 3) def test_multiply(self): print 'test multiplication' e = self.calc.multiply(a=1, b=2) self.assertGreater(e, 1) def test_divide(self): print 'test division' f = self.calc.divide(a=1, b=2) self.assertGreaterEqual(f, 0) def test_raise(self): print 'test exceptition' self.assertRaises(ZeroDivisionError, self.calc.divide, 1, 0) def tearDown(self): print 'Endwith test!' self.calc = None self.assertIsInstance() if __name__ == '__main__': unittest.main |
setUp和tearDown方法在每个单测前后都会执行一遍,可以将抽象的公共的前置和后置操作写到这两个方法中去。
运行方式:
- 将unittest.main添加到main函数中
12if __name__ == '__main__':unittest.main - 利用”python -m unittest 参数”的形式执行,参数为MyCalculatorTestCase则运行全部单测,参数为MyCalculatorTestCase.test_XXX则指定特定的单元测试进行。
12345678910111213141516171819202122232425262728293031323334353637python -m unittest MyCalculatorTestCaseLaunching unittests with arguments python -m unittest my_calculator_test.MyCalculatorTestCase in /Users/zhangjie49/PycharmProjects/python-learn/pyunit_testStartup test:test additionEndwith test!Startup test:test divisionEndwith test!Startup test:test subduction3 != -1Expected :-1Actual :3<Click to see difference>Traceback (most recent call last):File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/unittest/case.py", line 331, in runtestMethod()File "/Users/zhangjie49/PycharmProjects/python-learn/pyunit_test/my_calculator_test.py", line 25, in test_minusself.assertEqual(d, 3)Endwith test!Startup test:test multiplicationEndwith test!Startup test:test exceptitionEndwith test!Ran 5 tests in 0.006sFAILED (failures=1)
常用的方法有:
1 2 3 4 5 6 7 8 9 10 |
# 数值大小关系断言 assertEqual() # 异常断言 assertRaises(Exception类型,函数,函数参数[……]) # 包含关系 assertIn() # 类型判断 assertIsNone() assertTrue() assertIsInstance() |
2、参考文档
http://pyunit.sourceforge.net/pyunit_cn.html
https://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/00140137128705556022982cfd844b38d050add8565dcb9000
您好,博主请问能提供下,有几个问题想请教
按照您的流程部署后,nova和neutron命令非常慢 dashaboard也非常慢
请问需要提供下什么?确认下是否存在硬件配置的瓶颈,线上服务器服务运行是OK的。