使用 PHPUnit 发送 POST 请求
Posted
技术标签:
【中文标题】使用 PHPUnit 发送 POST 请求【英文标题】:Sending a POST request with PHPUnit 【发布时间】:2013-09-24 21:42:27 【问题描述】:我有一个 symfony 网站,我正在尝试做一些单元测试。我有这种测试,我尝试提交一些东西:
<?php
namespace Acme\AcmeBundle\Tests\Controller;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
class HomeControllerTest extends WebTestCase
public function testrandomeThings()
$client = static::createClient();
$crawler = $client->request(
'POST',
'/',
array(
"shopNumber" => 0099,
"cardNumber" => 231,
"cardPIN" => "adasd"),
array(),
array());
但我不认为控制器正在接收我发送的数据:
class HomeController extends Controller
public function indexAction()
var_dump($_POST);
die;
return $this->render('AcmeBundle:Home:index.html.twig');
var_dump
实际上返回了一个空数组。
通过我的 POST 请求发送信息时缺少什么?
【问题讨论】:
【参考方案1】:$_POST
是一个由 PHP 填充的变量,如果直接通过 http 调用,symfony 请求只会从这个全局变量创建。 symfony 爬虫不会发出真正的请求,它会根据$client->request
中提供的参数创建请求并执行它。你需要通过Request
对象来访问这些东西。切勿直接使用$_POST
、$_GET
等。
use Symfony\Component\HttpFoundation\Request;
class HomeController extends CoralBaseController
public function indexAction(Request $request)
var_dump($request->request->all());
die;
return $this->render('CoralWalletBundle:Home:index.html.twig');
使用$request->request->all()
获取数组中的所有 POST 参数。要仅获取特定参数,您可以使用$request->request->get('my_param')
。如果您需要访问 GET 参数,您可以使用 $request->query->get('my_param')
,但最好在路由模式中设置查询参数。
【讨论】:
【参考方案2】:我认为您正在尝试这样做:
$client = static::createClient();
$client->request($method, $url, [], [], [], json_encode($content));
$this->assertEquals(
200,
$client->getResponse()
->getStatusCode()
);
您将数据(内容)作为 params 数组放入,但您希望将其作为 JSON 编码字符串的原始正文内容放入。
【讨论】:
以上是关于使用 PHPUnit 发送 POST 请求的主要内容,如果未能解决你的问题,请参考以下文章
不推荐使用 composer require-dev 安装 phpunit?
接口自动化测试系列之PHPUnit-POST请求接口测试方法