unittest里discover用法_一篇文章向你解释什么是Unittest单元测试框架(中)

304b655b7ac822cdc1629c63bbe6477a.gif

03

在测试用例中添加Fixture(测试夹具)

3.1 测试夹具Fixture的作用对象

在Unittest框架下的测试用例中,使用Fixture有两种方法,作用于两个范围:

  • setUp()、tearDown(),作用于测试方法。即测试类下的每个测试方法执行前先运行setUp(),每个测试方法执行完毕后都要执行tearDown()方法,如testSum.py示例。

  • setUpClass()、tearDownClass(),作用于测试类。即只在整个测试类执行开始时运行setUpClass(),测试类下所有测试方法执行完后运行tearDownClass()。

3.2 setUpClass()、tearDownClass() 举例

test_sum.py修改如下,运行

class SumTest(unittest.TestCase):    '''测试Math类中的sum函数'''    @classmethod    def setUpClass(cls):        print("开始执行测试用例{}...".format(cls))    def test_sum01(self):        m = Math(3, 4)        self.assertEqual(m.sum(), 7)    def test_sum02(self):        m = Math(2, 8)        self.assertEqual(m.sum(), 11)    @classmethod    def tearDownClass(cls):        print("测试用例{}执行结束...".format(cls))if __name__ == '__main__':    unittest.main()

运行结果:

开始执行测试用例<class '__main__.SumTest'>...测试用例<class '__main__.SumTest'>执行结束....F

结果显示,setUpClass()、tearDownClass() 都只运行了一次。注意,这里需要使用装饰器@classmethod。

3.3 注意

在测试用例中,setUp() 或 setUpClass() 做初始化的工作,不是必须有这个函数。同样tearDown() 和 tearDownClass() 只做清理的工作,在测试类中不是必须要有。

需要测试的Math类,代码比较简单,没有真正需要用到测试夹具的地方,因此这只是个用法演示。

实际自动化过程中,如Web端UI自动化,一般会将创建浏览器实例放在setUp() ,用例执行完后需要关闭浏览器,将关闭浏览器操作放在tearDown()方法里。示例如下:

import unittestfrom selenium import webdriverclass BaiduTest(unittest.TestCase):    def setUp(self):        '''打开浏览器,进入百度页面'''        self.driver = webdriver.Chrome()        self.driver.maximize_window()        self.driver.get('https://www.baidu.com')    def test_01(self):        print("操作步骤")    def tearDown(self):        '''关闭浏览器'''        self.driver.quit()

04

添加测试用例至TestSuite(测试套件)

在testSum.py模块中,使用了unittest.main()方法执行当前模块里的测试用例。除此之外,Unittest还可以通过测试套件构造测试用例集,再执行测试用例。构造TestSuite常用的方法如下:

4.1 方法一:加载测试用例

1)先通过unittest.TestSuite() 创建测试套件实例对象。

2)再通过addTest() 往测试套件里添加单个测试用例,或通过addTests([...]) 添加多个测试用例(列表中为用例方法名)。

3)执行测试套件里的测试用例。

run.py示例:

import unittest# 导入测试用例模块from testcase.test_sum import TestDemo# 第一步:创建TestSuite实例suite = unittest.TestSuite()# 第二步:将测试用例添加至TestSuite# 方式1,添加单条测试用例suite.addTest(TestDemo('test_sum01'))   # addTest()里参数格式为:测试类('测试方法')suite.addTest(TestDemo('test_sum02'))# 方式2,添加多条测试用例suite.addTests([TestDemo('test_sum01'), TestDemo('test_sum02')])

4.2 方法二:加载测试用例类

1)先通过unittest.TestSuite() 创建测试套件实例对象。

2)再通过unittest.TestLoader()创建加载对象,加载测试用例类。

run.py示例:

import unittest# 导入测试用例模块from testcase.test_sum import TestDemo# 创建TestSuite实例suite = unittest.TestSuite()# 创建一个加载对象loader = unittest.TestLoader()suite.addTest(loader.loadTestsFromTestCase(TestDemo))

4.3 方法三:加载指定路径里的测试用例

1)通过unittest.defaultTestLoader.discover()将指定路径的测试用例加载至测试用例集。注意:这里不需要创建unittest.TestSuite对象。

2)如下代码所示,test_dir为指定路径。pattern=test_*.py 表示加载以test_开头的模块中的测试用例,指定运行某模块时pattern参数指定全名即可,如:pattern='test_sum.py'。路径跟pattern参数都可以自定义。

run.py示例

import unittesttest_dir = './testcase'suite = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')

编写测试项目时,推荐使用方法三。当然还有其他方法,不多做介绍。

05

使用TextTestRunner执行测试用例

unittest框架执行测试用例之前,需先创建TextTestRunner实例,再调用该实例的run()方法。

# 创建TextTestRunner实例runner = unittest.TextTestRunner()# 使用run()方法运行测试套件(即运行测试套件中的所有用例)runner.run(suite)

run.py修改成如下示例:

import unittesttest_dir = './testcase'suite = unittest.defaultTestLoader.discover(test_dir, pattern='test_*.py')runner = unittest.TextTestRunner()runner.run(suite)

运行run.py,结果如下:

.F======================================================================FAIL: test_sum02 (test_sum.TestDemo)----------------------------------------------------------------------Traceback (most recent call last):  File "C:\Users\xiaoqq\Desktop\test_project\demo\test_sum.py", line 15, in test_sum02    self.assertEqual(m.sum(), 11)AssertionError: 10 != 11----------------------------------------------------------------------Ran 2 tests in 0.000sFAILED (failures=1)开始执行测试用例test_sum01 (test_sum.TestDemo)...测试用例test_sum01 (test_sum.TestDemo)执行结束...开始执行测试用例test_sum02 (test_sum.TestDemo)...测试用例test_sum02 (test_sum.TestDemo)执行结束...Process finished with exit code 0
b4ab914b82c708fcf1d643914cba64da.gif

6f7c25ef55680664c71d819bfb19c566.png

推荐阅读

点击阅读☞想学单元测试用例?这就来啦!

点击阅读☞引入MockMVC进行单元测试,可以省去很多麻烦

点击阅读☞前端大佬教你如何优雅地构建单元测试框架

点击阅读☞单元测试神器Jest,你真的会用么?

点击阅读☞即使不懂单元测试,会用这个工具也够了~

链接:https://www.cnblogs.com/lfr0123/p/13799178.htm

本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除

7d7964908815da8f0f84e2b919a4c4e9.gif

87ee657a495dcf1828c0d7c02bdceedb.png

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值