7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Travis + Selenium + PHPUnit + Slackで行うフォームの監視テスト

Last updated at Posted at 2015-07-13

概要

たまになんですが、自社サイトのフォームが動かなくなって、「フォームが送信できなくなってるよ」って連絡をもらうことがあります。知らないうちにフォームが動かなくなっている機会損失は結構でかいので、フォーム死活監視のようなことが出来ないか考えてみました。

結果、 Travis + Selenium + PHPUnitでtravis-form-testというテストツールを作ってみました。

.travis.ymlの設定

.travis.yml
language: php
php:
- 5.5
env:
  global:
    secure: "T9nks1QOei/XWIGqTeMdjTXiwFrWif07SrFY0X50Wp3QHWTp9EMvJn03T3K7j6oT2IAjIuNoQuPQtKdFTyc8JppUK4wWKdPI99TXBb2KpqTeBdi7DIdncY3epFZ+i0OI/xQ1r71tx7J/Ftuty2ZaQQl0IxCRpB0W0JxqTmpPU6PIi5rFxFIHrZbqAzUBYVZV1sxJ4Ti1LkR3/HRtdYUaWLd+Rn2l6aPl/l+aCBel3OwupDyNCcqAwDrdbYv52t61K3jd05WNysPiESrspEqwVgkOFGszyBMdJWOPBZAhl+HwpdXPvo0kAgA2hb0YS37HH/pJEeb6zo/s4kMriu2EtVUxBOGJyPdi7Zuj8g+qfPZ4P/7U0UGBOZ8tVZeWQAL0zU9EH+QLgoqiIhnGUu0wLYVUcdPWqcUNTc/sLYP9LqQ+xfB5/JwtxgUk3I6gv94+rZdeIZKpXuM/4l5s3DYra7Pn0ukXJgbTtmoUPkfR8quqQPOFXoAw6sDyWEYDzn2G5DZIIrHfU6xZsfEIq9+OSPUTjrsZ2JMsuJOeus23+JuqN6DEOD1z72tcowdSsP8X4/2npsocP7dB6V2QgPcBT+Jk2T3r3X2so+82uaL7vfDrsqIM2Lq0VDkE71FmmDhxjT/HmjTjeBpF1G4r7PyATVaYR0XHB2yDnLHhIH6BptI="
before_install:
- export DISPLAY=:99.0
- sh -e /etc/init.d/xvfb start
- wget http://selenium-release.storage.googleapis.com/2.46/selenium-server-standalone-2.46.0.jar
- java -jar selenium-server-standalone-2.46.0.jar > /tmp/selenium.log 2> /tmp/selenium.error
  &
before_script:
- composer self-update
- composer install
script:
- "./vendor/bin/phpunit webtest"
notifications:
  slack:
    secure: lI0LOq0KBIzj5fH8isDYKQ1GSMojSkic82VwODdCQ2caxgvcU7vRJr4IH9hhIrHZNiz9F8d8uWGUI8IxV/OjMwdXrrNprzbCLaL8Lp2pPD+USwHtkL/CIKLL56taBPcH5U7+PfwfjRk89kdKL9V0ucoIT4GU8R/yfDsiFziIv4MIhRZNYwLLBqhTk0ygkaUVu8BUooj3rXwej3D/NjpO2IP8FmGJdMxooXtCwAkMN6pQzpcAKJCGwivn5o/k8bGM7UmQWOA4VjmWWjv+v+oZRn7fclP2AZWjFopVELJ0MnReY6QG8jYXcpUHuQYyASNsggK8/iLiIN8yZ9O/+4uRFsSHo+vPNOH4DwuwrooJbCoq6uaS+aHjldpfz0z/8J1lmpxeVldMXsRJX1Pg454+9MNarjiuQ7av0oX2JbyWqJK8av+jYhw1qWvNH82g2gwFqftr61NGHzIoYSEO8RHIbT1PD9mS7+BlS9ZGExWPcrfSf4cb39Q1FdXzUlW/OrRV1U9qfZA8XOcAHfAXbnWxQZvV+BlNDYqVdBVhRbhxU2MRZjXtJFQ88rFK+Dsa4gbP7dJ/fwviqORp0YtRQTkTzJ9iCB5p29NE+idEuclx2V8QWc0A4uDgvpUgp5QpMdjLa4us2CU9QZQNjJiPNl8VuOVwSJFFVn/ONK0rMAmjabk=

TravisではFirefoxが使えます。なので、Firefoxを使う前提で、Selenium Serverのスタンドアローン版をbefore_installでインストールし起動してあげます。

Selenium Serverを起動して、composerでPHPUnitを一式インストール、最後にテストを実行させます。結果はSlackに通知するという流れです。

なお、env.globalにsecureの値を設置してますが、これはフォームへのURLです。
これ社内のテスト環境で実施したのでURLを公開できないためこうしてます。
特に公開されたサイトのフォームで実施する場合は暗号化しなくても良いと思います。

composerの設定

composer.json
{
    "require-dev": {
        "phpunit/phpunit": "4.7.*"
        , "phpunit/phpunit-selenium": ">=1.2"
    }
}

こんな感じで設定してやるとPHPUnitでSeleniumを動かすためのライブラリを一式インストールしてくれます

PHPUnit

webtest.php
<?php
class WebTest extends PHPUnit_Extensions_Selenium2TestCase
{
    protected function setUp()
    {
        $this->setBrowser('firefox');
        $this->setBrowserUrl(getenv('SITE_URL'));
    }
    public function testForm()
    {
        $this->url(getenv('FORM_URL'));
        $this->byName('your-name')->value('horike');
        $this->byName('your-email')->value('horike37@gmail.com');
        $this->byName('your-subject')->value('subject');
        $this->byName('your-message')->value('message');
        $this->byclassName('wpcf7-form')->submit();
        
        $this->waitUntil(function($testCase) {
            $str = $testCase->byclassName('screen-reader-response')->text();
            if ( !empty($str) ) {
            	return true;
            }
        }, 3000);
        $this->assertEquals('あなたのメッセージは送信されました。ありがとうございました。', $this->byclassName('screen-reader-response')->text());
    }
}

テストの対象サイトのContact Form 7のフォームが設置されたページヘアクセス。
フォームに値を入力してsubmitする。結果、「あなたのメッセージは送信されました。ありがとうございました。」というメッセージが表示されればテスト通過という流れです。

まとめ

スクリーンショット 2015-07-13 23.29.52.png
このテストをTravis上で動かすと、こんな感じでSlackへフォームのテスト結果を通知してくれます。

以下、テスト実行時のTravisの結果です。
https://travis-ci.org/horike37/travis-form-test/builds/70641787

これをtravisのコマンドラインツールなどで定期的に自動実行させてやれば、気づかないうちにフォームが動かなくなっているということも防げそうです。

では良いTravisライフを!

7
6
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
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?