unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间。
于是就想是不是可以只打开一次浏览器,执行完用例再关闭呢?这就需要用到装饰器(@classmethod)来解决了。
用setUp与setUpClass区别
@是修饰符,classmethod是python里的类方法
#!/usr/bin/python3
# @Time : 2020/8/19 18:19
# @Author : 码上开始
import unittest
import time
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
print "开始!"
@classmethod
def tearDownClass(cls):
time.sleep(1)
print "结束"
def test01(self):
print "执行用例1"
def test03(self):
print "执行用例3"
def test02(self):
print "执行用例2"
def addtest(self):
print "add方法"
if __name__ == "__main__":
unittest.main()
从执行结果可以看出,前置和后置在执行用例前只执行了一次。
开始
执行用例1
执行用例2
执行用例3
…结束
Ran 3 tests in 1.001s
#!/usr/bin/python3
# @Time : 2020/8/19 18:25
# @Author : 码上开始
from selenium import webdriver
from selenium.webdriver.support import expected_conditions as EC
import unittest
class BolgHome(unittest.TestCase):
u'''博客首页'''
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Firefox()
url = "https://blog.csdn.net/laozhu_Python"
cls.driver.get(url)
cls.driver.implicitly_wait(30)
@classmethod
def tearDownClass(cls):
cls.driver.quit()
def test_01(self):
u'''验证元素存在:博客园'''
locator = ("id", "blog_nav_sitehome")
text = u"博客园"
result = EC.text_to_be_present_in_element(locator, text)(self.driver)
self.assertTrue(result)
def test_02(self):
u'''验证元素存在:首页'''
locator = ("id", "blog_nav_myhome")
text = u"首页"
result = EC.text_to_be_present_in_element(locator, text)(self.driver)
self.assertTrue(result)
if __name__ == "__main__":
unittest.main()
为了免去大家百度上到处寻找资料的烦恼,把节约下来的时间来高效学习。关注公众号:码上开始,软件测试技术进阶,BAT大厂面试资料,都给你准备好了。