如何将单个字典与元组合并为适配pytest parametrize的元组?
解决字典与元组合并为目标元组的问题
嘿,我来帮你搞定这个合并问题!你遇到的zip无效的问题很常见,先给你解释下原因:当你直接迭代字典url时,Python默认只会遍历它的键(也就是'url'),所以zip(url, expected)会把字典的键和元组的第一个元素配对,得到('url', 0),这显然不是你想要的结果。
正确的合并方式
其实实现你要的效果非常简单——把字典作为单个元素,和原元组拼接起来就好。因为元组支持用+运算符拼接,只需要先把字典包装成单元素元组(注意逗号不能少,否则会被当成普通括号),再和expected拼接:
url = {'url': 'https://test.com'} expected = (0, "Test") # 合并成目标元组 result = (url,) + expected print(result) # 输出: ({'url': 'https://test.com'}, 0, "Test")
这样得到的结果正好符合你给pytest parametrize传参的需求。如果是批量处理多个测试用例,也可以用同样的逻辑批量生成:
# 直接定义测试用例列表 test_cases = [ ({'url': 'https://test.com'}, 0, "Test"), ({'url': 'https://prod.com'}, 1, "Prod") ] # 或者用列表推导式批量生成 urls = [{'url': 'https://test.com'}, {'url': 'https://prod.com'}] expecteds = [(0, "Test"), (1, "Prod")] test_cases = [(u,) + e for u, e in zip(urls, expecteds)]
这样就能直接把test_cases传给@pytest.mark.parametrize使用啦。
内容的提问来源于stack exchange,提问作者staten12
相关产品推荐
相关产品推荐

