Travis + Selenium + PHPUnit + Slack에서 수행하는 폼 모니터링 테스트

개요



가끔씩입니다만, 자사 사이트의 폼이 움직이지 않게 되어, 「폼을 송신할 수 없게 되어 있어」라고 연락을 받는 일이 있습니다. 모르는 사이에 폼이 움직이지 않게 되어 있는 기회 손실은 상당히 많기 때문에, 폼 사활 감시와 같은 것이 할 수 없는가 생각해 보았습니다.

그 결과 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('[email protected]');
        $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 양식이 설치된 페이지 헤 액세스.
양식에 값을 입력하고 제출합니다. 결과, "당신의 메시지가 전송되었습니다. 감사합니다."라는 메시지가 표시되면 테스트 통과라는 흐름입니다.

요약




이 테스트를 Travis상에서 움직이면, 이런 식으로 Slack에 폼의 테스트 결과를 통지해 줍니다.

다음은 테스트 실행시의 Travis 결과입니다.
h tps://t 등ゔぃs-해. 오 rg / 호리케 37 / t 라 ぃ

이것을 travis의 커맨드 라인 툴 등으로 정기적으로 자동 실행시켜 주면, 눈치채지 못하는 동안 폼이 움직이지 않게 되어 있는 것도 막을 것 같습니다.

그럼 좋은 Travis 생활을!

좋은 웹페이지 즐겨찾기