youritservices/mock-server-bundle

Symfony 命令,用于将 API 模拟数据加载到 MockServer 中

安装: 50

依赖项: 0

建议者: 0

安全: 0

星级: 1

分支: 0

类型:symfony-bundle

v1.0.1 2023-03-10 08:48 UTC

This package is auto-updated.

Last update: 2024-09-10 12:03:37 UTC


README

Mock Server Bundle 的目标是使在自动化测试和本地开发过程中模拟远程 API 调用更加容易,移除应用程序本身中的远程 API 模拟代码的需求,并确保 API 调用在待测系统外部进行。

该组件利用 MockServer 通过 Docker 容器提供远程模拟 API,并添加了 Symfony 命令来加载和重置模拟 API 数据到该系统中。

模拟数据目前可以使用以下格式

以及以下方法

  • GET
  • DELETE
  • PATCH
  • POST

该组件将提供的模拟文件(见下文)组装成适合 MockServer 的请求,允许开发人员或测试人员只需添加预期的请求和响应负载(例如,通过复制实际 API 调用的现有负载),而无需编写实现它们的代码。

安装

该组件使用 contrib 食谱,因此您需要在安装过程中启用它,或者在 composer 配置中添加选项

composer config extra.symfony.allow-contrib true

使用以下命令安装软件包

composer require youritservices/mock-server-bundle --dev

启用组件

如果您没有使用 Symfony Flex,您需要通过在项目的 config/bundles.php 文件中添加以下行来启用组件

<?php

declare(strict_types=1);

return [
    ...
    YourITServices\MockServerBundle\MockServerBundle::class => ['dev' => true, 'test' => true],
    ...
];

配置

编辑 config/packages/mock_server.yaml 文件,根据您的环境设置适当的值。该文件和环境变量 MOCK_SERVER_HOST 已由 flex 食谱添加到您的 .env 文件中。

# config/packages/mock_server.yaml
when@test: &test
  mock_server:
    host_url: '%env(MOCK_SERVER_HOST)%'
    mocks_directory: '%kernel.project_dir%/tests/apiMocks'

when@dev: *test

参数

host_url

必需

MockServer Docker 容器设置的 URL

mocks_directory

必需

要加载的 API 模拟数据的根路径。

MockServer 服务

命令使用了 MockServer,因此它需要可用于您的项目,最简单的方法是在 docker-compose.yml 中定义一个服务。

# docker-compose.yml
version: '3.9'
services:
  mock-api:
    image: mockserver/mockserver:5.15.0
    ports:
      - "1080:1080"
    environment:
      JVM_OPTIONS: -Dmockserver.enableCORSForAllResponses=true

MockServer 提供了仪表板,因此您可以查看加载的模拟数据以及针对该服务发出的请求。如果按照上述方式定义了服务,则可以通过 http://mock-api:1080/mockserver/dashboard 访问

用法

API 模拟

API 模拟可以存储在 mocks_directory 下的任何目录结构中,允许您根据需要组织模拟。

每个模拟由多个文件组成,具体取决于涉及的格式和使用的 HTTP 方法,如下所述。

模拟按目录顺序加载,每个目录按目录中包含的文件(s)的序列号排序。MockServer 按创建顺序处理加载的模拟,因此默认或后备响应应在更具体的响应之后排序。

URL

用于 JSON 或 JSON:API 基于模拟的 URL 文件遵循以下文件命名约定

<序列号>.<描述>.url.txt

文件包含以下内容

<状态码> <动词> <url 编码路径> <格式> <响应时间(可选)>

SOAP

用于基于 SOAP 的模拟的 soap 文件遵循以下文件命名约定

<序列号>.<描述>.soap.txt

文件包含以下内容

<状态码> <动词> <url 编码路径> <SOAP 操作> <响应时间(可选)>

请求

此文件包含请求体(如有需要)以期望的格式(json或xml),与发送到远程API的格式完全相同,并遵循文件命名约定。

<序列号>.<描述>.request.<格式>

响应

此文件包含响应体以期望的格式(json或xml),与远程API在响应请求时发送的格式完全相同,并遵循文件命名约定。

<序列号>.<描述>.response.<格式>

示例

GET (JSON)

1.sending-postcode-with-available-addresses.url.txt

200 GET /v1/autocomplete/addresses/paf_1/gbr?api_key=TestAddressApiKey JSON 500ms

1.sending-postcode-with-available-addresses.response.json

{
  "result": [
    {
      "line_1": "1 Test Street",
      "line_2": "Test Line 2",
      "line_3": "Test Line 3",
      "post_town": "TOWN",
      "traditional_county": "Test County",
      "postal_county": "Test County",
      "postcode": "POST C01",
      "id": "paf_1"
    }
  ],
  "code": 2000,
  "message": "Success",
  "limit": 100,
  "page": 0,
  "total": 1
}

POST (JSON:API)

1.create-customer.url.txt

201 POST /api/v1/test JSON:API 100ms

1.create-customer.request.json

{
  "data": {
    "type": "customers",
    "attributes": {
      "firstName": "John",
      "lastName": "Doe",
      "email": "john.doe@example.com"
    }
  }
}

1.create-customer.response.json

{
  "jsonapi": {
    "version": "1.0"
  },
  "meta": {
    "version": "0.1.0"
  },
  "data": {
    "type": "customer",
    "id": "1",
    "attributes": []
  }
}

POST (SOAP)

1.validate-address.soap.txt

200 POST /services/ValidateAddressServiceSoap ValidateAddressRequest 100ms

1.validate-address.request.xml

<?xml version="1.0" encoding="UTF-8"?>
<soap-env:envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:ns1="https://xmlns.example.com/Address/ValidateAddress">
    <soap-env:header></soap-env:header>
    <soap-env:body>
        <ns1:ValidateAddressRequest>
        </ns1:ValidateAddressRequest>
    </soap-env:body>
</soap-env:envelope>

1.validate-address.response.xml

<?xml version="1.0" encoding="UTF-8"?>
<soap-env:envelope xmlns:soap-env="http://www.w3.org/2003/05/soap-envelope">
    <soap-env:body>
        <ns0:ValidateAddressResponse xmlns:ns0="https://xmlns.example.com/Address/ValidateAddress">
        </ns0:ValidateAddressResponse>
    </soap-env:body>
</soap-env:envelope>

命令

加载模拟

此操作加载配置的 mocks_directory 中所有可用的模拟。

bin/console mockserver:load

重置/移除模拟

此操作重置/移除所有当前加载的模拟,通常在加载之前使用,以确保只加载/可用当前模拟。

bin/console mockserver:reset

开发

此包附带Makefile,可轻松设置开发环境。只需克隆存储库,确保满足要求,然后运行 make up

要求

基本命令

启动所有Docker容器

make up

停止所有Docker容器

make down

从零开始(删除供应商并重建容器)

make rebuild

在推送远程分支并触发CI流水线之前运行所有测试

make pre-push

所有可用的make命令

make help