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)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 新visio2019专业版最新功能和激活密钥![通俗易懂]

    新visio2019专业版最新功能和激活密钥![通俗易懂]visio2019作为目前最流行的流程图和图标制作软件,它在包含所有Visio2016版本中的所有功能之外,还添加了下面几个新变化:1.组织结构图,头脑风暴和SDL模板具有新的入门图,可帮助您快速启动和运行。2.添加了新的数据库模型图模板准确地将数据库建模为Visio图。无需加载项。3.可以为网站创建线框图。4.添加了一些新的UML工具。很多同学找不到visio2019专业版的官网下…

    2022年6月24日
    80
  • 操作系统概念第七章部分作业题答案

    操作系统概念第七章部分作业题答案题目一:考虑下图所示的交通死锁的情况:(1)请说明这个实例中死锁的4个必要条件(2)请设计一条简单的规则来避免产生死锁解答:(1):死锁的四个必要条件是:①互斥:至少一个资源非共享,即一次只能有一个进程使用②占有并等待:一个进程至少占有一个资源,并等待另一个资源,而该资源被其他进程所占有③非抢占:资源非抢占,只有当前进程完成任务才能被释放④循环等待:有一组等待进城P0…P…

    2022年7月14日
    16
  • lammps教程:薄膜渗透模拟(3)–不同孔隙率对过滤效果的影响

    lammps教程:薄膜渗透模拟(3)–不同孔隙率对过滤效果的影响本文是薄膜渗透过滤的最后一篇文章:不同孔隙率薄膜建模。孔隙或空位缺陷的建模原理比较简单:删除一定数量的原子就可以。lammps自带delete_atoms可以随机删除一定比例的原子,如果对孔隙或空位的形状、尺寸等有特殊需求,需要用编程的方法删除原子。delete_atomsporosity命令可随时产生设定比例的原子,如删除50%的原子:delete_atomsporositymembrane0.5482793membrane为原子组0.5为删除原子的比例482793为随机数种子

    2025年8月31日
    2
  • java如何完美的接参数JSONObject 转List集合[通俗易懂]

    一、描述日常中,前端传递一些json字符串等。。后端是如何去接受并处理呢?今天就用alibaba的fastjson简单描述下二、代码@PostMapping(“/getJson”)publicvoidgetJson(@RequestBodyJSONObjectjsonObject){ //获取到我们的jsonobject参数,并toJSONStringStrings=JSONArray.toJSONString(jsonObject.get(“An

    2022年4月9日
    421
  • AndroidManifest:VersionCode和VersionName

    AndroidManifest:VersionCode和VersionName

    2022年1月7日
    57
  • URAL 1146

    URAL 1146题目大意:给出一个N*N的矩阵,每个元素的范围为[-127,+127]。求其所有子矩阵中各元素之和的最大值。TimeLimit:1000MS     MemoryLimit:65536KB     64bitIOFormat:%I64d&%I64u数据规模:N理论基础:无。题目分析:求和问题,用前缀和(每一行)+枚举(对列的起始与终点和行的起始与终点枚举)即

    2022年6月9日
    37

发表回复

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

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