kagency/http-replay

用于回放和比较HTTP请求和响应的库

0.3 2015-01-28 13:06 UTC

This package is auto-updated.

Last update: 2024-09-08 00:14:38 UTC


README

Travis Build Status

这是一个用于在测试中回放请求和响应的库。它允许过滤响应以删除不需要断言的值。

支持的工具

支持录制的(读取器)

支持框架(消息处理程序)

工作流程

使用此测试辅助工具的工作流程可能如下

首先使用MitmDump记录一些HTTP交互,执行如下命令

mitmdump -P http://my-website:80/ -p 8080 --anticache -z -w recordFile.tns

然后可以回放存储的文件,以匹配您的应用程序——在我这个例子中是Symfony2堆栈——通过实现如下的集成测试

$messageHandler = new MessageHandler\Symfony2();
$filter = new ResponseFilter\Dispatcher(array(
    new ResponseFilter\Json(),
    new ResponseFilter\Headers(array(
        'date',
        'etag',
    )),
));

$reader = new Reader\MitmDump($messageHandler);
$interactions = $reader->readInteractions('recordFile.tns');

foreach ($interactions as $interaction) {
    $actualResponse = $app->runRequest($interaction->request);

    $this->assertEquals(
        $filter->filterResponse($messageHandler->simplifyResponse($interaction->request, $interaction->response)),
        $filter->filterResponse($messageHandler->simplifyResponse($interaction->request, $actualResponse))
    );
}

此示例仅实现了一组非常基本的响应过滤器。您可以实现条件响应过滤器,它仅对某些请求URL生效,并过滤出响应中的某些JSON属性。

此示例假定$app是某个Symfony2应用程序,其中runRequest()方法接收一个请求对象并返回一个响应对象。

响应过滤器

目前实现的所有响应过滤器列表

分发器

接受要应用于响应的响应过滤器数组。您通常想使用这个来轻松地应用一组过滤器。

Json

尝试解析JSON以使测试中的比较更容易。同时使其他响应过滤器成为可能,例如JsonFilter过滤器。

不接收任何参数。

JsonFilter

从JSON响应中过滤掉定义的属性集。如果您的JSON响应包含日期或版本之类的字段,则特别敏感。

接收一个属性列表作为构造函数参数。

Headers

实现HTTP头部的黑名单。从响应中删除这些头部。这特别有用,例如,可以删除Date和Etag头部。

接收一个要删除的头部列表作为构造函数参数。

MultipartMixed

替换multipart/mixed响应中的随机边界字符串,使其可以进行比较。

不接收任何参数。

ConditionalPathRegexp

接受两个参数

  • 匹配请求路径的正则表达式
  • 聚合过滤器

仅当正则表达式匹配请求路径时,才应用聚合过滤器。

验证构建

您可以通过运行ant来验证构建

ant

这使用composer安装所有必需的工具,然后运行测试和静态源代码验证。您也可以手动运行所有工具,例如

vendor/bin/phpunit