首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用`<<`请求和修改Tavern `!include` ` template JSON?

如何使用`<<`请求和修改Tavern `!include` ` template JSON?
EN

Stack Overflow用户
提问于 2021-11-30 00:56:19
回答 1查看 181关注 0票数 0

我正在使用小酒馆向一个web服务器发出多个类似的请求,但是在不同测试的同一阶段(即不同的YAML文件)。每个web请求都需要很长的时间,所以我将整个测试分成不同的测试文件,这样我就可以使用python-xdist并行运行测试了。这意味着,通过将所有测试合并为同一测试的单独阶段,我将一无所获。

我似乎可以使用!include重用存储在JSON或YAML文件中的完整JSON主体(参见直接包括测试数据)。但是,我希望重用部分JSON主体,然后只添加/重写每个测试的不同参数(请参阅重用请求和YAML片段")

例如,测试文件如下所示:

选项1:包含的中间变量

代码语言:javascript
复制
variables:
  request_template: &reqtemp
    !include components/request.yaml


stages:
  - name: Create infrastructure
    request:
      url: "{service:s}"
      json:
        <<: *reqtemp
# Here I start extending the template with values specific to the test
        name: "infrastructure_name"
        param_1: "param_for_test_1"
        param_2: "another param for test 1"

但是,在运行这样的测试时,它将引发异常expected a mapping or list of mappings for merging, but found scalar。我尝试过其他语法选项,如以下所示,但仍然会出现相同的错误:

备选案文2:无变量

代码语言:javascript
复制
stages:
  - name: Create infrastructure
    request:
      url: "{service:s}"
      json:
        <<: !include components/request.yaml
# Here I start extending the template with values specific to the test
        name: "infrastructure_name"
        param_1: "param_for_test_1"
        param_2: "another param for test 1"

如何利用!include导入一个大型请求体而又能够在每个阶段修改它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-11-30 12:18:32

这是不可能的

<<是YAML 在此定义的可选扩展。上面写着

…如果与键关联的值是单个映射节点,则将其每个键/值对插入到当前映射中,除非键已经存在于其中。如果与合并键相关联的值是序列,则期望该序列包含映射节点,并根据其在序列中的顺序依次合并这些节点。…

无论您是将!include作为别名还是直接给出,YAML的语义始终是<<键与标量相关联,标量恰好具有!include标记。如果关联的值是标量,则合并键不定义要做什么,因此出现了错误。

用户定义的标记,如!include (这里的用户含义Tavern ),在合并后被处理。它们是用自定义构造函数实现的,这些构造函数以YAML值作为输入(这里是标量components/request.yaml)并返回本机数据结构(例如,映射的dict、序列的list以及标量(通常是字符串、数字或布尔值)(取决于标量的内容)。在!include的情况下,可能会返回来自引用文件的加载数据(我不知道血淋淋的细节)。

重要的是,使用自定义构造函数,我们将保留YAML结构(映射、序列和标量),因此不能使用定义在YAML结构上的语义类!!merge来处理结果。

克服这一问题的唯一方法是,如果Tavern实现了自己的!merge语义,该语义将用于轻松加载的数据,而不是YAML结构。既然没有,你在这里就不走运了。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70163056

复制
相关文章

相似问题

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