![304b655b7ac822cdc1629c63bbe6477a.gif](https://i-blog.csdnimg.cn/blog_migrate/ca73fab0c6f529d493586f7a4b38dab7.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](https://i-blog.csdnimg.cn/blog_migrate/06fda85f1d74ee69a9e0a04e0351dd98.gif)
点击阅读☞想学单元测试用例?这就来啦!
点击阅读☞引入MockMVC进行单元测试,可以省去很多麻烦
点击阅读☞前端大佬教你如何优雅地构建单元测试框架
点击阅读☞单元测试神器Jest,你真的会用么?
点击阅读☞即使不懂单元测试,会用这个工具也够了~
链接:https://www.cnblogs.com/lfr0123/p/13799178.htm
本文为51Testing经授权转载,转载文章所包含的文字来源于作者。如因内容或版权等问题,请联系51Testing进行删除
![7d7964908815da8f0f84e2b919a4c4e9.gif](https://i-blog.csdnimg.cn/blog_migrate/f247056af943d8eeacb2f5a341381286.gif)