selenium之unittest 装饰器

来源:互联网 发布:js random 50 100 编辑:程序博客网 时间:2024/05/18 04:11

还记不记得我们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 unittestimport timeclass 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.pyTesting 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.034sOKProcess finished with exit code 0

三、selenium 实例展示

我们百度搜索MTbaby为例来演示。

1.可以把打开浏览器操作放到前置 setUpClass(cls)里,这样就可以实现打开一
次浏览器,执行多个 case 了。

#-*- coding:utf-8 -*-import unittestimport timefrom selenium import webdriverclass 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.pyTesting 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\seleniumRan 1 test in 8.745sOKProcess finished with exit code 0