在说unittest之前,先说几个概念:

TestCase 也就是测试用例

TestSuite 多个测试用例集合在一起,就是TestSuite

TestLoader是用来加载TestCase到TestSuite中的

TestRunner是来执行测试用例的,测试的结果会保存到TestResult实例中,包括运行了多少测试用例,成功了多少,失败了多少等信息

简单的单元测试用例:

 import unittest
import HTMLTestRunner class TestCase(unittest.TestCase):
def setUp(self):
"""每条用例执行之前运行一次"""
print("-" * 20) def tearDown(self):
"""每条用例执行之后运行一次"""
print("+" * 20) @classmethod
def setUpClass(cls):
"""所有用例执行之前运行一次"""
print("" * 10) @classmethod
def tearDownClass(cls):
"""所有用例执行之后运行一次"""
print("" * 10) def test_case_1(self):
"""assertEqual 两个值相等"""
print("1 == 1")
self.assertEqual(1,1) def test_case_2(self):
"""assertNotEqual 两个值不相等"""
print("2 != 1")
self.assertNotEqual(2, 1) def test_case_3(self):
"""assertTrue 结果为True"""
print("2 > 1")
self.assertTrue(2 > 1) def test_case_4(self):
"""assertFalse 结果为False"""
print("2 < 1")
self.assertFalse(2 < 1) if __name__ == "__main__":
# 运行所有的测试用例
unittest.main()

执行结果:

Launching unittests with arguments python -m unittest D:/python_file/test_func/unittest-01.py in D:\python_file\test_func
6666666666--------------------
1 == 1
++++++++++++++++++++
--------------------
2 != 1
++++++++++++++++++++
--------------------
2 > 1
++++++++++++++++++++
--------------------
2 < 1
++++++++++++++++++++
9999999999 Ran 4 tests in 0.005s OK Process finished with exit code 0

下面是一些常用的断言,也就是校验结果:

        assertEqual(a, b)     a == b
assertNotEqual(a, b) a != b
assertTrue(x) bool(x) is True
assertFalse(x) bool(x) is False
assertIsNone(x) x is None
assertIsNotNone(x) x is not None
assertIn(a, b) a in b
assertNotIn(a, b) a not in b

skip跳过测试用例:

1、unittest.skip(reason):强制跳过,reason是跳过原因
2、unittest.skipIf(condition, reason):condition为True时跳过
3、unittest.skipUnless(condition, reason):condition为False时跳过
 import unittest
import HTMLTestRunner class TestCase(unittest.TestCase):
@classmethod
def setUpClass(cls):
"""所有用例执行之前运行一次"""
print("" * 10) @classmethod
def tearDownClass(cls):
"""所有用例执行之后运行一次"""
print("" * 10) def test_case_1(self):
"""assertEqual 两个值相等"""
print("1 == 1")
self.assertEqual(1,1) @unittest.skip(reason = "强制跳过,reason是跳过原因")
def test_case_2(self):
"""assertNotEqual 两个值不相等"""
print("2 != 1")
self.assertNotEqual(2, 1) @unittest.skipIf(3 > 2, reason = "结果为True时跳过")
def test_case_3(self):
"""assertTrue 结果为True"""
print("2 > 1")
self.assertTrue(2 > 1) @unittest.skipUnless(3 < 2, reason="结果为False时跳过")
def test_case_4(self):
"""assertFalse 结果为False"""
print("2 < 1")
self.assertFalse(2 < 1) if __name__ == "__main__":
# 运行所有的测试用例
unittest.main()

执行结果 :

Launching unittests with arguments python -m unittest D:/python_file/test_func/unittest-01.py in D:\python_file\test_func
66666666661 == 1 Skipped: 强制跳过,reason是跳过原因 Skipped: 结果为True时跳过 Skipped: 结果为False时跳过
9999999999 Ran 4 tests in 0.002s OK (skipped=3) Process finished with exit code 0

suite测试套件

 import my_func
import unittest class Test_MyFunc(unittest.TestCase):
"""test my_func""" def test_01(self):
""">>>负数的绝对值"""
self.assertEqual(1, abs(-1)) def test_02(self):
""">>>正数的绝对值"""
self.assertEqual(1, abs(1)) def test_03(self):
""">>>0的绝对值"""
self.assertEqual(0, abs(0)) def suite_1():
"""addTest方法添加用例,可以对case进行排序"""
# 构造一个套件
suite = unittest.TestSuite()
# 向套件例添加用例、排序
tests_myfunc = [Test_MyFunc("test_01"), Test_MyFunc("test_01"), Test_MyFunc("test_01")]
suite.addTests(tests_myfunc)
return suite def suite_01():
"""addTests + TestLoader方法来添加用例,但是这种方法是无法对case进行排序的""" # 第一种方法:传入'模块名.TestCase名'
# 构造测试套件
suite = unittest.TestSuite()
suite.addTests(unittest.TestLoader().loadTestsFromName("s.Test_MyFunc"))
# 这里还可以把多个'模块名.Test_MyFunc'放到一个列表中
# suite.addTests(unittest.TestLoader().loadTestsFromNames(['a.Test_a', 'b.Test_b']))
return suite def suite_02():
"""addTests + TestLoader方法来添加用例,但是这种方法是无法对case进行排序的"""
# 第二种方法:传入TestCase
suite = unittest.TestSuite()
suite.addTests(unittest.TestLoader().loadTestsFromTestCase(Test_MyFunc))
return suite def run(suite):
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite) run(suite_1())

