pytest-默认灯具参数值

时间:2019-01-09 12:05:30

标签: python-3.x pytest

我在pytest中编写了一个夹具,该夹具没有参数化,但是被很多测试所使用。后来我需要参数化这个灯具。

为了不必$t1 = time(); $t2 = $t1 +10 Save $t1 in redis server Save $t2 in browser cookie (encrypted, only server know how to decrypt it) 进行所有旧测试,我做了以下工作:

mark.parametrize

现在我可以同时拥有两个:

def ldap_con(request):
    try:
        server_name = request.param
    except AttributeError:
        server_name = "ldaps://my_default_server"
    c = Connection(server_name, use_ssl=True)
    yield c
    c.unbind()

该解决方案有几个缺点:

  • 我正在捕获任意属性错误(可能还有另一个)
  • 它不考虑命名参数
  • 不清楚读者是否知道默认值

是否有一种标准方法来为灯具参数定义默认值?

1 个答案:

答案 0 :(得分:0)

间接参数化很麻烦。为了避免这种情况,我通常编写fixture 以便它返回一个函数。我最终会这样写:

def ldap_con():
    def _ldap_con(server_name="ldaps://my_default_server"):
        c = Connection(server_name, use_ssl=True)
        yield c
        c.unbind()
    return _ldap_con

def test_old(ldap_con):
    run_test_to_default_connection(ldap_con())


@pytest.mark.parametrize('server', ['mynewserver'])
def test_new(server):
    run_test_to_new_connection(ldap_con(server))