【问题标题】:How to use pytest fixture and sharing variable between each testcase如何在每个测试用例之间使用 pytest 夹具和共享变量
【发布时间】:2017-02-15 06:18:51
【问题描述】:

我需要用 python3 和 selenium webdriver 编写一些 ui 测试。使用以下测试用例,测试运行良好。但是,我的问题是我编写测试用例的更好方法是什么,以及如何在每个测试用例和 pytest 夹具函数之间传递“基础”变量 我需要 1:在每个测试用例之前打开主页,2:在每个测试用例之后重新加载主页,并通过在每个测试用例和 pytest 夹具函数之间共享变量“base”来减少代码。 导入pytest 从 modules.base 导入主页

class TestLogin(object):

    def setup_method(self, method):
        self.driver = WebDriver(desired_capabilities=desired_capabilities, command_executor=command_executor)
        self.current_method_name = method.__name__

    def teardown_method(self, method):
        self.driver.close()
        self.driver.quit()

    @pytest.fixture(scope="function")
    def loadpage():
        self.base = Home(self.driver).open()

    def loadLogin():
        base.loadLogin()

    def test_a(self):
        base = Home(self.driver).open()
        assert True == base.dotesta()
        base.loadLogin()

    def test_b(self):
        base = Home(self.driver).open()
        assert True == base.dotestb()
        base.loadLogin()

    def test_c(self):
        base = Home(self.driver).open()
        assert True == base.dotestc()
        base.loadLogin()

    def test_d(self):
        base = Home(self.driver).open()
        assert True == base.dotestd()
        base.loadLogin()

【问题讨论】:

    标签: python-3.x user-interface selenium-webdriver pytest


    【解决方案1】:

    对于您当前的要求,您不需要使用夹具。这是你的代码。

    class TestLogin(object):
    
        def setup_method(self, method):
            self.driver = WebDriver(desired_capabilities=desired_capabilities, command_executor=command_executor)
            self.current_method_name = method.__name__
            self.base = Home(self.driver).open()
    
        def teardown_method(self, method):
            self.base.loadLogin()
            self.driver.close()
            self.driver.quit()
    
        def test_a(self):
            assert True == self.base.dotesta()
    
        def test_b(self):
            assert True == self.base.dotestb()
    
        def test_c(self):
            assert True == self.base.dotestc()
    
        def test_d(self):
            assert True == self.base.dotestd()
    

    编辑: 如果只打开一次页面,请将 setup 和 teardown 替换为

        def setup_class(cls):
            cls.driver = WebDriver(desired_capabilities=desired_capabilities, command_executor=command_executor)
            cls.current_method_name = method.__name__
            cls.base = Home(self.driver).open()
    
        def teardown_method(cls):
            cls.base.loadLogin()
            cls.driver.close()
            cls.driver.quit()
    

    关于cls的详细信息。

    【讨论】:

    • 嗨,我的意思是在所有测试运行之前打开页面一次并在每个测试用例之间传递变量基数,并在所有测试用例完成后关闭页面一次
    猜你喜欢
    • 2018-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-12-17
    • 1970-01-01
    • 1970-01-01
    • 2019-02-21
    相关资源
    最近更新 更多