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的使用。

参考文档

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • jdbc测试数据库连接_ping测试网络连通性

    jdbc测试数据库连接_ping测试网络连通性JDBC连接MySQL测试1、下载MySQL驱动jar文件:https://dev.mysql.com/downloads/connector/j/2、在工程里新建一个文件夹lib,将下载后的jar文件拷贝到lib里面,并配置路径。3、加载驱动类:Class.forName(“com.mysql.jdbc.Driver”),本质是加载一个实现了java.jdbc.Driver的类(注意:这段代码需要

  • 阿里云邮箱POP3、SMTP设置教程

    阿里云邮箱POP3、SMTP设置教程

  • 动态规划算法解01背包问题(思路及算法实现)

    动态规划算法解01背包问题(思路及算法实现)说明:算法源自教材。本文相当于对教材做的一个笔记(动态规划与贪心算法解01背包必须先对背包按照单位重量的价格从大到小排序,否则拆分的子问题就不具备最优子结构的性质)动态规划算法:动态规划就是一个填表的过程。该表记录了已解决的子问题的答案。求解下一个子问题时会用到上一个子问题的答案。{比如01背包问题:假如有1个背包,背包容量是10,有5个物品,编号为1,2,3,4,5,他们都有各自的…

  • css选择器有哪些?[通俗易懂]

    css选择器有哪些?[通俗易懂]一、写在前面css选择器有很多,但是常用到的也就几个,今天总结一下。二、具体选择器2.1、id选择器#myId{}2.2、类选择器.myClass{}2.3、标签选择器p,h1{}2.4、后代选择器divh1{}2.5、子选择器div>h1{}2.6、兄弟选择器(所有的兄弟)ul~h1{}2.7、相邻兄弟选择器ul+h1{}2.8、属性选择器li[name=’sss’]{}2.9、伪类选择器h1:hover{}2.10h

    2022年10月22日
  • sql 修改语句「建议收藏」

    sql 修改语句「建议收藏」update(修改)select*fromTablenamewherefield1=‘*****’(确定修改的数据)begintran–rollback(开启一个事务,以便失误后回滚)updateTablenamesetfield2=‘*****’wherefiled1=’*****’commit(提交)…

  • pyinstaller 多个.py打包exe_python怎么生成py文件

    pyinstaller 多个.py打包exe_python怎么生成py文件一、python安装pyinstaller方法使用python编写脚本,需要发给别人使用的时候,总会想到如何打包成exe文件,发给对方。这样的话,对方可以直接使用运行,无需安装python。所以看网上的教程,大多使用pyinstaller。以下介绍下安装方法:1、在cmd控制台下,先升级pip版本,先执行命:pipinstall-Upip,若执行失败,控制台会提示新密令,按照提示…

发表回复

您的电子邮箱地址不会被公开。

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