最近看到不少的朋友咨询软件测试—Python unittest单元测试框架入门的知识,下面带大家来了解一下!
fun.py
def add(a,b):
return a+b
def minus(a,b):
return a-b
def multi(a,b):
return a*b
def divide(a,b):
return a/b
对于执行顺序,默认按照A-Z、a-z的方法执行。如果想按自己编写的case的先后关系执行,需要用到testSuite。如果想跳过某个case,需要用到skip装饰器。
Test_fun.py
import unittest
from fun import *
class TestFunc(unittest.TestCase):
# 在所有case执行之前初始一次测试环境
@classmethod
def setUpClass(cls):
print("this setupclass() method only called once")
# 在所有case执行结束后再清理环境
@classmethod
def tearDownClass(cls):
print("this teardownclass() method only called once too")
# 测试方法均已test开头,否则是不被unittest识别的
def test_add(self):
self.assertEqual(6,add(4,2))
def test_minus(self):
self.assertEqual(7,minus(9,2))
# 如果想跳过某个case:skip装饰器
@unittest.skip("i don't want to run this case. ")
def test_multi(self):
self.assertEqual(8,multi(2,4))
def test_divide(self):
self.assertEqual(2,divide(4,2))
Test_su1.py
#控制台输出测试报告
import unittest
from Test_fun import TestFunc
if __name__ == "__main__":
suite = unittest.TestSuite()
# 定义list,按照list里的顺序执行测试用例
tests=[TestFunc("test_add"),TestFunc("test_minus"),TestFunc("test_multi"),TestFunc("test_divide")]
suite.addTests(tests)
#在main()中加verbosity参数,可以控制报告的详细程度
#verbosity参数设为0,则不输出每一个用例的执行结果;2-输出详细的执行结果
runner = unittest.TextTestRunner(verbosity=2)
runner.run(suite)
执行结果:

我们可以借助与第三方提供的库来输出更加形象的html报告
先下载HTMLTestRunner.py,然后放在Python的Lib目录下;
HTMLTestRunner()方法有三个参数:
stream:测试报告写入文件的存储区域
title:测试报告的主题
description:测试报告的描述
Test_su2.py
import unittest
from test_fun import TestFunc
from HTMLTestRunner import HTMLTestRunner
if __name__ == "__main__":
suite = unittest.TestSuite()
# 定义list,按照list里的顺序执行测试用例
tests=[TestFunc("test_add"),TestFunc("test_minus"),TestFunc("test_multi"),TestFunc("test_divide")]
suite.addTests(tests)
with open('HtmlReport.html','wb') as f:
runner = HTMLTestRunner(stream=f,title=' test report',description=' function',verbosity=2)
runner.run(suite)
执行结果:
