commando / dogpatch

一个使用curl编写的HTTP API测试框架

dev-master 2018-07-03 06:43 UTC

This package is not auto-updated.

Last update: 2024-09-29 21:14:33 UTC


README

dogpatch

一个使用curl编写的HTTP API测试框架。支持ssl、基本认证、传递自定义请求头、重定向 (10级) 以及大多数HTTP请求方法。最初是为测试 Commando.io API 编写的。

规范示例
$dogpatch = new Dogpatch();

$dogpatch->get("https://api.github.com")
         ->assertStatusCode(200)
         ->assertHeadersExist(array(
            "X-GitHub-Request-Id",
            "ETag"
         ))
         ->assertHeaders(array(
            "Server" => "GitHub.com"
         ))
         ->assertBody(IS_VALID_JSON)
         ->assertTotalTimeLessThan(2)
         ->close();
$dogpatch = new Dogpatch();

$dogpatch->get("https://freegeoip.net/json/8.8.8.8")
         ->assertStatusCode(200)
         ->assertHeadersExist(array(
            "Content-Length"
         ))
         ->assertHeaders(array(
            "Access-Control-Allow-Origin" => "*"
         ))
         ->assertBodyJsonFile(dirname(__DIR__) . "/examples/json/freegeoip.net.json")
         ->close();

查看完整示例: https://github.com/commando/dogpatch/tree/master/src/examples

要求

PHP

版本 5.3.0 或更高。

PHP扩展

Curl

构造函数

$dogpatch = new Dogpatch(array $curlOptions = array());
Curl选项

username: 基本认证的用户名。默认为 null

password: 基本认证的密码。默认为 null

timeout: Curl HTTP请求超时时间(秒)。默认为 60

ssl_verifypeer: 尝试使用包含的 ca-bundle.crt 验证ssl peer证书。默认为 true

verbose: 启用verbose curl日志记录,并将所有请求记录到文件 logs/curl_debug.log 中。默认为 false

获取

$dogpatch->get($url, array $headers = array());
参数

url: 包括方案 (HTTP, HTTPS) 的完整URL。

headers: 一个可选的关联数组,包含要传递的附加请求头。默认为一个空数组。

发布

$dogpatch->post($url, array $postData = array(), array $headers = array());
参数

url: 包括方案 (HTTP, HTTPS) 的完整URL。

postData: 包含键值对的post数据关联数组。

headers: 一个可选的关联数组,包含要传递的附加请求头。默认为一个空数组。

更新

$dogpatch->put($url, array $headers = array());
参数

url: 包括方案 (HTTP, HTTPS) 的完整URL。

headers: 一个可选的关联数组,包含要传递的附加请求头。默认为一个空数组。

删除

$dogpatch->delete($url, array $headers = array());
参数

url: 包括方案 (HTTP, HTTPS) 的完整URL。

headers: 一个可选的关联数组,包含要传递的附加请求头。默认为一个空数组。

头部

$dogpatch->head($url, array $headers = array());
参数

url: 包括方案 (HTTP, HTTPS) 的完整URL。

headers: 一个可选的关联数组,包含要传递的附加请求头。默认为一个空数组。

断言状态码

$dogpatch->assertStatusCode($assertedStatusCode);
参数

assertedStatusCode: 表示预期响应状态码的整数。

断言头部存在

$dogpatch->assertHeadersExist(array $assertedHeaders = array());
参数

assertedHeaders: 包含预期响应头部的标准索引数组。不检查响应头部的实际值,只检查头部是否存在。头部检查 不区分大小写

断言头部

$dogpatch->assertHeaders(array $assertedHeaders = array());
参数

assertedHeaders: 包含预期响应头部及其预期值的关联数组。检查响应头部的实际值。头部检查 不区分大小写,但头部值检查 区分大小写

断言体

$dogpatch->assertBody($assertedBody, $useRegularExpression = false);
参数

