问答 UI 自动化测试 pytest conftest.py 与 ddt 模块能否一起使用

太匆匆 · 2023年04月17日 · 最后由 七街老酒 回复于 2023年04月17日 · 8068 次阅读

背景:

在进行 UI 自动化测试时想同时引入 ddt 和 pytest 的 conftest.py,其中 conftest.py 定义 driver,在 test_方法中引入 ddt 的 file_data。其中测试方法 test_的参数包含 driver,testdata(如用户名密码)

遇到的问题:

ddt 模块要求 file_data 与 test_* 方法的形参保持一致,但是形参中多了 driver,造成不一致的问题,无法运行自动化测试

求助:

在使用了 conftest.py 定义 driver 的情况下,如何使用 ddt 引入测试数据呢?

代码示例:

在 conftest.py 中定义了 driver,代码如下:

@pytest.fixture()
def driver():
    global driver
    # 在DriverConf中定义了driver的一些配置,此处直接引用
    driver = DriverConf().driver_conf()
    yield driver
    driver.quit()

在测试方法中希望能引入 ddt,代码目前是这样写的

@file_data("../testdata/login.yml")
   def test_login(self, driver, username, password, expect):
       """
       登录验证
       :param driver:  浏览器驱动
       :param username: 用户名
       :param password: 密码
       :param expect: 预期结果
       :return:
       """
       # with allure.step("登录"):
       driver = eval(driver)
       LoginPage().login(driver, username, password)
       pytest.assume(LoginPage().is_success(driver, expect))

       add_img_2_report(driver, "登录")

driver 是直接引用 conftest.py 中的定义,yml 文件中设置了用户名、密码、预期结果。

共收到 5 条回复 时间 点赞

pytest 你可以考虑使用 pytest.mark.parametriz 来实现参数化

仅楼主可见
微凉 回复

是的,pytest.mark.parametrize 可以实现。主要是我自己想同时使用 ddt 的 file_data 来去实现😂

kane 回复

有道理的,使用其他方式定义 driver 确实也能满足我的需求

driver 命名调整下应该就可以了吧

需要 登录 后方可回复, 如果你还没有账号请点击这里 注册