>  기사  >  PHP 프레임워크  >  Laravel에서 예약된 작업을 테스트하는 방법

Laravel에서 예약된 작업을 테스트하는 방법

PHPz
PHPz원래의
2023-04-23 09:17:58747검색

Laravel은 웹 애플리케이션 개발에 널리 사용되는 인기 있는 PHP 프레임워크입니다. Laravel에서는 예약된 작업을 작업 스케줄링이라고 부르는데, 이를 통해 매일 정해진 시간에 작업을 실행하는 등 작업 실행을 자동화할 수 있습니다. 그러나 실제 응용 프로그램에서는 예약된 작업을 어떻게 테스트합니까? 이 글에서는 Laravel에서 예약된 작업을 테스트하는 방법을 소개합니다.

예약된 작업이란 무엇인가요?

예약된 작업은 특정 시간이나 프로그램 상태에 따라 자동으로 실행되는 작업을 말합니다. 매일 정기적으로 이메일 보내기, 데이터베이스 백업, 캐시 업데이트 등과 같은 많은 자동화된 작업을 실현하는 데 도움이 될 수 있습니다. Laravel에서 작업을 예약하려면 프로세스를 시작해야 합니다. Laravel은 이러한 프로세스를 관리하기 위한 Artisan 명령줄 도구를 제공합니다.

Laravel의 작업 스케줄링

Laravel의 작업 스케줄러를 사용하면 예약된 작업을 쉽게 정의하고 자동으로 작업을 실행할 수 있습니다. 실행 시간, 실행 빈도 및 작업을 실행할 명령만 정의하면 됩니다. 라라벨은 ->cron() 메소드를 호출하여 매우 편리한 작업 스케줄링 기능을 제공하며, 매분, 매시간, 매일, 매주 작업을 스케줄링할 수 있습니다. : ->cron()方法可以实现每分钟、每小时、每天以及每周的任务调度,示例代码如下:

$schedule->command('send:remindemail')
         ->daily()
         ->timezone('Asia/Shanghai')
         ->description('send remind email to user');

以上代码表示,每天在上海时间的0点执行 send:remindemail 命令,并在任务描述中添加了说明文字。

Laravel中的任务调度测试

Laravel中提供了一种自动化的任务调度测试方法,我们可以使用Mockery模拟任务的执行,然后通过Laravel自带的测试工具PHPUnit来实现测试。实现步骤如下:

步骤1:设置测试环境

我们需要在测试前先设置测试环境,因为测试环境需要模拟生产环境的定时任务。在 .env 文件中设置 APP_ENVtesting ,表示当前是测试环境:

APP_ENV=testing

步骤2:创建测试类

我们需要创建一个测试类来测试任务调度器的工作。测试类可以扩展 IlluminateFoundationTestingTestCase 类,示例代码如下:

namespace Tests;

use Illuminate\Foundation\Testing\TestCase as BaseTestCase;

abstract class TestCase extends BaseTestCase
{
    use CreatesApplication;
}

步骤3:定义测试方法

我们可以在测试类中定义测试方法,先使用 Mockery 模拟要执行的命令,然后执行任务调度器的定义任务。在任务执行完毕后,可以使用 PHPUnit 提供的一系列断言方法来判断任务是否被正确执行。示例代码如下:

namespace Tests\Feature;

use App\Console\Commands\SendRemindEmail;
use Tests\TestCase;
use Mockery;
use Illuminate\Support\Facades\Artisan;

class TaskSchedulerTest extends TestCase
{
    public function testTaskScheduler()
    {
        // Arrange
        $remindEmailCommandMock = Mockery::mock(SendRemindEmail::class);
        $remindEmailCommandMock->shouldReceive('handle')->once();
        $this->app->instance(SendRemindEmail::class, $remindEmailCommandMock);

        // Act
        Artisan::call('schedule:run');

        // Assert
        // add your assertions here
    }
}

在上述示例代码中,我们首先模拟了 SendRemindEmail 命令,并设置该命令比如会被执行一次。然后,我们通过 Artisan

./vendor/bin/phpunit
위 코드는 상하이 시간으로 매일 0시에 send:remindemail 명령이 실행되고 작업 설명에 설명 텍스트가 추가됨을 나타냅니다.

Laravel의 작업 스케줄링 테스트

Laravel은 Mockery를 사용하여 작업 실행을 시뮬레이션한 다음 Laravel의 자체 테스트 도구인 PHPUnit을 통해 테스트를 구현할 수 있습니다. 구현 단계는 다음과 같습니다.

1단계: 테스트 환경 설정

테스트 환경은 프로덕션 환경의 예정된 작업을 시뮬레이션해야 하기 때문에 테스트 전에 테스트 환경을 설정해야 합니다. .env 파일에서 APP_ENVtesting으로 설정하여 현재 테스트 환경임을 나타냅니다.

rrreee

2단계: 테스트 클래스 만들기 🎜🎜작업 스케줄러의 작동을 테스트하려면 테스트 클래스를 만들어야 합니다. 테스트 클래스는 IlluminateFoundationTestingTestCase 클래스를 확장할 수 있습니다. 샘플 코드는 다음과 같습니다. 🎜rrreee🎜3단계: 테스트 메서드 정의🎜🎜테스트 클래스에서 테스트 메서드를 정의할 수 있습니다. 먼저 Mockery 시뮬레이션하기 실행될 명령은 작업 스케줄러에 의해 정의된 작업을 실행합니다. 작업이 실행된 후 PHPUnit에서 제공하는 일련의 어설션 메서드를 사용하여 작업이 올바르게 실행되었는지 확인할 수 있습니다. 샘플 코드는 다음과 같습니다. 🎜rrreee🎜위 샘플 코드에서는 먼저 SendRemindEmail 명령을 시뮬레이션하고 해당 명령이 한 번만 실행되도록 설정했습니다. 그런 다음 Artisan 프로그램을 통해 작업 스케줄러를 호출하고 작업 실행이 완료될 때까지 기다립니다. 마지막으로 PHPUnit에서 제공하는 다양한 어설션 메서드를 사용하여 명령 실행이 성공적인지 확인할 수 있습니다. 🎜🎜4단계: 테스트 실행🎜🎜테스트 사례 정의가 끝나면 PHPUnit 명령을 사용하여 테스트를 실행할 수 있습니다. 🎜rrreee🎜테스트 프로세스 중에 작업을 실행하는 작업 스케줄러의 프로세스를 가로챌 수 있습니다. Assert를 전달하여 작업이 정상적으로 실행되는지 확인합니다. 🎜🎜Summary🎜🎜 이번 글에서는 Laravel의 작업 스케줄러와 작업 스케줄러의 단위 테스트 방법을 간략하게 소개했습니다. 예약된 작업은 많은 자동화된 작업을 실현하고 애플리케이션을 보다 효율적이고 편리하게 만드는 데 도움이 될 수 있습니다. 동시에, 좋은 테스트를 통해 계획된 작업을 더 자신감 있게 사용할 수 있고 작업이 정상적으로 실행될 수 있는지 확인할 수도 있습니다. 🎜

위 내용은 Laravel에서 예약된 작업을 테스트하는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.