我主要在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实例。

项目目录结构:

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

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'

是否可以为所有Python测试用例实现单个WebDriversetUp()tearDown()

最佳答案

你很亲密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(没有超级类)。

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

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

10-09 18:50