上篇说过,unittest.TestCase类文件中包含了setUp()和tearDown()方法,那么下面我们讲下这两个方法。
setUp()和tearDown()函数:
1.什么是setUp()和tearDown()函数?
setUp()函数是在众多函数或者说是在一个类类里面最先被调用的函数,而且每执行完一个函数都要从setUp()调用开始后再执行下一个函数,有几个函数就调用他几次,与位置无关,随便放在那里都是他先被调用。
tearDown()函数是在众多函数执行完后他才被执行,意思就是不管这个类里面有多少函数,他总是最后一个被执行的,与位置无关,放在那里都行,最后不管测试函数是否执行成功都执行tearDown()方法;如果setUp()方法失败,则认为这个测试项目失败,不会执行测试函数也不执行tearDown()方法。
2.为什么我们要用setUp()和tearDown()函数?
我们利用这一特性在自动化中setup主要是进行测试前的初始化工作,比如在接口测试前面做一些前置的参数赋值,数据库操作等等 teardown是测试后的清除工作,比如参数还原或销毁,数据库的还原恢复等
setUp()和tearDown()使用方法:
from selenium import webdriver
import unittest # 第一步引入一个unittest
import time
class Search(unittest.TestCase): # 第二步创建继承一个unittest.TestCase的类
def setUp(self): # 第三步定义一个setup,放一些准备的工作,或者准备一些测试数据。
print('========== 测试开始 ==========')
self.driver = webdriver.Chrome(r'C:\Program Files (x86)\Google\Chrome\Application\chromedriver.exe') # 加载chrome驱动
self.driver.maximize_window() # 放大浏览器
self.driver.get("https://www.baidu.com") # 打开网址
print(self.driver.title) # 获取标题头并打印出来
print(self.driver.current_url) # 获取当前页面的url
time.sleep(2) # 休眠5s
def test_001(self): # 进行搜索
self.driver.find_element_by_id('kw').send_keys("高圆圆") # 输入账号
self.driver.find_element_by_id('su').click() # 点击搜索
time.sleep(2)
print(u'进入高圆圆的搜索结果页')
def test_002(self): # 进行搜索
self.driver.find_element_by_id('kw').send_keys("张天爱") # 输入账号
self.driver.find_element_by_id('su').click() # 点击搜索
time.sleep(2)
print(u'进入张天爱的搜索结果页')
def tearDown(self): # 第三步:定义一个tearDown,当我在测试完的时候我要对测试有一个销毁的过程比如说关闭浏览器,那么我们就写在tearDown当中
self.driver.quit()
print('========== 测试结束 ==========\n')
if __name__ == '__main__': # 如果其他的类调用的这个类的时候他就会自动忽略掉这个函数,他是为了测试自身的类用的
unittest.main() # 启动程序
以上就是setUp()和tearDown()的用法,setUp()负责初始化测试条件(打开浏览器),tearDown()负责清楚测试数据(关闭浏览器),然后我们看一下测试代码的执行顺序。↓↓↓↓↓↓
测试执行结果:
执行顺序是:setUp() → test_01 → tearDown() → setUp() → test_02 → tearDown()
从上面的执行结果可以看出,不管setUp()和tearDown()的位置放在哪里,它们的执行顺序都是一样的:每执行一条用例,都会先执行一遍setUp()和tearDown() !
拓展:
有时候,每条用例执行一次setUp()和tearDown()感觉会很烦,或者不合适,那么我们可以使用装饰器@classmethod加上 setUpClass()和tearDownClass()让每个测试类(模块)里的函数全部运行一遍才执行一次:
from selenium import webdriver
import unittest # 第一步引入一个unittest
import time
class Search(unittest.TestCase): # 第二步创建继承一个unittest.TestCase的类
@classmethod
def setUpClass(cls):
pass
def tearDownClass(cls):
pass