php测试工具_php单元测试

php测试工具_php单元测试guzzle.png本文将介绍Guzzle,Guzzle在单元测试中的使用。来自Guzzle中文文档的解释:Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上。接口简单:构建查询语句、POST请求、分流上传下载大文件、使用HTTPcookies、上传JSON数据等等。发送同步或异步的请求均使用相同的接口。使用PSR-7接口来请求、响应、分流,允许你使用其…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全家桶1年46,售后保障稳定

3de203392ec4

guzzle.png

本文将介绍Guzzle,Guzzle在单元测试中的使用。

来自Guzzle中文文档的解释:

Guzzle是一个PHP的HTTP客户端,用来轻而易举地发送请求,并集成到我们的WEB服务上。

接口简单:构建查询语句、POST请求、分流上传下载大文件、使用HTTP cookies、上传JSON数据等等。

发送同步或异步的请求均使用相同的接口。

使用PSR-7接口来请求、响应、分流,允许你使用其他兼容的PSR-7类库与Guzzle共同开发。

抽象了底层的HTTP传输,允许你改变环境以及其他的代码,如:对cURL与PHP的流或socket并非重度依赖,非阻塞事件循环。

中间件系统允许你创建构成客户端行为。

$client = new GuzzleHttp\Client();

$res = $client->request(‘GET’, ‘https://api.github.com/user’, [

‘auth’ => [‘user’, ‘pass’]

]);

echo $res->getStatusCode();

// “200”

echo $res->getHeader(‘content-type’);

// ‘application/json; charset=utf8’

echo $res->getBody();

// {“type”:”User”…’

// 发送一个异步请求

