selenium之unittest 装饰器

还记不记得我们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
  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值