• Selenium2+python自动化55-unittest之装饰器(@classmethod)【转载】


    前言

    前面讲到unittest里面setUp可以在每次执行用例前执行,这样有效的减少了代码量,但是有个弊端,比如打开浏览器操作,每次执行用例时候都会重新打开,这样就会浪费很多时间。

    于是就想是不是可以只打开一次浏览器,执行完用例再关闭呢?这就需要用到装饰器(@classmethod)来解决了。

    一、装饰器

    1.用setUp与setUpClass区别

    setup():每个测试case运行前运行
    teardown():每个测试case运行完后执行
    setUpClass():必须使用@classmethod 装饰器,所有case运行前只运行一次
    tearDownClass():必须使用@classmethod装饰器,所有case运行完后只运行一次

    2.@是修饰符,classmethod是python里的类方法

    二、执行顺序

    1.用类方法写几个简单case,可以对比这篇:Selenium2+python自动化52-unittest执行顺序

    # coding:utf-8
    import unittest
    import time
    class Test(unittest.TestCase):
        @classmethod
        def setUpClass(cls):
            print "start!"
       

        @classmethod
        def tearDownClass(cls):
            time.sleep(1)
            print "end!"

        def test01(self):
            print "执行测试用例01"

        def test03(self):
            print "执行测试用例03"

        def test02(self):
            print "执行测试用例02"

        def addtest(self):
            print "add方法"

    if __name__ == "__main__":
        unittest.main()

    2.从执行结果可以看出,前置和后置在执行用例前只执行了一次。

    start!
    执行测试用例01
    执行测试用例02
    执行测试用例03
    ...end!

    ----------------------------------------------------------------------
    Ran 3 tests in 1.001s

    三、selenium实例

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

    # coding:utf-8
    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 = "http://www.cnblogs.com/yoyoketang/"
            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()

  • 相关阅读:
    Python编程四大神兽:迭代器、生成器、闭包和装饰器
    Linux基础
    3.8记录
    3.7记录
    3.6进度记录
    3.5进度
    3.4进度
    3.3进度
    3.2进度记录
    3.1记录
  • 原文地址:https://www.cnblogs.com/caoj/p/7814239.html
Copyright © 2020-2023  润新知