$request = new \GuzzleHttp\Psr7\Request(‘GET’, ‘http://httpbin.org’);

$promise = $client->sendAsync($request)->then(function ($response) {

echo ‘I completed! ‘ . $response->getBody();

});

$promise->wait();

安装Guzzle

使用composer安装

php composer.phar require guzzlehttp/guzzle:~6.0

或者编辑项目的composer.json文件,添加Guzzle作为依赖

{

“require”: {

“guzzlehttp/guzzle”: “~6.0”

}

}

执行 composer update

Guzzle基本使用

发送请求

use GuzzleHttp\Client;

$client = new Client([

// Base URI is used with relative requests

‘base_uri’ => ‘http://httpbin.org’,

// You can set any number of default request options.

‘timeout’ => 2.0,

]);

$response = $client->get(‘http://httpbin.org/get’);

$response = $client->delete(‘http://httpbin.org/delete’);

$response = $client->head(‘http://httpbin.org/get’);

$response = $client->options(‘http://httpbin.org/get’);

$response = $client->patch(‘http://httpbin.org/patch’);

$response = $client->post(‘http://httpbin.org/post’);

$response = $client->put(‘http://httpbin.org/put’);

设置查询字符串

$response = $client->request(‘GET’, ‘http://httpbin.org?foo=bar’);

或使用 query 请求参数来声明查询字符串参数:

$client->request(‘GET’, ‘http://httpbin.org’, [

‘query’ => [‘foo’ => ‘bar’]

]);

设置POST表单

传入 form_params 数组参数

$response = $client->request(‘POST’, ‘http://httpbin.org/post’, [

‘form_params’ => [

‘field_name’ => ‘abc’,

‘other_field’ => ‘123’,

‘nested_field’ => [

‘nested’ => ‘hello’

]

]

]);

使用响应

# 状态码

$code = $response->getStatusCode(); // 200

$reason = $response->getReasonPhrase(); // OK

# header

// Check if a header exists.

if ($response->hasHeader(‘Content-Length’)) {

echo “It exists”;

}

// Get a header from the response.

echo $response->getHeader(‘Content-Length’);

// Get all of the response headers.

foreach ($response->getHeaders() as $name => $values) {

echo $name . ‘: ‘ . implode(‘, ‘, $values) . “\r\n”;

}

# 响应体

$body = $response->getBody();

// Implicitly cast the body to a string and echo it

echo $body;

// Explicitly cast the body to a string

$stringBody = (string) $body;

// Read 10 bytes from the body

$tenBytes = $body->read(10);

// Read the remaining contents of the body as a string

$remainingBytes = $body->getContents();

安装PHPUnit

同Guzzle的安装, 也适用Composer工具。

composer global require “phpunit/phpunit=5.5.*”

或者在composer.json文件中声明对phpunit/phpunit的依赖

{

“require-dev”: {

“phpunit/phpunit”: “5.5.*”

}

}

执行安装

API 单元测试

我们在tests\unit\MyApiTest.php中定义了两个测试用例

class MyApiTest extends \PHPUnit_Framework_TestCase

{

protected $client;

public function setUp()

{

$this->client = new \GuzzleHttp\Client( [

‘base_uri’ => ‘http://myhost.com’,

‘http_errors’ => false, #设置成 false 来禁用HTTP协议抛出的异常(如 4xx 和 5xx 响应),默认情况下HTPP协议出错时会抛出异常。

]);

}

public function testAction1()

{

$response = $this->client->get(‘/api/v1/action1’);

$body = $response->getBody();

//添加测试

$this->assertEquals(200, $response->getStatusCode());

$data = json_decode($body, true);

$this->assertArrayHasKey(‘errorno’, $data);

$this->assertArrayHasKey(‘errormsg’, $data);

$this->assertArrayHasKey(‘data’, $data);

$this->assertEquals(0, $data[‘errorno’]);

$this->assertInternalType(‘array’, $data[‘data’]);

}

public function testAction2()

{

$response = $this->client->post(‘/api/v1/action2’, [

‘form_params’ => [

‘name’ => ‘myname’,

‘age’ => 20,

],

]);

$body = $response->getBody();

//添加测试

$this->assertEquals(200, $response->getStatusCode());

$data = json_decode($body, true);

$this->assertArrayHasKey(‘errorno’, $data);

$this->assertArrayHasKey(‘errormsg’, $data);

$this->assertArrayHasKey(‘data’, $data);

$this->assertEquals(0, $data[‘errorno’]);

$this->assertInternalType(‘array’, $data[‘data’]);

}

}

运行测试

在项目根目录执行命令

php vendor/bin/phpunit tests/unit/MyApiTest.php

总结

通过Guzzle强大的功能,可以方便进行API单元测试。大家可以查看Guzzle文档,详细了解Guzzle的使用。

参考文档

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/234333.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • RS485接口定义

    RS485接口定义

    1.英式标识为 TDA(-) 、TDB(+) 、RDA(-) 、RDB(+) 、GND 
    2.美式标识为 Y 、Z 、 A 、 B 、 GND  
    3.中式标识为 TXD(+)/A 、TXD(-)/B 、RXD(-) 、RXD(+)、GND  
       rs485两线一般定义为:  
                 “A, B”或”Date+,Date-”  
       即常说的:”485+,485-”  
       rs485四线一般定

    2022年5月27日
    72
  • 【LeetCode】一文吃透差分数组(附例题)

    【LeetCode】一文吃透差分数组(附例题)因为我们还原数组时候需要从头开始 是有顺序的 也就是使用 map 代替了数组 注意初始数组都为 0 每次 book 都需要将区间内元素加 1 表示预定次数 然后求得区间元素最大值即为所求 区间更新问题除了最适用的线段树维护之后 还可以使用差分数组维护 顾名思义 差分数组元素就是原数组中两个元素之差 例如假设原数组为 差分数组是把原数组中后一个元素减前一个元素的差构成一个新的数组 作为辅助数组使用 这样就省去了遍历操作 因为原数组的值可以通过差分数组两端的数求得

    2025年10月23日
    3
  • Lua和Luajit

    Lua和Luajit一、什么是lua&luaJitlua(www.lua.org)其实就是为了嵌入其它应用程序而开发的一个脚本语言,luajit(www.luajit.org)是lua的一个Just-In-Time也就是运行时编译器,也可以说是lua的一个高效版。二、优势1)lua是一个免费、小巧、简单、强大、高效、轻量级的嵌入式的脚本语言,lua当前的发行版本5.3.1只有276k。

    2022年10月7日
    2
  • navigator对象属性_javascript构造函数

    navigator对象属性_javascript构造函数Navigator对象包含有关浏览器的信息。注意:没有应用于navigator对象的公开标准,不过所有浏览器都支持该对象。Navigator对象属性属性 说明 appCodeName 返回浏览器的代码名 appName 返回浏览器的名称 appVersion 返回浏览器的平台和版本信息 cookieEnabled 返回指明浏览器中是否启用cookie的布尔值 platform 返回运行浏览器的操作系统平台 userAgen.

    2025年10月27日
    2
  • 小米手机adb命令解锁BL_小米10解锁BL刷机卸载自带APP等「建议收藏」

    小米手机adb命令解锁BL_小米10解锁BL刷机卸载自带APP等「建议收藏」一定要耐心看完所有教程再刷,否则容易出错。小米系列解锁-刷机教程【一步步教你刷机】|mandfx总结的步骤:解锁BL->刷入rec->刷入第三方ROM->卸载app先备份数据,先备份数据,先备份数据。设置-我的设备-备份和重置-本地备份,连接电脑,打开MTP模式,复制MIUI-backup-AllBackup里的文件夹到电脑第一步:解锁BL申请解锁小米手机第二步:刷入rec手…

    2022年6月5日
    439
  • 外边距_外边距和组件宽度

    外边距_外边距和组件宽度margin-top设置元素的上外边距margin-right设置元素的右外边距margin-bottom设置元素的下外边距margin-left设置元素的左外边距margin简写属

    2022年8月2日
    6

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号