原文地址: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
相关资源:数据结构—成绩单生成器