- 基本使用
import unittest
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
print("这是类方法前置条件")
@classmethod
def tearDownClass(cls):
print("这是类方法后置条件")
def setUp(self):
self.number=input('Enter a number:')
self.number=int(self.number)
def test_case1(self):
print self.number
self.assertEqual(self.number,10,msg='Your input is not 10')
def test_case2(self):
print self.number
self.assertEqual(self.number,20,msg='Your input is not 20')
@unittest.skip('跳过用例3')
def test_case3(self):
print self.number
self.assertEqual(self.number,30,msg='Your input is not 30')
def tearDown(self):
print 'Test over'
'''
1:
'''
if __name__=='__main__':
unittest.main()
'''
2:
suite=unittest.TestSuite()
suite.addTest(Test('test_case2'))
suite.addTest(Test('test_case1'))
runner=unittest.TextTestRunner()
runner.run(suite)
'''
'''
3:
test_dir = './'
discover = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')
runner=unittest.TextTestRunner()
runner.run(discover)
'''
- 通过suite.addTest加载case
import unittest
from test_case import test_baidu
from test_case import test_youdao
if __name__=='__main__':
suite = unittest.TestSuite()
suite.addTest(test_baidu.BaiduTest('test_baidu'))
suite.addTest(test_youdao.YoudaoTest('test_youdao'))
runner = unittest.TextTestRunner()
runner.run(suite)
#或者
if __name__=='__main__':
suite = unittest.TestSuite()
tests = [Test3("test_add"), Test3("test_minus"), Test3("test_multi"), Test3("test_divide")]
tests2 = [Test32("test_add"), Test32("test_minus"), Test32("test_multi"), Test32("test_divide")]
suite.addTests(tests)
suite.addTests(tests2)
runner = unittest.TextTestRunner()
runner.run(suite)
- 通过defaultTestLoader.discover加载case
if __name__ == "__main__":
suites = unittest.defaultTestLoader.discover('../testcase', 'test_*.py')
runner= unittest.TextTestRunner()
runner.run(suites)
- 通过TextTestRunner执行case
if __name__ == "__main__":
now = time.strftime("%Y-%m-%d %H_%M_%S")
test_reports_address = '../report'
filename = '../report/' + now + 'report.html'
fp = open(filename, 'wb')
suites = unittest.defaultTestLoader.discover('../testcase', 'test_*.py')
runner= unittest.TextTestRunner()
runner.run(suites)
- 通过HTMLTestRunner执行case
if __name__ == "__main__":
now = time.strftime("%Y-%m-%d %H_%M_%S")
test_reports_address = '../report'
filename = '../report/' + now + 'report.html'
fp = open(filename, 'wb')
suites = unittest.defaultTestLoader.discover('../testcase', 'test_*.py')
runner = HTMLTestRunner.HTMLTestRunner(stream=fp, title=u'title')
runner.run(suites)
- 直接添加测试类到测试套件中
from unittest import TestLoader
from test1 import myunittest
if __name__ == '__main__':
suite = unittest.TestSuite()
loader = TestLoader()
test_cases1 = unittest.TestLoader().loadTestsFromTestCase(myunittest)
# 参数是一个类,而这个类必须是unittest.TestCase的子类或者孙类
suite.addTests(test_cases1)
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
- 直接加载一个模块到测试套件中,如果这个模块中有多个类,则会把所有的类的测试案例加载到测试套件中
from unittest import TestLoader
loader = TestLoader()
#导入方式1
import run2
cases1 = unittest.TestLoader().loadTestsFromModule(run2)
#导入方式2
# cases1 = unittest.TestLoader().loadTestsFromModule(__import__('run2'))
suite = unittest.TestSuite()
suite.addTest(cases1)
runner = HTMLTestRunner.HTMLTestRunner(stream=fp)
runner.run(suite)
- 输出日志的控制
if __name__ == '__main__':
suite = unittest.TestSuite()
tests = [Test3("test_add"), Test3("test_minus"), Test3("test_multi"), Test3("test_divide")]
suite.addTests(tests)
# 输出信息到txt文件中
with open('UnittestTextReport.txt', 'a') as f:
runner = unittest.TextTestRunner(stream=f, verbosity=2)
runner.run(suite)
- 忽略执行案例
#1、无条件跳过该案例,用该装饰器修饰要执行的案例,则该案例会被忽略不执行
@unittest.skip("do not exec")
# 无条件跳过执行该案例
def test_add(self):
self.assertEqual(3,func.add(1,2))
#2、满足某个条件才跳过该案例
@unittest.skipIf(4 > 3,"2 > 3 do not exec")
# 满足某个条件才跳过执行
def test_minus(self):
self.assertEqual(4,func.minus(5,1))
- 断言
self.assertEqual(3,func.add(1,2))
# 判断是否相等
self.assertNotEqual()
# 判断是否不等于
self.assertTrue()
# 判断布尔值是否为True
self.assertFalse()
# 判断布尔值是否为False
self.assertIs()
# 判断类型是否相同
self.assertIsNot()
# 判断类型是否不同
self.assertIsNone()
# 判断是否为None
self.assertIsNotNone()
# 判断是否不为None
self.assertIn()
# 判断在某个范围内
self.assertNotIn()
# 判断是否不在某个范围内
self.assertIsInstance()
# 判断是否为某个类的实例
self.assertNotIsInstance()
参考:
https://www.cnblogs.com/bainianminguo/p/11616526.html
- 待加入