博客
关于我
Pytest自动化测试框架 fixture 传参实战
阅读量:799 次
发布时间:2023-03-05

本文共 2774 字,大约阅读时间需要 9 分钟。

PyTest Fixtures参数化测试用例设计

在PyTest框架中,Fixture参数化是一种强大的功能,可以帮助我们重复使用相同的测试前置条件,从而提高测试效率。然而,如何在不同的测试用例之间共享或参数化Fixture数据是一个常见的问题。以下是一些实际案例,展示了如何在PyTest中使用Fixture参数化来实现复用性和灵活性。


案例1:单个参数传递

背景

当 Fixture 需要传递单个参数时,可以使用 request.param 来获取当前参数值。这种方法适用于简单的参数传递场景。

解决方案

@pytest.fixture()def login(request):    name = request.param    print(f"== 账号是:{name} ==")    return namedata = ["pyy1", "polo"]ids = [f"login_test_name is:{name}" for name in data]@pytest.mark.parametrize("login", data, ids=ids, indirect=True)def test_name(login):    print(f" 测试用例的登录账号是:{login} ")

优点

  • request.param 提供了灵活的参数传递方式。
  • indirect=True 参数允许 Fixture 作为函数调用,而不是直接作为参数。

执行结果

  • 测试用例通过了所有参数的验证。

案例2:多个参数传递

背景

当需要传递多个参数时,可以使用字典数据结构来包装多个参数值。这种方法适用于需要同时传递多个相关参数的场景。

解决方案

@pytest.fixture()def logins(request):    param = request.param    print(f"账号是:{param['username']},密码是:{param['pwd']}")    return paramdata = [    {"username": "name1", "pwd": "pwd1"},    {"username": "name2", "pwd": "pwd2"}]@pytest.mark.parametrize("logins", data, indirect=True)def test_name_pwd(logins):    print(f"账号是:{logins['username']},密码是:{logins['pwd']}")

优点

  • 使用字典数据结构支持多参数传递。
  • indirect=True 参数确保 Fixture 作为函数调用。

执行结果

  • 所有测试用例都通过了验证。

案例3:多个Fixture(单独装饰器)

背景

当需要同时获取多个Fixture值时,可以通过 @pytest.mark.parametrize 一次性传递多个Fixture参数。

解决方案

@pytest.fixture(scope="module")def input_user(request):    user = request.param    print("登录账户:%s" % user)    return user@pytest.fixture(scope="module")def input_psw(request):    psw = request.param    print("登录密码:%s" % psw)    return pswdata = [    ("name1", "pwd1"),    ("name2", "pwd2")]@pytest.mark.parametrize("input_user,input_psw", data, indirect=True)def test_more_fixture(input_user, input_psw):    print("fixture返回的内容:", input_user, input_psw)

优点

  • 使用 scope="module" 确保Fixture在模块范围内重复使用。
  • @pytest.mark.parametrize 支持同时传递多个Fixture参数。

执行结果

  • 所有测试用例都通过了验证。

案例4:多个Fixture(叠加装饰器)

背景

当需要在不同的Fixture之间共享参数时,可以使用多个 @pytest.mark.parametrize 装饰器。

解决方案

@pytest.fixture(scope="function")def input_user(request):    user = request.param    print("登录账户:%s" % user)    return user@pytest.fixture(scope="function")def input_psw(request):    psw = request.param    print("登录密码:%s" % psw)    return pswname = ["name1", "name2"]pwd = ["pwd1", "pwd2"]@pytest.mark.parametrize("input_user", name, indirect=True)@pytest.mark.parametrize("input_psw", pwd, indirect=True)def test_more_fixture(input_user, input_psw):    print("fixture返回的内容:", input_user, input_psw)

优点

  • 使用多个 @pytest.mark.parametrize 装饰器实现多Fixture参数化。
  • scope="function" 确保Fixture在函数级别重复使用。

执行结果

  • 所有测试用例都通过了验证。

测试用例总数

通过上述案例,我们可以看到:

  • 案例1:2条测试用例
  • 案例2:2条测试用例
  • 案例3:2条测试用例
  • 案例4:4条测试用例
  • 总共 10 条测试用例通过了验证。

注意事项

  • 在使用 request.param 时,确保测试数据的完整性和一致性。
  • 当使用多个Fixture参数化时,确保 Fixture 的参数传递方式与测试用例的需求相匹配。
  • 使用 scope 参数合理控制Fixture的生命周期,避免资源浪费。
  • 通过以上方法,我们可以在PyTest中灵活地实现Fixture参数化,从而提高测试用例的复用性和维护性。

    转载地址:http://xnafk.baihongyu.com/

    你可能感兴趣的文章
    PowerDesigner使用教程:不显示背景网格
    查看>>
    PowerDesigner使用教程:创建数据模型以及导出
    查看>>
    PowerDesigner教程系列(二)概念数据模型
    查看>>
    Powerdesigner显示表的comment和列的comment的方法
    查看>>
    PowerDesigner最基础的使用方法入门学习
    查看>>
    PowerDesigner版本控制器设置权限
    查看>>
    PowerDesigner生成数据模型并导出报告
    查看>>
    PowerDesigner逆向工程从SqlServer数据库生成PDM(图文教程)
    查看>>
    PowerEdge T630服务器安装机器学习环境(Ubuntu18.04、Nvidia 1080Ti驱动、CUDA及CUDNN安装)
    查看>>
    PowerPC-object与elf中的符号引用
    查看>>
    Powershell DSC 5.0 - 参数,证书加密账号,以及安装顺序
    查看>>
    PowerShell 批量签入SharePoint Document Library中的文件
    查看>>
    Powershell 自定义对象小技巧
    查看>>
    pptp拨号上网
    查看>>
    PPT美化插件 islide 安装过程问题“加载com加载项时运行出现错误”
    查看>>
    Prefix Tuning:详细解读Optimizing Continuous Prompts for Generation
    查看>>
    PreparedStatement 与Statement 的区别,以及为什么推荐使用 PreparedStatement ?
    查看>>
    Pricing procedure Steps and Details in SAP MM (from SCN)
    查看>>
    Prime Distance
    查看>>
    Prim求MST最小生成树
    查看>>