当前位置: 代码迷 >> 综合 >> 5.unittest_装饰器(@classmethod)
  详细解决方案

5.unittest_装饰器(@classmethod)

热度:57   发布时间:2023-09-19 01:35:12.0

前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间。

于是就想是不是可以只打开一次浏览器,执行完用例再关闭呢?这就需要用到装饰器(@classmethod)来解决了。

一、装饰器

  1. 用setUp与setUpClass区别
  • setup():每个测试case运行前运行
  • teardown():每个测试case运行完后执行
  • setUpClass():必须使用@classmethod 装饰器,所有case运行前只运行一次
  • tearDownClass():必须使用@classmethod装饰器,所有case运行完后只运行一次
  1. @是修饰符,classmethod是python里的类方法

二、执行顺序

  1. 用类方法写几个简单case
import unittestclass test_01(unittest.TestCase):@classmethoddef setUpClass(cls):print("=================setUpclass=======================")@classmethoddef tearDownClass(cls):print("================tearDownclass=================")def setUp(self):print("=============setup_test01==============================")def test_a(self):print("========================test_a=========================")def test_b(self):print("========================test_b=========================")if __name__ =="__main__":unittest.main()

2.从执行结果可以看出,前置和后置@classmethod在执行用例前只执行了一次。

上次的浏览器执行时每次执行前都开启一次浏览器,这次试一下每次用例开启一次浏览器:

from selenium import webdriver
import time
import unittestclass Blog(unittest.TestCase):#在前置条件中进行登录操作@classmethoddef setUpClass(cls):cls.driver = webdriver.Chrome()cls.driver.get("https://blog.csdn.net/qq_34400745")def test_title01(self):time.sleep(2)assert "静静" in self.driver.titledef test_title02(self):time.sleep(2)assert "静静" == self.driver.title
#后置条件进行关闭@classmethoddef tearDownClss(cls):cls.driver.quit()if __name__ == "__main__":unittest.main()