本文主要是介绍26-unittest之装饰器(@classmethod),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
unittest中的setUp可以在每个测试方法运行前执行,有效的减少了代码量。但有个弊端,比如打开浏览器操作,执行每个测试方法前都要重新打开一次,这样就会浪费很多时间。
是否可以只打开一次浏览器,执行完所有的测试方法后再关闭浏览器呢?这里就需要用到装饰器(@classmethod)来解决了。
一、装饰器(@classmethod)
1)setUp与setUpClass的区别
- setup(self):每个测试方法运行前都会运行一次。
- teardown(self):每个测试方法运行完之后都会执行一次。
- setUpClass(cls):与装饰器@classmethod 一起使用,在所有测试方法运行前运行,且只运行一次。
- tearDownClass(cls):与装饰器@classmethod 一起使用,在所有测试方法运行完之后运行,且只运行一次
2)在类中的方法上加上@classmethod,用来表示该方法是类方法。
二、执行顺序
import unittestclass Demo(unittest.TestCase):def setUp(self):print("setUp!")def tearDown(self):print("tearDown!")@classmethoddef setUpClass(cls):print("setUpClass!")@classmethoddef tearDownClass(cls):print("tearDownClass!")def test01(self):print("执行测试用例01")def test03(self):print("执行测试用例03")def test02(self):print("执行测试用例02")def addtest(self):print("add方法")if __name__ == "__main__":unittest.main()
从上述执行结果可以看出,setUpClass和tearDownClass只执行了一次。
三、案例演示
以打开百度搜索页为例,判断title是否完全等于期望结果。
from selenium import webdriver
import unittest
import timeclass Demo(unittest.TestCase):@classmethoddef setUpClass(cls):cls.driver = webdriver.Chrome()cls.driver.get('https://www.baidu.com')time.sleep(3)@classmethoddef tearDownClass(cls):time.sleep(1)cls.driver.quit()def test01(self):title = self.driver.titleself.assertEqual(title, '百度一下')def test02(self):title = self.driver.titleself.assertEqual(title, '百度一下,你就知道')if __name__ == '__main__':unittest.main()
这篇关于26-unittest之装饰器(@classmethod)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!