如何测试发出http请求的方法?

我正在 Laravel 中编写测试。但是,我遇到了麻烦,因为我不知道如何测试。有一种方法可以发出 http 请求,如下所示。您通常会如何测试此方法?我应该使用实际可访问的 URL 或模拟吗?


PHP 7.4.6 Laravel 7.0


<?php


namespace App\Model;


use Illuminate\Support\Facades\Http;

use Exception;


class Hoge

{

    public function getText(string $url, ?string $user, ?string $password, string $ua): bool

    {

        $header = ["User-Agent" => $ua];

        $httpObject = $user && $password ? Http::withBasicAuth($user, $password)->withHeaders($header) : Http::withHeaders($header);


        try {

            $response = $httpObject->get($url);

            if ($response->ok()) {

                return $response->body();

            }

        } catch (Exception $e) {

            return false;

        }


        return false;

    }

}


慕雪6442864
浏览 103回答 3
3回答

扬帆大鱼

扩展到其他系统的功能可能会很慢并且使测试变得脆弱。尽管如此,您还是希望确保您的getText方法按预期工作。我会做以下事情:专门为您的方法创建一组集成测试getText。这些测试向服务器发出实际的 http 请求以验证预期的行为。Web 服务器不必是外部系统。您可以使用 php 的内置网络服务器来提供测试 url。对于使用该getText方法的所有其他功能,我会模拟该方法以保持测试快速。

慕无忌1623718

要创建新的测试用例,您可以使用make:testArtisan 命令:php artisan make:test HogeTest然后你可以创建你的 HogeTest,考虑到你的标题是正确的<?phpnamespace Tests\Feature;use Tests\TestCase;class HogeTest extends TestCase{      public function hogeExample()    {        $header = ["User-Agent" => $ua];        $response = $this->withHeaders([            $header,        ])->json('POST', $url, ['username' => $user, 'password' => $password]);        $response->assertStatus(200);      // you can even dump response      $response->dump();    }}这是一个简单的示例,您可以根据需要对其进行修改。

慕森卡

我更喜欢使用 Postman 进行 Web 服务器/API 测试。
打开App,查看更多内容
随时随地看视频慕课网APP