我正在使用Tavern工具进行API测试,并且希望在执行测试时将返回的响应保存在JSON文件中,因此我使用以下代码来响应yaml测试文件:
response:
status_code: 200
save:
$ext:
function: tavern_utils:save_responsetavern_utils:save_response()函数:
def save_response(response):
with open('saved.json','w') as file:
json.dump(file,response.json())因此,在使用pytest执行测试时,我得到以下错误:
TypeError: The Object of type 'TextIOWrapper' is not JSON serializable如何解决此错误或通过任何其他方法保存响应?
发布于 2018-06-28 13:45:07
TextIOWrapper是一个打开的文本文件,或者类似于一个文件(在您的例子中,是某种网络响应对象)。您显然不能序列化它(它必须存储服务器的整个状态以及您与服务器之间的网络连接才能恢复相同的对象)。
如果您希望将文件中的行序列化为字符串列表,这很容易。文件对象是行上的迭代器,因此:
list(f)…给出了这些行的列表。
如果要将其序列化为一个巨大的字符串,也可以这样做:
f.read()或者,如果文件的内容已经是JSON编码的字符串,并且希望将其解码为可以序列化的值,则可以对其进行json.load。但是,除非您这样做是为了验证它确实是有效的JSON,否则这有点愚蠢;您只需将JSON字符串作为字符串读取,然后将其写回字符串,而无需在任何地方执行任何JSON操作。
如果你想要不同的东西,你需要解释你想要做什么,但它可能是可行的。
如果你想要不同的东西
发布于 2018-06-29 06:17:12
得到了解决方案:只需将save_response函数替换为:
def save_response(response):
filename='file4.json'
with open(filename, 'w') as f:
json.dump(response.json(), f)而Yaml测试文件如下:
response:
status_code: 200
body:
$ext:
function: tavern_utils:save_response https://stackoverflow.com/questions/51084123
复制相似问题