Selenium单会话场景下执行多个测试用例相关问题咨询
问题原因
- unittest框架默认
setUp()、tearDown()方法的执行规则是:每执行一个test开头的测试用例前跑一次setUp,每执行完一个测试用例后跑一次tearDown。你的代码里每次tearDown都会调用driver.quit()关闭浏览器,下一个用例启动时setUp又会初始化全新的浏览器实例,自然没有之前的登录状态,还会反复开关浏览器。
解决方案
用类级别的初始化/销毁方法setUpClass()、tearDownClass()替换原来的实例方法,这两个方法在整个测试类的所有用例执行前后只会各执行一次,所有测试用例共用同一个浏览器实例,只会在所有用例全部跑完后才关闭浏览器。
注意事项
setUpClass、tearDownClass必须加@classmethod装饰器,操作的是类属性而非实例属性- unittest默认按测试方法名的ASCII码顺序执行用例,要保证登录用例
test_SignIn排在其他业务用例前面执行,避免未登录就执行业务操作
修改后代码
import unittest import time from selenium import webdriver # 注意导入你自己的LoginPage、ValueCalculator类 class BaseTest(unittest.TestCase): """A sample test class to show how page object works""" @classmethod def setUpClass(cls): # 整个测试类启动时只初始化一次浏览器 cls.driver = webdriver.Chrome("/usr/lib/chromium-browser/chromedriver") cls.driver.implicitly_wait(30) cls.driver.get("===========") cls.driver.maximize_window() def test_SignIn(self): driver = self.driver Login = LoginPage(driver) Login.enterEmail('any@gmail.com') Login.enterPassword('abc123') Login.clickSignIn() time.sleep(10) def test_ValueCalculator(self): driver = self.driver calculateValue = ValueCalculator(driver) calculateValue.enterSalary('kkk') calculateValue.enterSalarydifference('kkk') calculateValue.clickSubmit() time.sleep(10) @classmethod def tearDownClass(cls): # 所有测试用例全部跑完后才关闭浏览器 cls.driver.quit() if __name__ == "__main__": unittest.main()
内容的提问来源于stack exchange,提问作者user4617631
相关产品推荐
相关产品推荐

