karriere/mocky

此包已被放弃且不再维护。未建议替代包。

Mocky 是一个用 PHP 编写的简单 API 模拟解决方案

v2.1.0 2021-11-02 06:53 UTC

This package is auto-updated.

Last update: 2023-01-03 13:29:14 UTC


README

logo.png

Mocky - 一个简单的 API 模拟服务器

Test Lint

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的请求头,其值为自定义作用域名称。

Mocky Demo

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以获取更多信息。