7 个版本
0.1.6 | 2021 年 11 月 2 日 |
---|---|
0.1.5 | 2021 年 10 月 27 日 |
#229 在 模板引擎
89KB
2K SLoC
🧁 Upcake
API 的蛋糕
概述
Upcake 允许对 HTTP 请求执行断言。请求及其断言定义在 YAML 文件中,并且可以在请求名称的情况下相互依赖。断言可以针对请求时间数据和任何响应数据,包括头部、内容和响应代码。
请求 URL、头部和内容支持使用 Handlebars 通过 handlebars crate 进行模板渲染。
请求并行运行,除非它们依赖于其他请求,在这种情况下它们将等待依赖项完成后再开始。
请求的响应头部和内容作为模板上下文的一部分提供给依赖请求。
安装
使用 cargo
cargo install upcake
从源码安装
git clone https://github.com/johnnynotsolucky/upcake.git
cd upcake
cargo install --path .
用法
命令行选项
--env-var-prefix
- 用于过滤注入模板上下文的环境变量的可选前缀-k
,--insecure
- 在使用 SSL 时允许不安全的服务器连接-E
,--cert
- 客户端证书文件--key
- 客户端私钥文件--cacert
- 用于验证的 CA 证书-L
,--location
- 跟随重定向-v
,--verbose
- 详细输出--fail-request
- 在 HTTP 错误响应代码上失败请求-s
,--max-response-size
- 最大响应大小(以字节为单位)--extra-vars
- 设置额外的变量为 key=value 或 YAML。要使用文件,请以 "@" 预先附加值。在user
属性的模板上下文中可用。--connect-timeout
- 允许连接的最大时间(以毫秒为单位)-c
,--config-file
- 请求配置文件路径。默认为 "Upcakefile.yaml"。
注意: 命令行中设置的配置将覆盖 Upcakefile 中设置的该属性的配置。
配置
env_var_prefix
- 用于过滤环境变量的可选前缀。由--env-var-prefix
覆盖。location
- 跟踪重定向。由--insecure
覆盖。insecure
- 在使用 SSL 时允许不安全的服务器连接。由--insecure
覆盖。client_cert
- 客户端证书文件。由--cert
覆盖。除非是绝对路径,否则路径相对于配置文件目录。client_key
- 客户端私钥文件。由--key
覆盖。除非是绝对路径,否则路径相对于配置文件目录。ca_cert
- 用于验证的 CA 证书。由--cacert
覆盖。除非是绝对路径,否则路径相对于配置文件目录。connect_timeout
- 允许的最大连接时间。由--connect-timeout
覆盖。extra_vars
- 从 YAML 映射中设置额外的变量。与使用--extra-vars
设置的变量合并。在user
属性的模板上下文中可用。verbose
- 详细输出。由--verbose
覆盖。fail_request
- 在 HTTP 错误响应代码上请求失败max_response_size
- 最大响应大小(字节)。由--max-response-size
覆盖。requests
- 请求配置列表。
示例
location: false
insecure: false
ca_cert: ca.pem
client_cert: client.pem
client_key: key.pem
connect_timeout: 100
extra_vars:
my_var: Some Value
verbose: true
max_response_size: 32000
requests:
- url: "https://127.0.0.1:8888/post"
请求配置
name
可选 - 请求名称。requires
可选 - 依赖此请求的命名请求列表。request_method
可选 - 要使用的 HTTP 方法。默认为 "GET"。data
可选 - 与请求一起发送的数据。通过在值前加 "@" 发送文件内容,例如 "@path/to/body/template.hbs"。相对路径相对于加载的配置文件目录。headers
可选 - 头部列表或用于渲染原始头部的模板。url
- 要向其发送请求的 URL。assertions
可选 - 对响应执行断言的列表。默认为 HTTP 200 断言。
示例
- name: "Request B"
requires: ["Request A"]
request_method: "POST"
data: "@data.hbs"
headers:
- name: Accept
value: application/json
- name: Content-Type
value: application/json
url: "https://127.0.0.1:8888/post"
assertions:
- type: equal
path: ."response_code"
value: 200
头部模板
- name: "Request B"
requires: ["Request A"]
request_method: "GET"
url: "https://127.0.0.1:8888/get"
headers: |
Accept: application/json
{{#each requests.[Request A].headers}}
{{#if (eqi name "Set-Cookie")}}
Cookie: {{value}}
{{/if}}
{{/each}}
断言配置
type
- 要使用的断言类型。请参阅 可用断言。path
- 断言应运行的字段的 jql 路径。默认为.
。在内部断言上忽略path
,例如 长度 断言。skip
可选 - 是否跳过断言。如果设置,则需要一个字符串值作为原因。assertion
- 要应用的断言
示例
- type: length
path: ."content"."slideshow"."slides".[]
skip: Some reason for skipping the assertion
assertion:
type: equal
value: 2
可用断言
除了顶层断言配置之外,每个断言都有其自己的属性,这些属性必须设置。
在之间
类型:between
断言值在某个范围内。
min
- 范围开始。max
- 范围结束。inclusive
可选 - 是否在断言中包含min
和max
。
示例
- type: between
path: ."response_code"
min: 200
max: 399
inclusive: true
等于
类型: equal
断言一个值等于给定的值。
value
- 要断言的值。
示例
- type: equal
path: ."response_code"
value: 200
不等于
类型: not-equal
断言一个值不等于给定的值。
value
- 要断言的值。
示例
- type: not-equal
path: ."response_code"
value: 204
长度
类型: length
断言一个值的长度通过给定的断言。
assertion
- 任何在断言配置中定义的相同配置的断言。
示例
- type: length
path: ."headers".[]
assertion:
- type: equal
value: 5
包含
类型: contains
断言响应值包含给定的值。
-
对于字符串,它断言子字符串存在于值中;
-
对于数组,它断言值存在于数组中;
-
对于映射(字典/对象类型),断言输入映射存在于响应映射中。
-
value
- 要断言的值包含在给定的值中。
示例
断言映射包含所有键/值对
- type: contains
path: ."content".{}
value:
key: Value
another_property: Some other value
断言数组包含一个值
- type: contains
path: ."content"."my_integer_array".[]
value: 10
或者
- type: contains
path: ."content"."my_object_array".[]
value:
id: item_10
value: Item Value
断言子字符串出现在响应值中
- type: contains
path: ."content"."my_string"
value: "value"
存在
类型: exists
断言给定的值作为键存在于响应值中。
value
- 要断言的值存在于给定的映射中。
示例
- type: exists
path: ."content"."my_object".{}
value: id
大于
类型: greater-than
断言一个值大于给定的值。
value
- 要断言的值。
示例
- type: greater-than
path: ."response_code"
value: 200
大于等于
类型: greater-than-equal
断言一个值大于或等于给定的值。
value
- 要断言的值。
示例
- type: greater-than-equal
path: ."response_code"
value: 200
小于
类型: less-than
断言一个值小于给定的值。
value
- 要断言的值。
示例
- type: less-than
path: ."response_code"
value: 400
小于等于
类型: less-than-equal
断言一个值小于或等于给定的值。
value
- 要断言的值。
示例
- type: less-than-equal
path: ."timing"."starttransfer"
value: 100
响应数据
请求结果
http_version
- 请求中使用的HTTP版本。response_code
- 返回的HTTP响应代码。response_message
- 如果有的话,从主机返回的HTTP响应消息。headers
- 响应头列表。timing
- 响应时间数据。参见时间结果。content
- 响应内容,格式化为JSON或原始内容(如果无法解析为JSON)。
时间结果
namelookup
- 从请求开始到域名查找解决所花费的毫秒数。connect
- 从请求开始到与远程主机建立连接所花费的毫秒数。pretransfer
- 从请求开始到文件传输即将开始所花费的毫秒数。starttransfer
- 从请求开始到接收第一个字节数据所花费的毫秒数。也称为TTFB。total
- 从请求开始到请求结束所花费的毫秒数。dns_resolution
-namelookup
的别名。tcp_connection
-connect
和namelookup
的差值。tls_connection
-pretransfer
和connect
的区别。server_processing
-starttransfer
和pretransfer
的区别。content_transfer
-total
和starttransfer
的区别。
模板化
请求 URL、头部和内容支持使用 Handlebars 通过 handlebars crate 进行模板渲染。
请求的响应头部和内容作为模板上下文的一部分提供给依赖请求。
可用元素
user
可选的用户提供的上下文。这是通过 --extra-vars
标志和/或在配置文件中的 extra_vars
配置属性来设置的。
env
程序运行时可用环境变量的映射。使用 --env-var-prefix
或 env_var_prefix
配置选项设置前缀将删除任何不以该值开头的环境变量。
requests
按请求名称键控的请求映射。只有设置在请求配置的 requires
属性中的请求会被包括。尚未执行或完成的请求将不会可用,直到它们完成。
助手
- 内置助手
- 布尔助手
eqi
- 不区分大小写的等于nei
- 不区分大小写的不等
示例
示例在 examples 中。
它们被配置为针对本地的 httpbin 服务器运行。
httpbin 服务器
使用 docker 启动
docker run -p 8888:80 kennethreitz/httpbin
使用 docker-compose 启动
docker-compose --file examples/docker-compose.yaml up
运行示例
upcake --config-file examples/basic.yaml
AUTH_TOKEN=my_token upcake --config-file ./examples/pipeline.yaml
upcake --config-file examples/mtls.yaml
依赖关系
~20–34MB
~589K SLoC