python - 执行完所有测试后退出 pytest 中的驱动程序实例
问题描述
下面是用于运行 2 个测试的 pytest 类。想要在两个测试都执行后退出驱动程序。使用 Teardown 但在每次测试执行完成后退出驱动程序
class FlightTest(unittest.TestCase):
driver = webdriver.Chrome(direct_path+'/resources/chromedriver.exe')
startup = StartUpPage(driver)
register = RegisterPage(driver)
def test_flight_registration(self):
dat = self.json_reader.read_from_file("testdata.json")
self.startup.navigate_to_url(dat['url'])\
.click_on_register_button()
self.register.create_user(dat['uid'], dat['pwd'], dat['con_pwd'])
def test_flight_sign_in(self,):
dat = self.json_reader.read_from_file("testdata.json")
self.startup.click_sign_in_link()
def tearDown(self):
self.driver.quit()
解决方案
就unittest
术语而言,您需要使用setUpClass
andtearDownClass
类方法:
class FlightTest(unittest.TestCase):
@classmethod
def setUpClass(cls)
cls.driver = webdriver.Chrome()
cls.startup = StartUpPage(driver)
cls.register = RegisterPage(driver)
@classmethod
def tearDownClass(cls):
cls.driver.quit()
...
就pytest
术语而言,您将创建一个类范围的固定装置:
import pytest
@pytest.fixture(scope="class")
def driver(request):
# code before 'yield' is executed before the tests
request.cls.driver = webdriver.Chrome()
request.cls.startup = StartUpPage(request.cls.driver)
request.cls.register = RegisterPage(request.cls.driver)
yield
# code after 'yield' is executed after the tests
request.cls.driver.quit()
@pytest.mark.usefixtures('driver')
class FlightTest(unittest.TestCase):
def test_spam(self):
self.driver.get('https://www.google.de')
def test_eggs(self):
self.driver.get('https://www.facebook.com')
更好的解决方案是使用 webdriver 的上下文管理器属性,因此无论如何它都会自动关闭:
import pytest
@pytest.fixture(scope="class")
def driver(request):
with webdriver.Chrome() as driver:
request.cls.driver = driver
request.cls.startup = StartUpPage(driver)
request.cls.register = RegisterPage(driver)
yield
@pytest.mark.usefixtures('driver')
class FlightTest(unittest.TestCase):
def test_spam(self):
self.driver.get('https://www.google.de')
def test_eggs(self):
self.driver.get('https://www.facebook.com')
推荐阅读
- tcp - BufWriter::write() 不向 TcpStream 写入字节
- javascript - 使用三个 div 调整大小的 JQuery 不起作用
- sql - 如何以与计数相同的次数显示记录
- java - 如何翻译 .java 源文件中的文本?
- java - 如何通过键集从哈希表中获取所有列表
- php - 在 PHP 中读取 CSV 文件并删除空格和特殊字符也将其存储在数据库中
- nativescript - Nativescript 在 ListView 中向上滚动时显示元素 - 视差效果
- node.js - PayPal 付款已创建但从未执行
- angular - `as` 这里真的需要吗?
- python - 如何在熊猫中按每组两列计算唯一记录?