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


相关推荐

  • 详细讲解mysql 主从复制原理「建议收藏」

    详细讲解mysql 主从复制原理

    2022年2月19日
    48
  • 8个最高效的Python爬虫框架,你用过几个?

    8个最高效的Python爬虫框架,你用过几个?小编收集了一些较为高效的Python爬虫框架。分享给大家。1.ScrapyScrapy是一个为了爬取网站数据,提取结构性数据而编写的应用框架。可以应用在包括数据挖掘,信息处理或存储历史数据等一系列的程序中。。用这个框架可以轻松爬下来如亚马逊商品信息之类的数据。项目地址:https://scrapy.org/2.PySpiderpyspider是一个用python实…

    2022年6月14日
    50
  • 全国计算机等级考试二级Python真题及解析(5)_计算机二级有必要考吗

    全国计算机等级考试二级Python真题及解析(5)_计算机二级有必要考吗【纯干货】2021全国计算机等级考试Python二级编程题真题详解(上)相较于大多数经验分享类文章,本篇重点在于总结Python二级考试中的编程题(占60分)题型范围及解题技巧,让Python小白能在一周内掌握绝大多数编程题的解题方法,顺利考取证书,为未来应聘岗位添砖加瓦!本文的最终的目的是得到一份能够涵盖编程题部分所有考点的知识点总结脑图!!!

    2022年8月30日
    2
  • Java8 ConcurrentHashMap详解

    Java8 ConcurrentHashMap详解Java8ConcurrentHashMapJava7中实现的ConcurrentHashMap说实话还是比较复杂的,Java8对ConcurrentHashMap进行了比较大的改动。建议读者可以参考Java8中HashMap相对于Java7HashMap的改动,对于ConcurrentHashMap,Java8也引入了红黑树。说实话,Java8Concurrent

    2022年6月24日
    21
  • python基础教程 入门教程_python基础入门教程

    python基础教程 入门教程_python基础入门教程首先,我已经假定你已经看了无数遍的垃圾文章,然后依然搞不懂类和对象,但是呢起码知道有类和对象这么两个玩意儿。由于你没有编程经验,所以无法从学过的编程语言里通过类比去理解Python的‘类和对象’。咱们用生活中的例子来说说,建房子。类(class):相当于施工图纸(blueprint)对象(object):房子(已经建造好的)假设你手上有施工图纸(Blueprint),里面有房子的所有信…

    2022年8月29日
    2
  • 互联网金融学习总结(5)——市场主流的风控模型简要学习总结

    互联网金融学习总结(5)——市场主流的风控模型简要学习总结分享一个大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到人工智能的队伍中来!点击浏览教程一、市场调研目前市面主流的风控模型1、互联网金融前10名排行榜(数据截止日期2017-09-12)互联网金融公司排名分别是蚂蚁金服、陆金所、京东金融、苏宁金融、百度金融、腾讯理财通、宜信、钱大掌柜、万达金融和网易理财。1.1蚂蚁金服1.1.1大数据技术对…

    2022年5月22日
    64

发表回复

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

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