Selenium2+python-unittest之装饰器(@classmethod)

it2022-05-09  16

原文地址:http://www.cnblogs.com/yoyoketang/p/6685416.html

前言

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

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

 

一、装饰器

1.用setUp与setUpClass区别

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

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

 

二、执行顺序

1.用类方法写几个简单case

# coding:utf-8import unittestimport timeclass 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-8from selenium import webdriverfrom selenium.webdriver.support import expected_conditions as ECimport unittestclass 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()

转载于:https://www.cnblogs.com/mufenglin/p/7676153.html

相关资源:数据结构—成绩单生成器

最新回复(0)