如何在python-bdd测试中正确传入字符串参数?
解决pytest-bdd字符串参数匹配失败问题
问题根源
你的步骤定义既没正确匹配feature中带引号的参数文本,又存在占位符与函数参数名不匹配的问题,导致pytest-bdd无法关联到对应的步骤实现。
修复方案
方案1:用正则捕获引号内的参数(保留feature中的引号格式)
直接通过正则表达式精准匹配feature步骤里的引号及内部内容,同时确保捕获的参数名与函数参数一致:
@given(r'the current account balance is "(?P<amount>[^"]+)"') def current_account_initial_balance(amount): print(amount)
r''标记原始字符串,避免转义字符干扰正则匹配(?P<amount>[^"]+)是命名捕获组,专门提取引号内的非引号字符,参数名amount与函数入参完全对应
方案2:简化步骤文本(去掉feature中的引号)
如果可以调整feature文件的步骤格式,去掉参数外的引号,可直接用pytest-bdd的基础占位符:
feature步骤修改为:
Given the current account balance is zero
步骤定义写成:
@given("the current account balance is {amount}") def current_account_initial_balance(amount): print(amount)
原写法失效的核心原因
- 占位符
{arg}与函数参数amount名称不匹配,pytest-bdd无法完成参数映射 - feature步骤中的引号属于步骤文本的一部分,但你的步骤定义未包含引号内容,导致整体字符串不匹配,触发
StepDefinitionNotFoundError
内容的提问来源于stack exchange,提问作者Martin Gilchrist
相关产品推荐
相关产品推荐