assertedBody: 断言响应体,接受四种选项之一。一个字符串,检查 区分大小写。一个正则表达式,根据定义的表达式进行检查。特殊标志 IS_VALID_JSONIS_EMPTYIS_VALID_JSON 仅验证响应体是正确的JSON并且能够被解码。 IS_EMPTY 验证响应体为空。

useRegularExpression: 一个可选的true/false标志,您可以使用全局变量 USE_REGEXDONT_USE_REGEX 来引用。如果您希望 $assertedBody 通过正则表达式进行检查,则必须将此参数设置为true。默认为false。

与PHP断言体

$dogpatch->assertBodyPhp($asserted, $onNotEqualVarExport = false);
参数

asserted: 断言原生PHP类型 (通常是PHP对象或数组) 与响应体。响应体必须是有效的JSON,它将被自动解码并与 $asserted 进行比较。PHP类型键值检查 区分大小写

onNotEqualVarExport: 一个可选的true/false标志,您可以使用全局变量 VAR_EXPORTDONT_VAR_EXPORT 来引用。如果在 $asserted 和响应体之间检测到不匹配,则变量导出,这使得查找差异变得方便。默认为false。

与JSON文件断言体

$dogpatch->assertBodyJsonFile($assertedJsonFile, $onNotEqualPrintJson = false);
参数

assertedJsonFile: 对JSON文件(完整路径)进行断言。响应体必须是有效的JSON,它将被自动解码、格式化输出并与传入的JSON文件进行比较,该文件也将被格式化输出。检查键名和值时,区分大小写

onNotEqualPrintJson: 一个可选的true/false标志,您可以使用全局变量PRINT_JSONDONT_PRINT_JSON引用。如果检测到JSON文件和响应体之间的不匹配,将打印两者,方便找到差异。默认为false。

断言总时间小于

$dogpatch->assertTotalTimeLessThan($assertedTime);
参数

$assertedTime: 表示总请求时间最大值的浮点数(以秒为单位)。

关闭

$dogpatch->close();

关闭curl连接并取消设置curl资源以及所有dogpatch类变量。在完全完成使用curl连接进行请求之前,不要调用close()。一旦调用close(),就必须实例化一个新的dogpatch对象。例如,以下是不合法的,会抛出异常

$dogpatch = new Dogpatch();
$dogpatch->get("https://www.google.com")
         ->close()
         ->get("https://github.com")

相反,这样做

$dogpatch = new Dogpatch();
$dogpatch->get("https://www.google.com")
         ->close();

$dogpatch = new Dogpatch();
$dogpatch->get("https://github.com")
         ->close();

或者,如果您想重用相同的curl连接和curl选项

$dogpatch = new Dogpatch();
$dogpatch->get("https://www.google.com")
         ->get("https://github.com")
         ->close();

当前版本

https://github.com/commando/dogpatch/blob/master/VERSION

变更日志

https://github.com/commando/dogpatch/blob/master/CHANGELOG.md

支持、错误和功能请求

在GitHub上创建问题(https://github.com/commando/dogpatch/issues)。

版本控制

为了提高透明度并深入了解我们的发布周期,以及为了努力保持向后兼容性,dogpatch将在语义版本控制指南下维护。

版本号将采用以下格式

<主版本>.<次版本>.<修订版>

以下是一些构建指南

  • 破坏向后兼容性会使主版本号增加(并重置次版本号和修订版)
  • 没有破坏向后兼容性的新功能会使次版本号增加(并重置修订版)
  • 错误修复和其它更改会使修订版号增加

有关语义版本控制更多信息,请访问 http://semver.org/

许可 & 法律

版权所有 2015 NodeSocket, LLC.

在Apache License, Version 2.0(“许可”)下许可;除非遵守许可,否则不得使用此作品。您可以在LICENSE文件中或以下位置获取许可副本

https://apache.ac.cn/licenses/LICENSE-2.0

除非适用法律要求或书面同意,否则在许可下分发的软件按“原样”提供,不提供任何形式的明示或暗示保证。有关许可的具体语言,请参阅许可。