python面面观单元测试_python 使用unittest进行单元测试

这篇博客介绍了Python的unittest模块用于单元测试的基本用法,包括测试用例、测试套件、测试加载器和测试运行器的概念。此外,还讲解了如何使用HTMLTestRunner生成详细的HTML测试报告,以及如何在测试多个模块下的测试用例。最后提到了使用xmlrunner生成Jenkins友好的XML测试报告。
摘要由CSDN通过智能技术生成

importunittestimportHTMLTestRunner"""Python中有一个自带的单元测试框架是unittest模块,用它来做单元测试,它里面封装好了一些校验返回的结果方法和一些用例执行前的初始化操作。

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

TestCase 也就是测试用例

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

TestLoader是用来加载TestCase到TestSuite中的

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

生成测试报告:

1.HTMLTestRunner,这个模块需要自己安装,使用执行测试用例就会生成一个html的测试报告,里面会有每个测试用例的执行结果

2.HTMLTestRunner是Python标准库的unittest模块的扩展,无法通过pip安装;

3.执行命令: wget http://tungwaiyip.info/software/HTMLTestRunner.html 下载HTMLTestRunner.py 并将文件放到python2安装目录的Lib下,这个是python2版本.

4.HTMLTestRunner python3版本下载 访问 https://www.cnblogs.com/testyao/p/5658200.html 自行下载 并将文件放到python3安装目录的lib目录下"""

class MyTest(unittest.TestCase): #必须继承自unittest.TestCase

def tearDown(self): #每个测试用例执行完之后,都会执行一下这个方法

print("测试完成\n")def setUp(self): #每个测试用例执行之前都会执行这个方法

print("测试开始\n")

@classmethod#必须使用@classmethod装饰器, 所有test运行完后运行一次

deftearDownClass(cls):print("所有测试完成\n")

@classmethod#必须使用@classmethod装饰器,所有test运行前运行一次

defsetUpClass(cls):print("所有测试开始前\n")deftest_a_run(self):#可以把需要执行的函数放到这里进行执行

self.assertEqual(1, 1) #测试用例, 必须以test开头, 如果测试不通过,会报异常

deftest_b_run(self):

self.assertEqual(2, 1) #测试用例, 必须以test开头, 如果测试不通过,会报异常

#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

if __name__ == '__main__':#unittest.main() # 直接进行测试, 不生成测试报告, 可以在终端的输出看是否有异常,没有异常就说明测试通过

#下面这段逻辑:需要生成测试报告才这样操作 #

test_suite= unittest.TestSuite() #创建一个测试集合

#test_suite.addTest(MyTest('test_a_run')) # 测试套件中添加单个测试用例

test_suite.addTest(unittest.makeSuite(MyTest))#使用makeSuite方法添加所有的测试方法

with open('unittest_res.html', 'wb') as f: #打开一个保存结果的html文件

runner= HTMLTestRunner.HTMLTestRunner(stream=f, title='api测试报告', description='测试情况')#生成执行用例的对象

runner.run(test_suite)deftest_note_1():"""如果我们有很多个模块,每个模块下面都写了很多python文件,每个python文件里面都有测试用例,

那怎么把这个目录下的用例都执行了呢,就要先找到这个目录下的所有python文件,然后找到里面的测试用例,

逐个执行,代码如下:"""suite= unittest.TestSuite() #生成创建测试套件

all_cases= unittest.defaultTestLoader.discover('.', 'test_*.py') #第一个参数是路径

#找到某个目录下所有的以test开头的Python文件里面的测试用例

for case inall_cases:

suite.addTests(case)#把所有的测试用例添加进来

fp= open('res.html', 'wb')

fp.close()

runner= HTMLTestRunner.HTMLTestRunner(stream=fp, title='all_tests', description='所有测试情况')#运行测试

runner.run(suite)#把这些代码替换到入口函数中即可

"""我们在后续进行持续集成的时候,要让代码自动运行,就会用到Jenkins了,但是上面产生的测试报告都是html格式的,

Jenkins不认识,就在Jenkins里面显示不出来。那咱们就要产生一些Jenkins认识的测试报告,

Jenkins认识xml格式的报告,那咱们就产生xml格式的呗,就需要用一个新的模块,xmlrunner,

安装直接 pip install xmlrunner即可,代码如下:"""

#导入模块

importunittestimportxmlrunnerclassMy(unittest.TestCase):deftest1(self, a, b, c):

self.assertEqual(a+b, c)if __name__ == '__main__':

test_suite=unittest.TestSuite()

test_suite.addTest(unittest.makeSuite(My))

runner= xmlrunner.XMLTestRunner(output='report') #指定报告放的目录

runner.run(test_suite)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值