python单元测试引入unittest模块后一个类里面包含多个方法怎么只让setUp、方法只执行一次

因为我在初始化的时候写了self.driver=webdriver.Chrome(),程序每执行一个方法就执行初始化一次,但是其他方法都要登录后才能操作,执行完登录后就执... 因为我在初始化的时候写了self.driver = webdriver.Chrome(),程序每执行一个方法就执行初始化一次,但是其他方法都要登录后才能操作,执行完登录后就执行tearDown,下面的方法就会重新打开浏览器登录信息就失效了没办法继续执行下去,我应该怎么改 展开
 我来答
百度网友df16981
2018-11-02
知道答主
回答量:7
采纳率:0%
帮助的人:5万
展开全部
不是有一个全局的setup和teardonw吗
@classmethod
def tearDownClass(cls): # 必须使用 @ classmethod装饰器, 所有test运行完后运行一次
print('4444444')
@classmethod
def setUpClass(cls): # 必须使用@classmethod 装饰器,所有test运行前运行一次
print('33333')
百度网友87773c2
2018-02-28
知道答主
回答量:1
采纳率:0%
帮助的人:898
展开全部
试试setupClass()
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
shiyini2010
2018-02-08
知道答主
回答量:17
采纳率:0%
帮助的人:2.9万
展开全部

@classmethod
def setUpClass(cls):

@classmethod
def tearDownClass(cls):
cls.driver.quit()

网页链接

防吞直接放

百年风日

百年风日几重阳,我是阳阳!

【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.driver11         driver.get(self.base_url )12         ...13         #登录段操作14         ...15 16     def test_2_update(self):17         driver = self.driver18         ...19         #修改个人信息段操作20         ...21         22     @classmethod23     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装饰器的效果, 想来只是实现起来相对来说较为麻烦;

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
匿名用户
2017-03-30
展开全部
为什么不把登录也放到setUp里面呢
更多追问追答
追问
登录放在setUp里的话每个方法执行前都要初始化那就要重复登录多次了,我希望的是一次登录执行所有方法
追答
截张图,看看代码
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 3条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式