gpt4 book ai didi

python-3.x - 是否可以继承 setup() 和 tearDown() 方法?

转载 作者:行者123 更新时间:2023-12-03 21:03:43 25 4
gpt4 key购买 nike

我主要在 C#/Java 中使用自动化,并且一直在研究 Python 的速度。

在 C# 中,我可以编写一个实现 WebDriver 的类。例如,连同 [SetUp][TearDown]方法。然后,每个包含测试用例的类都可以从这个类继承,所以我不需要为我编写的每个测试类编写我的 SetUp 和 TearDown。
SetUp 的另一个好处/TearDown夹具是我可以使用相同的WebDriver实例贯穿所有测试。 SetUp将创建 WebDriver实例,并将其传递给测试用例类,测试用例可用于初始化 PageObjects 和执行点击等。测试完成后,WebDriver实例被传回 TearDown用于清理。这是高效且易于使用的。

我的问题:我不了解如何实现此功能的 Python 最佳实践。

我已通读 Python unittest 文档 here并阅读 Python 多重继承 here运气不好。我也读过这个 SO 讨论 here ,但它已有 10 多年的历史,并且包含许多两极分化的观点。我确实使用讨论作为开始的指导,但我不想在不理解的情况下盲目地编写代码。

我对如何实际继承 setUp() 感到困惑。 , tearDown() ,和我的webdriver实例。我不想声明一个新的 webdriver实例,并重写 setUp()tearDown()每个测试类的方法,因为这似乎效率低下。

这是我尝试过的:

这是SetUp/TearDown夹具,用于处理所有测试用例的设置和拆卸,并跟踪单例 WebDriver实例。

项目目录结构:

Project Directory Structure
base_test_fixture.py

from selenium import webdriver
import unittest


class BaseTestFixture(unittest.TestCase):

driver = None

def setUp(self):
print("Running SetUp")
self.driver = webdriver.Chrome()

def tearDown(self):
print("Running Teardown")
self.driver.close()
self.driver.quit()

这里是 test_webdriver.py :
import unittest
import BaseTestFixture


class TestWebDriver(BaseTestFixture.SetUpTearDownFixture):

def test_should_start_webdriver(self):
super.setUp()
print("Running test 1")
super.driver.get("https://www.google.com")
assert "Google" in self.driver.title
super.tearDown()

def test_should_navigate_to_stackoverflow(self):
super.setUp()
print("Running test 2")
super.driver.get("https://www.stackoverflow.com")
assert "Stack Overflow" in self.driver.title
super.teardown()


if __name__ == '__main__':
unittest.main()



这是我的类声明显示的错误: AttributeError: module 'BaseTestFixture' has no attribute 'SetUpTearDownFixture'
是否可以实现单个 WebDriver , setUp() , 和 tearDown()适用于所有 Python 测试用例?

最佳答案

你很亲密。 Python 的约定是你的模块应该用下划线命名,所以我会将 BaseTestFixture.py 重命名为 base_test_fixture.py,并且模块中的类将是模块名称的驼峰版本。

这会给我们base_test_fixture.py:

from selenium import webdriver
from unittest import TestCase


class BaseTestFixture(TestCase):

和 test_web_driver.py:
import unittest
from base_test_fixture import BaseTestFixture


class TestWebDriver(BaseTestFixture):

如果您仍然遇到问题,则问题可能出在您的包的目录结构中,因此请通过编辑上面的问题以指示您的目录和文件的结构与我们分享。

此外,在您的测试中,由于测试类继承了 self.driver,您只需将其称为 self.driver(不是 super.)。

此外,setUp() 和 tearDown() 由 unittest 自动调用,因此您不必显式调用它们。

关于python-3.x - 是否可以继承 setup() 和 tearDown() 方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58204108/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com