docker-selenium을 사용하여 본
내용
화면 시스템 테스트의 매번 힘든
→
화면계의 테스트를 자동화할 수 있는 selenium이라는 것이 있는 것 같다.
→
그냥 화면이 있고 움직이는 것은 어렵습니다.
→
docker 내에서 헤드리스로 작동하는 selenum 환경을 만들 수있는 것 같습니다.
→
사용해 보았습니다.
docker-selenium 설치
출처는 htps : // 기주 b. 코 m / 세이 니 mHQ / 도 c 케 루 ぇ 니 m
종류는 많이 있지만,
이번에는 selenium 자체를 사용하는 것도 거의 처음인 것과, 움직이고 있는 화면도 보고 싶었던, 상정 브라우저가 chrome이므로 VNC 첨부의 selenium/standalone-chrome-debug를 선택.
standalone-chrome-debug와 standalone-chrome의 차이는 VNC 서버의 유무 같다.
그리고는 standalone-chrome에는 일본어 폰트가 들어 있지 않으므로 주의.
설치 명령
docker 설치는 할애
$ docker run -d -p <docker側のselenium serverのポート>:4444 -p <docker側のVNCのためのポート>:5900 selenium/standalone-chrome-debug:3.2.0-actinium
컨테이너 내부를 시작하면 selenium server와 VNC server가 자동으로 시작됩니다.
초기치라면 selenum server가 4444, VNC server가 5900이므로 아래와 같은 커멘드로 괜찮았습니다. 사용하는 포트를 변경하는 경우에는 적절하게 변경하십시오.
$ docker run -d -p 4444:4444 -p 5900:5900 selenium/standalone-chrome-debug:3.2.0-actinium
VNC server
selenium server
php-webdriver
샘플 코드
php bin/phpunit -c app
에서 실행 <?php
namespace AppBundle\Tests\Screen;
use Facebook\WebDriver\Interactions\WebDriverActions;
use Facebook\WebDriver;
use Facebook\WebDriver\WebDriverExpectedCondition;
use Facebook\WebDriver\WebDriverBy;
use Facebook\WebDriver\Remote;
use Facebook\WebDriver\Remote\RemoteWebDriver;
use Facebook\WebDriver\Remote\DesiredCapabilities;
use Symfony\Bundle\FrameworkBundle\Test\WebTestCase;
/**
* @property RemoteWebDriver driver
*/
class SeleniumTest extends WebTestCase
{
const WINDOW_HEIGHT = 768;
const WINDOW_WIDTH = 1366;
const SELENIUM_SERVER_HOST = "http://localhost:4444/wd/hub";
protected $driver;
/**
* @test
* @group chk
*/
public function testSelenium()
{
$inputTask = "test_task";
$inputMemo = "test_memo";
$expectTask = "test_task";
$expectMemo = "test_memo";
$this->driver = RemoteWebDriver::create(self::SELENIUM_SERVER_HOST, DesiredCapabilities::chrome());
//windowサイズを指定
$this->driver->manage()->window()->setSize(new WebDriver\WebDriverDimension(self::WINDOW_WIDTH, self::WINDOW_HEIGHT));
$this->driver->get("http://test-selenium:8000/todo/");
$this->driver->findElement(WebDriverBy::id('create'))->click();
$this->driver->wait(20, 1000)->until(
WebDriverExpectedCondition::visibilityOfElementLocated(WebDriverBy::cssSelector('body > .container'))
);
//フォームへの入力
$this->driver->findElement(WebDriverBy::id('appbundle_todo_task'))->click();
$this->driver->getKeyboard()->sendKeys($inputTask);
$this->driver->findElement(WebDriverBy::id('appbundle_todo_memo'))->click();
$this->driver->getKeyboard()->sendKeys($inputMemo);
//submit
$this->driver->findElement(WebDriverBy::id('create'))->click();
$this->driver->wait(20, 1000)->until(
WebDriverExpectedCondition::visibilityOfElementLocated(WebDriverBy::cssSelector('body > .container'))
);
//詳細画面に表示されている値の取得
$actualTask = $this->driver->findElement(WebDriverBy::id('task_text'))->getText();
$actualMemo = $this->driver->findElement(WebDriverBy::id('memo_text'))->getText();
//assert
$this->assertEquals($expectTask, $actualTask);
$this->assertEquals($expectMemo, $actualMemo);
$this->driver->quit();
}
}
GIF
감상
초기 도입이나 구현은 아직 정보가 적고 힘들지만, 화면계의 E2E 테스트를 자동화할 수 있는 것은 유용하다고 생각하기 때문에 더 사용할 수 있게 되고 싶은 곳.
모처럼 헤드리스인 환경에서 작성했기 때문에 jenkins로 실행해, CI적인 느낌에도 진행해 가고 싶다・・・(누군가 노하우 가르쳐 주세요!)
샘플 코드
이번에 만든 코드는 여기에 있습니다.
htps : // 기주 b. 코 m / 유타 카오 s / 세이 니 m-st-fu r-sym fu ny
Reference
이 문제에 관하여(docker-selenium을 사용하여 본), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/yutachaos/items/4a1da5d55a3bf0df889e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)