Laravel×Docker×Dusk×Selenium에서 테스트 실행

소개



인턴 현장에서 Laravel을 사용하고 있으며 테스트 환경을 구축했습니다.

테스트 툴로서 Dusk를 사용해, selenium과의 제휴라고 하는 구성을 취해, 도입으로 몇번이나 마주했으므로 자신 메모로서 남기고 싶습니다.

Dusk는?



- 문서
Laravel이 표준으로 준비하고 있는 브라우저의 자동 조작에 의한 테스트 API.
테스트하는 동안 브라우저가 마음대로 움직이는 것을 바라 보면서 한가롭게 할 수 있습니다 (웃음)

Dusk는 "$php artisan dusk:install"에서 명령 설치 후 바로 사용할 수 있습니다.
그러나 이번에는 현장의 의향으로 기본 ChromeDriver를 사용하는 대신 selenium을 사용하게 되었습니다.

목표



--개발 환경---
  • Laravel 6.18.26
  • Docker(Docker-compose) 19.03.8

  • docker 환경에서 Dusk × selenium에서 테스트를 실행하는 것을 목표로합니다.
    개발 환경에서 docker를 사용하고 있었으므로 selenum 용 컨테이너를 준비하는 곳에서 시작했습니다.

    이하, 순서대로 정리합니다.

    1.selenium 컨테이너 준비



    selenium 용 컨테이너를 정의하려면 docker-compose.yml에 다음을 추가하십시오.

    docker-compose.yml
    selenium:
        image: selenium/standalone-chrome-debug
        ports:
          - 4444:4444
          - 5900:5900
        container_name: selenium-container
        depends_on:
          - nginx
        privileged: true
    

    포트를 2개 개방하고 있습니다만,

    4444 ⇨ 셀레늄 서버 포트
    5900 ⇨ VNC 포트

    입니다.
    [참고] VNC 정보

    2. 컨테이너 시작



    terminal
    
    $ docker-compose up
    
    ...
    
    Creating mysql-container      ... done
    Creating phpmyadmin-container      ... done
    Creating php-fpm-container         ... done
    Creating nginx-container           ... done
    Creating selenium-container        ... done
    
    

    셀레늄 컨테이너가 무사히 일어났습니다.
    php-fpm 컨테이너에 들어갑니다.

    terminal
    $ docker exec -it php-fpm-container bash
    

    3.Dusk 설치



    거의 공식 인용 입니다.
    다음 명령은 컨테이너에서 수행하십시오!

    terminal(컨테이너 내)
    # 共存パッケージのインストール
    $ composer require --dev laravel/dusk
    
    # dusk install
    $ php artisan dusk:install
    
    

    docker를 시작하면 셀레늄 포트와 VNC 포트가 열립니다.

    4.selenium 연결(:4444)



    기본 ChromeDrive 대신 selenium을 사용하는 경우 tests/DuskTestCase.php를 다시 작성해야 합니다.

    DuskTastCase.php
    
    #driverメソッドを以下に書き換え
    
    protected function driver()
        {
            return RemoteWebDriver::create(
                'http://selenium:4444/wd/hub', DesiredCapabilities::chrome()
            );
        }
    

    여기서 docker-compose.yml에 정의한 4444port가 등장합니다!

    5.VNC 연결(:5900)



    이번에는 VNC에 연결합니다.
    mac의 finder에서 localhost:5900에 연결합니다.



    ↓docker가 기동하고 있으면 이런 느낌으로 selenum의 화면이 표시되었습니다!!


    6. 테스트 실행



    아래의 간단한 로그인 테스트를 실행해 보았습니다.

    LoginTest.php
    
    <?php
    namespace Tests\Browser;
    use Illuminate\Foundation\Testing\DatabaseMigrations;
    use Laravel\Dusk\Browser;
    use Tests\DuskTestCase;
    
    
    class LoginTest extends DuskTestCase
    {
        /**
         * A Dusk test example.
         *
         * @return void
         */
        public function test_02_PassReset(){
    
            // login test
            $this->browse(function (Browser $browser) {
                // ページ"/login"で文字列"LARAVEL"を確認
                $browser->visit('login')
                        ->assertSee('LARAVEL');
            }); 
        } 
    }
    
    

    여기 테스트를 실행.



    ↑테스트 실행시의 캡쳐입니다. 제대로 테스트 브라우저가 움직이고/login에 액세스 할 수 있습니다!

    terminal
    $ php artisan dusk
    PHPUnit 8.5.8 by Sebastian Bergmann and contributors.
    
    ..                                                2 / 2 (100%)
    
    Time: 4.4 seconds, Memory: 18.00 MB
    
    OK (2 tests, 2 assertions)
    
    

    테스트 결과도 ◎였습니다!!!

    요약



    브라우저 테스트 자체가 처음이었기 때문에 단순히 재미있었습니다!
    시간이 있으면 selenum 관련으로 스크래핑 등에 도전하고 싶다! ! !

    ※오류나 질문등 있으시면 코멘트 받을 수 있으면 다행입니다.

    좋은 웹페이지 즐겨찾기