【selenium】python+selenium+unittest,关于每次执行完一个测试用例都关闭浏览器等时间较长的问题之解决方案·续·装饰器

   看上一篇的评论知道unittest装饰器(也叫修饰器)也能解决类似的问题,阳阳就特地学习了一下关于@classmethod装饰器的用法,并简单介绍一下unittest本身的装饰器;

  感谢“上海-悠悠”的博客,Selenium2+python自动化55-unittest之装饰器(@classmethod)

  根据阳阳虚心学习的结果,重新设计代码如下:

 1     @classmethod
 2     def setUpClass(cls):
 3         cls.driver = webdriver.Firefox()
 4         cls.driver.implicitly_wait(30)
 5         cls.base_url = "http://xxx.xxxx.com"
 6         cls.verificationErrors = []
 7         cls.accept_next_alert = True
 8 
 9     def test_1_login(self):
10         driver = self.driver
11         driver.get(self.base_url )
12         ...
13         #登录段操作
14         ...
15 
16     def test_2_update(self):
17         driver = self.driver
18         ...
19         #修改个人信息段操作
20         ...
21         
22     @classmethod
23     def tearDownClass(cls):
24         cls.driver.quit()

    上诉代码运行的顺序就是从上至下,而不再是每次执行完成一个testcase之后,执行一次teardownClass再进行下一个testcase;

  这样一来退出浏览器仅仅执行一次即可,这样有一个不好的地方就是,teardownClass这个函数不能再进行每个测试用例的终结操作,比如:修改个人信息后恢复到登录成功后的状态,对当前测试用例的异常处理等

  阳阳尝试tearDownClass后增加如下代码:

    def tearDown(self):
        self.driver.refresh()
        self.assertEqual( [], self.verificationErrors )

  然后果然每次测试用完成都会刷新当前页面,这样一来,每一个testcase的用例都能被终结函数tearDown结束,最后再执行tearDownClass关闭测试浏览器;

  需要说明的是:@classmethod是python本身的装饰器,所以他不要使用隶属于unit test框架下断言assertEqual;  

  unittest本身也带有装饰器unittest.skip(),专门用于跳过testcase的装饰器,其用法如下:

      @unittest.skip(reason), skip装饰器:直接跳过装饰下的testcase,reason用来说明原因,下同。

      @unittest.skipIf(condition,reason), skipIf装饰器:condition条件为True时,跳过装饰下的testcase,计入skip的testcase执行次数。

      @unittest.skipUnless(condition,reason),skipUnless装饰器:condition条件为False时,跳过装饰下的testcase,计入skip的testcase执行次数。

      @unittest.expectedFailure(), expectedFailure装饰器:执行装饰下的testcase,执行失败则跳过该testcase,计入expected下成败的testcase次数。

  阳阳认为使用@unittest.skipIf或者@unittest.skipUnless应该也能实现@classmethod装饰器的效果, 想来只是实现起来相对来说较为麻烦;

原文地址:https://www.cnblogs.com/bainianfengri/p/7273501.html