Ste*_*man 5 python fixtures pytest
我有一个使用夹具作为凭证的python测试(用户ID和密码的元组)
def test_something(credentials)
   (userid, password) = credentials
   print("Hello {0}, welcome to my test".format(userid))
Run Code Online (Sandbox Code Playgroud)
我有pytest夹具来获取凭据:
@pytest.fixture()
def credentials():
   return ("my_userid", "my_password")
Run Code Online (Sandbox Code Playgroud)
效果很好
现在,我想将此扩展为多个凭证(例如,登台和生产),以便我的测试将运行两次(每个登台和生产一次)。
我以为参数化是答案,但似乎我无法使用灯具进行参数化。
我想做这样的事情:
@pytest.fixture(params=[staging_credentials, production_credentials])
def credentials(request):
    return request.param
Run Code Online (Sandbox Code Playgroud)
其中staging_credentials和production_credentials都是固定装置:
@pytest.fixture()
def staging_credentials():
   return ("staging_userid", "staging_password")
@pytest.fixture()
def production_credentials():
   return ("prod_userid", "prod_password")
Run Code Online (Sandbox Code Playgroud)
但显然灯具的参数不能是其他灯具。
关于如何优雅地处理此问题的任何建议?我看过https://docs.pytest.org/zh-CN/latest/proposals/parametrize_with_fixtures.html,但这似乎是蛮力的。
谢谢!史蒂夫
间接参数化就是答案。因此,灯具的参数可以是其他灯具(按名称/代码)。
import pytest
all_credentials = {
    'staging': ('user1', 'pass1'),
    'prod': ('user2', 'pass2'),
}
@pytest.fixture
def credentials(request):
    return all_credentials[request.param]
@pytest.mark.parametrize('credentials', ['staging', 'prod'], indirect=True)
def test_me(credentials):
    pass
Run Code Online (Sandbox Code Playgroud)
从技术上讲,您不仅可以通过其键获取 dict 值,还可以credentials根据生成结果request.param,并且此 param 将是传递给测试的同名参数的值。
如果您希望使用其他灯具(可能是因为设置/拆卸阶段,因为这是这样做的唯一原因):
import pytest
@pytest.fixture
def credentials(request):
    return request.getfuncargvalue(request.param)
@pytest.fixture()
def staging_credentials():
   return ("staging_userid", "staging_password")
@pytest.fixture()
def production_credentials():
   return ("prod_userid", "prod_password")
@pytest.mark.parametrize('credentials', ['staging_credentials', 'production_credentials'], indirect=True)
def test_me(credentials):
    pass
Run Code Online (Sandbox Code Playgroud)
在这里,request.getfuncargvalue(...)将通过夹具名称动态返回夹具值。
|   归档时间:  |  
           
  |  
        
|   查看次数:  |  
           1742 次  |  
        
|   最近记录:  |