首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将Tavern测试的响应保存在JSON文件中?

如何将Tavern测试的响应保存在JSON文件中?
EN

Stack Overflow用户
提问于 2018-06-28 13:25:47
回答 2查看 2.2K关注 0票数 1

我正在使用Tavern工具进行API测试,并且希望在执行测试时将返回的响应保存在JSON文件中,因此我使用以下代码来响应yaml测试文件:

代码语言:javascript
复制
 response:
    status_code: 200
    save:
      $ext:
        function: tavern_utils:save_response

tavern_utils:save_response()函数:

代码语言:javascript
复制
def save_response(response):
    with open('saved.json','w') as file:
       json.dump(file,response.json())

因此,在使用pytest执行测试时,我得到以下错误:

代码语言:javascript
复制
TypeError: The Object of type 'TextIOWrapper' is not JSON serializable

如何解决此错误或通过任何其他方法保存响应?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-06-28 13:45:07

TextIOWrapper是一个打开的文本文件,或者类似于一个文件(在您的例子中,是某种网络响应对象)。您显然不能序列化它(它必须存储服务器的整个状态以及您与服务器之间的网络连接才能恢复相同的对象)。

如果您希望将文件中的行序列化为字符串列表,这很容易。文件对象是行上的迭代器,因此:

代码语言:javascript
复制
list(f)

…给出了这些行的列表。

如果要将其序列化为一个巨大的字符串,也可以这样做:

代码语言:javascript
复制
f.read()

或者,如果文件的内容已经是JSON编码的字符串,并且希望将其解码为可以序列化的值,则可以对其进行json.load。但是,除非您这样做是为了验证它确实是有效的JSON,否则这有点愚蠢;您只需将JSON字符串作为字符串读取,然后将其写回字符串,而无需在任何地方执行任何JSON操作。

如果你想要不同的东西,你需要解释你想要做什么,但它可能是可行的。

如果你想要不同的东西

票数 0
EN

Stack Overflow用户

发布于 2018-06-29 06:17:12

得到了解决方案:只需将save_response函数替换为:

代码语言:javascript
复制
def save_response(response):
    filename='file4.json'
    with open(filename, 'w') as f:
        json.dump(response.json(), f)

而Yaml测试文件如下:

代码语言:javascript
复制
  response:
    status_code: 200
    body:
      $ext:
        function: tavern_utils:save_response            
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51084123

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档