LoginSignup
9
8

More than 5 years have passed since last update.

Laravel DuskでWebのテスト(Basic認証を添えて)

Last updated at Posted at 2018-05-08

Laravel5.4よりDusk(だーすく?)というブラウザテストツールが加わったので使ってみます。
Seleniumが王道かもしれませんがLaravelで完結できて、使いやすいとなると、それに越したことはございません。

なお、私の利用は「Laravelサイト自身はもちろん、他のサイトのテストツールとして使いたい」というところです。

準備

Laravelのインストール

まずはLaravelのインストール。まあ、Composerで提供されるのでなくても使えるのかな・・・。別途調べます。

composer create-project laravel/laravel dusktest

duskのインストール

dusk自体のインストール。追加でインストールする必要があるようですが、別に問題ありません。

cd dusktest
composer require --dev laravel/dusk
php artisan dusk:install

日本語対応

テスト先のサイトが日本語を含む場合、以下の対応が必要とのことです。
dusk:installするとtest以下にテストの起点となるDuskTestCase.phpが追加されるので下記のように追加します。

test/DuskTestCase.php
..
    protected function driver()
    {
        $options = (new ChromeOptions)->addArguments([
            '--disable-gpu',
            '--headless',
+           '--lang=ja_JP'
        ]);

        return RemoteWebDriver::create(
            'http://localhost:9515', DesiredCapabilities::chrome()->setCapability(
                ChromeOptions::CAPABILITY, $options
            )
        );
    }
...

テストを行う

では、実際にテストを行ってみます。

テストファイルの作成

まずは、dusk makeでテストファイルを作成。

php artisan dusk:make AccessTest

テストファイルの編集

テストファイルを下記のように編集します。今回のテストでは、

  • そもそもサイト全体にBasic認証がかかっている
  • Basic認証後にログインページがある
  • ログインする
  • ログイン後のページに含まれる文字を検証
  • スクリーンショットもとっておく

という流れ。リリース前の管理画面などではよくあるケースかと思います。

test/Browser/AccessTest.php
<?php

namespace Tests\Browser;

use Tests\DuskTestCase;
use Laravel\Dusk\Browser;
use Illuminate\Foundation\Testing\DatabaseMigrations;

class AccessTest extends DuskTestCase
{
    /**
     * A Dusk test example.
     *
     * @return void
     */
    public function testExample()
    {
        $this->browse(function (Browser $browser) {
            $browser->visit('https://username:password@testsite.hoge/login') //Basic認証
                    ->value('input[name="email"]','hoge@hoge.com') //nameで指定
                    ->value('input[name="password"]','hogehoge') //nameで指定
                    ->press('LOGIN') //submitなら文字で指定可能
                    ->assertSee('Sccess') //ログイン後のページに文字が含まれるか
                    ->screenshot("logined"); //screenshotを取得
        });
    }
}

Basic認証は https://username:password@hostname/ とするようです。

テストの実行

完了したらテストを実行します。

php artisan dusk

テストの結果

OKならグリーン画面がでます。なお、assertが一個も無いと警告みたいなオレンジ画面になるようです。

PHPUnit 7.1.5 by Sebastian Bergmann and contributors.

.                                                                   1 / 1 (100%)

Time: 2.49 seconds, Memory: 12.00MB

OK (1 test, 1 assertion)

個別リクエストの指定方法

php artisan dusk tests/Browser/AccessTest.php

本家ページ

後は、本家ページを見て、いろいろAssertionを追加するだけ。うーん。便利。

参考ページ

以下のページを参考にさせていただきました。ありがとうございます。

9
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
8