利用 Prism 构造多版本测试服务
概述
Prism 是一个支持 http mock 的开源工具,可以解析 openapi 配置,根据配置进行相应的响应,我们可以利用它来实现部署多版本服务,用于测试 istio 多版本服务相关的功能。本文给出一个简单的示例。
准备 OpenAPI 配置
我们将 OpenAPI 配置文件存到 ConfigMap 中,用于后续挂载到 prism 作为配置文件 (prism-conf.yaml
):
apiVersion: v1
kind: ConfigMap
metadata:
name: prism-conf
data:
mock-v1.yaml: |
openapi: 3.0.3
info:
title: MockServer v2
description: MockServer v2
version: 1.0.0
paths:
'/':
get:
responses:
'200':
content:
'text/plain':
schema:
type: string
example: v1
mock-v2.yaml: |
openapi: 3.0.3
info:
title: MockServer v2
description: MockServer v2
version: 1.0.0
paths:
'/':
get:
responses:
'200':
content:
'text/plain':
schema:
type: string
example: v2
这里的配置很简单,两个 OpenAPI 配置文件,GET
方式请求 /
路径分别响应 v1
和 v2
的字符串,以便从响应中就能区分出请求转发到了哪个版本的服务。
如果想用编辑器或 IDE 的 OpenAPI 插件编辑配置文件来定义更复杂的规则,可以先直接创建原生 OpenAPI 配置文件 (如 mock-v1.yaml
和 mock-v2.yaml
),然后使用类似下面的命令生成 configmap 的 yaml:
kubectl create configmap prism-conf --dry-run=client -o yaml
--from-file=mock-v1.yaml \
--from-file=mock-v2.yaml | \
grep -v creationTimestamp > prism-conf.yaml