执行结果:

test_03 (s.Test_MyFunc)
>>>0的绝对值 ... ok
test_01 (s.Test_MyFunc)
>>>负数的绝对值 ... ok
test_02 (s.Test_MyFunc)
>>>正数的绝对值 ... ok

----------------------------------------------------------------------
Ran 3 tests in 0.000s

OK
Launching unittests with arguments python -m unittest D:/python_file/test_func/s.py in D:\python_file\test_func

Ran 3 tests in 0.001s

OK

-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

使用套件执行会把case的解释给打印出来。。。

 import unittest
import HTMLTestRunner class TestCase(unittest.TestCase):
def test_case_1(self):
""">>>assertEqual 两个值相等"""
print("1 == 1")
self.assertEqual(1,1) @unittest.skip(reason = "强制跳过,reason是跳过原因")
def test_case_2(self):
""">>>assertNotEqual 两个值不相等"""
print("2 != 1")
self.assertNotEqual(2, 1) @unittest.skipIf(3 > 2, reason = "结果为True时跳过")
def test_case_3(self):
""">>>assertTrue 结果为True"""
print("2 > 1")
self.assertTrue(2 > 1) # @unittest.skipUnless(3 < 2, reason="结果为False时跳过")
def test_case_4(self):
"""assertFalse 结果为False"""
print("2 < 1")
self.assertFalse(2 < 1) # if __name__ == "__main__":
# # 运行所有的测试用例
# unittest.main() suite = unittest.TestSuite()
suite.addTests([TestCase("test_case_1"), TestCase("test_case_2")])
unittest.TextTestRunner(verbosity=2).run(suite)

执行结果:

1 == 1test_case_1 (unittest-01.TestCase)
>>>assertEqual 两个值相等 ... ok
test_case_2 (unittest-01.TestCase)
>>>assertNotEqual 两个值不相等 ... skipped '强制跳过,reason是跳过原因' ----------------------------------------------------------------------
Ran 2 tests in 0.000s OK (skipped=1)
1 == 1

测试结果输出到文件:

verbosity控制测试结果的详细程度:0表示简单,1表示一般,2表示详细

测试结果输出到TXT

suite = unittest.TestSuite()
suite.addTest(TestEmail("test_01"))
suite.addTest(TestEmail("test_03"))
with open("result1.txt", "a", encoding="utf-8") as f:
runner = unittest.TextTestRunner(stream=f, verbosity=2).run(suite)

测试结果输出到HTML

suite = unittest.TestSuite()
suite.addTests([TestEmail("test_01"), TestEmail("test_03")])
with open(r"result1.html", "wb") as f:
HTMLTestRunner.HTMLTestRunner(stream=f, verbosity=2, title="测试报告", description="测试报告详情").run(suite)

最新文章

  1. CentOS 7.2 安装配置mysql主从服务器
  2. vtkAnimationCue、vtkCommand和vtkAVIWriter
  3. JSONObject转换JSON--将Date转换为指定格式
  4. JS数组定义
  5. bat处理打开关门exe
  6. hiho #1044 : 状态压缩&#183;一
  7. Android百度地图之显示地图
  8. JavaFX游戏开发效率浅谈
  9. 一起来学linux:用户与用户组
  10. Git分支-分支简介
  11. IE下的deflate模式
  12. Moya https配置方法
  13. c# 在.NET使用Newtonsoft.Json转换,读取,写入json
  14. 第三节 Python基础之数据类型(列表,元组,字典)
  15. python_day1_常量
  16. A - K进制下的大数
  17. AngularJs分层结构小demo
  18. Cname与A记录(Address)区别
  19. opencv3.2.0形态学滤波之形态学梯度、顶帽、黑帽
  20. Python里的类和对象简介

热门文章

  1. SpringCloud使用Feign实现服务间通信
  2. html实现滚动播报(原生JS实现)
  3. Java语法基础学习DayTen(集合续)
  4. Mac 下配置Lua环境
  5. 【原创】MIPS相关
  6. split根据一个元素分割语句
  7. nginx 504 Gateway Time-out
  8. 9--Python入门--模块
  9. logback-spring.xml 博客分享
  10. python基础--基础练习题(一)