问题描述
我正在尝试使用 mid 和 cids 的随机输入来测试 API 端点(下面的代码)。但是,每当我运行测试时,它都会说缺少必需的位置参数。任何人都可以帮忙吗?
@schema.parametrize()
@schema.given(mid=st.integers(),cids=st.lists(st.integers()))
@settings(max_examples=1)
def test_api_customised(mid,cids,case):
case.headers = case.headers or {}
case.headers['Authorization'] = "apiKey " + str(base64_composer)
case.headers['Content-Type'] = "application/json"
# CREATE JOB
if case.method == "POST":
if isinstance(case.body,dict):
case.body['moduleId'] = mid
case.body['clientIds'] = cids
print(case.body)
response = case.call()
case.validate_response(response)
And I got this error:
TypeError: test_api_customised() missing 2 required positional arguments: 'mid' and 'cids'
解决方法
这很可能是由于 API 架构中存在显式示例造成的。请参阅此issue。
临时解决方案是排除 explicit
阶段:
... # Skipped for brevity
from hypothesis import settings,Phase
# Used in `@settings`
PHASES = phases=set(Phase) - {Phase.explicit}
@schema.parametrize()
@schema.given(mid=st.integers(),cids=st.lists(st.integers()))
@settings(max_examples=1,phases=PHASES)
def test_api_customised(mid,cids,case):
... # the rest of the test
更全面的解决方案需要更改 Schemathesis(参见 this issue)
您可以通过从 API 中删除 examples
/ example
/ x-examples
/ x-example
关键字(取决于您的 API 规范版本)来检查是否适合您架构。如果不是这种情况,我鼓励您to report提供更多详细信息(最好包括您的 API 架构)。