karriere / mocky
Mocky 是一个用 PHP 编写的简单 API 模拟解决方案
Requires
- php: ^7.4 | ^8.0
- slim/slim-skeleton: ^4.0
Requires (Dev)
- karriere/code-quality: ^5.1
README
Mocky - 一个简单的 API 模拟服务器
Mocky 是一个基于 Slim 框架 的 PHP 编写的简单 API 模拟解决方案。
安装
您可以使用 mocky-template
作为起点创建一个新的模拟 API
composer create-project karriere/mocky-template /destination/path
或将 mocky 作为项目的依赖项添加。
composer require karriere/mocky
配置
使用 mocky,您可以通过 JSON 定义您的测试用例。配置由两种文件类型组成
- 测试文件
- 模拟文件
测试文件包含所有您的测试端点(按请求方法分组)并引用一个或多个模拟文件。模拟文件定义要返回的模拟数据。这种分离允许您在多个测试中重用模拟数据。
编写测试文件
测试文件存储在 tests
文件夹中,并具有以下基本结构
{ "REQUEST_METHOD": { "ENDPOINT": { "content-type": "application/json", "mock": "mock-file.json" } } }
测试文件是请求方法(GET、POST、PUT、DELETE、...)的映射。每个请求方法条目包含端点映射作为键和端点定义作为值。
每个请求定义必须定义一个 content-type
和一个 mock
字段。mock 字段是要提供的模拟数据文件的引用。
示例
{ "GET": { "/users": { "content-type": "application/vnd.api+json", "mock": "users/list-users.json" }, "/users/1": { "content-type": "application/vnd.api+json", "mock": "users/single-user.json" } } }
组织测试
为了能够按功能组织测试 JSON 文件,可以将测试存储在子文件夹中。
例如,要存储关于用户功能的多个测试,您可以在 tests/user/a-test.json
下创建一个测试。此测试具有以下设置路由 /setup/{scope}/user/a-test
。
编写模拟文件
模拟文件包含一个模拟响应数组。每个模拟响应必须有一个 status
字段和一个 response
字段。status 字段定义 HTTP 状态码,response 字段定义 API 响应在 JSON 格式中的响应。
使用 example/mocks/users/list-users.json
作为参考。
模拟文件使用模拟响应数组,因为您通常需要在后续请求中使用不同的数据。
让我们考虑一个简单的例子。您想测试一个用户功能。您的前端向 /users
发起 GET API 调用并接收 2 个用户条目。然后测试向 /users
发送 POST 以创建新用户,然后再次执行 GET /users
。在第二种情况下,应返回 3 个用户条目。
使用 mocky
为了提供您的模拟数据,您需要设置您的测试用例。为此,您需要调用mocky的设置端点/setup/{scope}/{test-name}
。
作用域变量是必需的,以便允许不同应用程序并行访问mocky。默认作用域名为default
。
示例: http://localhost:8888/setup/default/user-simple
此端点调用将设置在tests/user-simple.json
中定义的user-simple
测试用例。
要使用另一个作用域,您只需使用自定义作用域名称调用setup
路由,并在每个实际的API调用中包含一个名为Mocky-Scope
的请求头,其值为自定义作用域名称。
Web服务器设置
内置PHP Web服务器(本地开发)
php -S localhost:8888 -t public public/index.php
Nginx
server {
listen 80;
server_name mocky.example.com;
index index.php;
error_log off;
access_log off;
root /path/to/public;
location / {
try_files $uri /index.php$is_args$args;
}
location ~ \.php {
try_files $uri =404;
fastcgi_split_path_info ^(.+\.php)(/.+)$;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_index index.php;
fastcgi_pass 127.0.0.1:9000;
}
}
Apache
您的文档根指向public
目录,您需要确保mod_rewrite
可用。
许可证
Apache License 2.0 请参阅LICENSE以获取更多信息。