Python TestSuite测试包及用法
为了示范测试包的功能,下面再开发一个程序(hello.py):
# 该方法简单地返回字符串 def say_hello(): return "Hello World." # 计算两个整数的和 def add(nA, nB): return nA + nB接下来为上面程序提供如下测试类(test_hello.py):
import unittest from hello import * class TestHello(unittest.TestCase): # 测试say_hello函数 def test_say_hello(self): self.assertEqual(say_hello() , "Hello World.") # 测试add函数 def test_add(self): self.assertEqual(add(3, 4) , 7) self.assertEqual(add(0, 4) , 4) self.assertEqual(add(-3, 0) , -3)将 test_fk_math.py 和 test_hello.py 文件放在同一目录,此时程序就可以通过 TestSuite 将它们组织在一起,然后使用 TestRunner 来运行该测试包。
import unittest from test_fk_math import TestFkMath from test_hello import TestHello test_cases = (TestHello, TestFkMath) def whole_suite(): # 创建测试加载器 loader = unittest.TestLoader() # 创建测试包 suite = unittest.TestSuite() # 遍历所有测试类 for test_class in test_cases: # 从测试类中加载测试用例 tests = loader.loadTestsFromTestCase(test_class) # 将测试用例添加到测试包中 suite.addTests(tests) return suite if __name__ == '__main__': # 创建测试运行器(TestRunner) runner = unittest.TextTestRunner(verbosity=2) //① runner.run(whole_suite())上面程序调用 TestSuite 的 addTests() 方法来添加测试用例,这样就实现了使用 TestSuite 来组织多个测试用例。
上面程序还使用 TestLoader 来加载测试用例,该对象提供了一个 loadTestsFromTestCase() 方法,从指定类加载测试用例。
上面程序中的 ① 号代码创建了 TextTestRunner,它是一个测试运行器,专门用于运行测试用例和测试包。其实前面使用的 unittest.main() 函数,同样也是通过 TextTestRunner 来运行测试用例的。
程序中的 ① 号代码在创建 TextTestRunner 时还指定了 verbosity=2,这样可以生成更详细的测试信息。
在调用 unittest.main() 函数时同样可指定 verbosity=2,用来生成更详细的测试信息。
运行上面程序,可以看到生成如下测试报告:
test_add (test_hello.TestHello) ... ok
test_say_hello (test_hello.TestHello) ... ok
test_one_equation (test_fk_math.TestFkMath) ... FAIL
test_two_equation (test_fk_math.TestFkMath) ... ok
======================================================================
FAIL: test_one_equation (test_fk_math.TestFkMath)
----------------------------------------------------------------------
Traceback (most recent call last):
File "E:\BaiduNetdiskDownload\《疯狂Python讲义》光盘文件\codes\16\16.5\test_fk_math.py", line 24, in test_one_equation
self.assertEqual(one_equation(5 , 9) , -1.8)
AssertionError: 1.8 != -1.8
----------------------------------------------------------------------
Ran 4 tests in 0.017s
FAILED (failures=1)
如果不希望仅能在控制台中看到测试报告,而是希望直接生成文件格式的测试报告,则可以在 ① 号代码创建 TextTestRunner 对象时指定 stream 属性,该属性是一个打开的类文件对象,这样程序就会把测试报告输出到该类文件对象中。
例如,将上面的 __main__ 部分改为如下形式:
if __name__ == '__main__': with open('fk_test_report.txt', 'a') as f: # 创建测试运行器(TestRunner),将测试报告输出到文件中 runner = unittest.TextTestRunner(verbosity=2, stream=f) runner.run(whole_suite())再次运行该程序,此时在控制台中将看不到任何信息,测试报告将会被输出到 fk_test_report.txt 文件中。
所有教程
- socket
- Python基础教程
- C#教程
- MySQL函数
- MySQL
- C语言入门
- C语言专题
- C语言编译器
- C语言编程实例
- GCC编译器
- 数据结构
- C语言项目案例
- C++教程
- OpenCV
- Qt教程
- Unity 3D教程
- UE4
- STL
- Redis
- Android教程
- JavaScript
- PHP
- Mybatis
- Spring Cloud
- Maven
- vi命令
- Spring Boot
- Spring MVC
- Hibernate
- Linux
- Linux命令
- Shell脚本
- Java教程
- 设计模式
- Spring
- Servlet
- Struts2
- Java Swing
- JSP教程
- CSS教程
- TensorFlow
- 区块链
- Go语言教程
- Docker
- 编程笔记
- 资源下载
- 关于我们
- 汇编语言
- 大数据
- 云计算
- VIP视频