还记不记得我们selenium之unittest的简单用法(二)中的unittest执行顺序。
unittest 里面 setUp 可以在每次执行用例前执行,这样有效的减少了
代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间。
于是就想是不是可以只打开一次浏览器,执行完用例再关闭呢?这就需要用到装饰器(@classmethod)来解决了。
一、 装饰器
1) setUp 与 setUpClass 区别
- setup():每个测试 case 运行前运行
- teardown():每个测试 case 运行完后执行
- setUpClass():必须使用@classmethod 装饰器,所有 case 运行前只运行一次
- tearDownClass():必须使用@classmethod 装饰器,所有 case 运行完后只运行一次
2)@是修饰符,classmethod 是 python 里的类方法
二、执行顺序
用类方法写几个简单 case
比如我们创建test_05.py文件,内容如下:
#-*- coding:utf-8 -*-
import unittest
import time
class Test(unittest.TestCase):
@classmethod
def setUpClass(cls):
print "开始","\n"
@classmethod
def tearDownClass(cls):
time.sleep(1)
print "结束"
def test01(self):
print "执行测试用例01"
def test02(self):
print "执行测试用例02"
def test03(self):
print "执行测试用例03"
def addtest(self):
print "执行add方法"
if __name__=="__main__":
unittest.main()
执行结果:从执行结果可以看出,前置和后置在执行用例前只执行了一次。
C:\Python27\python.exe "C:\Program Files\JetBrains\PyCharm 2017.2\helpers\pycharm\_jb_unittest_runner.py" --path F:/pycharm-workspace/selenium/test_05.py
Testing started at 11:55 ...
Launching unittests with arguments python -m unittest discover -s F:/pycharm-workspace/selenium -p test_05.py -t F:\pycharm-workspace\selenium in F:\pycharm-workspace\selenium
开始
执行测试用例01
执行测试用例02
执行测试用例03
结束
Ran 3 tests in 1.034s
OK
Process finished with exit code 0
三、selenium 实例展示
我们百度搜索MTbaby为例来演示。
1.可以把打开浏览器操作放到前置 setUpClass(cls)里,这样就可以实现打开一
次浏览器,执行多个 case 了。
#-*- coding:utf-8 -*-
import unittest
import time
from selenium import webdriver
class SearchTest(unittest.TestCase):
@classmethod
def setUpClass(cls):
cls.driver = webdriver.Chrome()
cls.driver.implicitly_wait(30)
cls.driver.maximize_window()
cls.driver.get('http://www.baidu.com/' ) #打开百度首页
cls.search_text = cls.driver.find_element_by_id('kw')
cls.search_btn = cls.driver.find_element_by_id('su')
def test_search(self):
self.search_text.clear()
self.search_text.send_keys(u'MTbaby')
self.search_btn.click()
time.sleep(4)
title = self.driver.title
self.assertEqual(title, u'MTbaby_百度搜索')
@classmethod
def tearDownClass(cls):
cls.driver.quit()
if __name__ == '__main__':
unittest.main()
执行结果:
C:\Python27\python.exe "C:\Program Files\JetBrains\PyCharm 2017.2\helpers\pycharm\_jb_unittest_runner.py" --path F:/pycharm-workspace/selenium/test2.py
Testing started at 14:54 ...
Launching unittests with arguments python -m unittest discover -s F:/pycharm-workspace/selenium -p test2.py -t F:\pycharm-workspace\selenium in F:\pycharm-workspace\selenium
Ran 1 test in 8.745s
OK
Process finished with exit code 0