正文
Quenya 如何生成 API 测试?
虽然撰写生成式测试会让开发者撰写测试的效率大大提升,Quenya 还是希望能帮助开发者来自动生成生成式测试。这听上去似乎很难,但因为有 OpenAPI spec 为基础,所以反而顺理成章。我们可以遍历 Open API spec 里面的每个 operation,从里面取出 request 相关的数据的 schema,然后生成测试数据集,发送请求,得到响应,最后用 response 的 schema 来验证,流程如下:
如何生成测试数据集?
想法很简单直观,接下来我们只需要解决一个核心问题:如何从一个描述了数据类型,可以做数据校验的 JSON schema 中生成可用于生成式测试的数据集?
这个问题进一步可以分解成两个问题:
-
如何通过 JSON schema 生成正确的数据?
-
如何通过 JSON schema 生成错误的数据?
为了解决这个问题,我做了一个新的库,叫
json_data_faker
(github.com/tyrchen/json_data_faker)。为啥需要做一个新的库?因为我感觉通过 JSON schema 生成随机的测试数据,是一个比较公共的需求,不光 Quenya 需要它,其它项目也许也会用到它。
这个库的接口很简单,给定一个 JSON schema,会返回一个 stream,如果从这个 stream 里读取数据,会得到一个满足 JSON schema 的数据结构,比如下面的代码,我们期待获得一个 Todo 结构的数组:
iex> object_schema = %{
"properties" => %{
"body" => %{
"maxLength" => 140,
"minLength" => 3,
"type" => "string"
},
"created" => %{
"format" => "date-time",
"type" => "string"
},
"id" => %{
"format" => "uuid",
"type" => "string"
},
"status" => %{
"enum" => [
"active",
"completed"
],
"type" => "string"
},
"updated" => %{
"format" => "date-time",
"type" => "string"
}
},
"required" => [
"body"
],