티스토리 뷰

etc

멀티 브라우저 제어(Selenium Grid)

keehyun2 2017. 8. 4. 16:25

Selenium Grid 여러 개의 브라우저를 한번에 제어하는 방식입니다.

구글 이미지 검색 한 내용을 보시면 조금 더 이해하기 쉬울듯 합니다. 여러개의 webdriver server 를 한번의 조작으로 제어 하는 방식입니다. 위에 링크의 이미지를 보시면 하나의 hub 가 여러개의 node 와 연결 되어있는 모습을 볼 수 있습니다. selenium-server-standalone-*.jar 로 실행한 프로세스 들 중에 각 역할에 따라서 hubnode 로 process 들의 역할 규정지을 수 있습니다. (관련 웹 문서 를 찾아보면서 한글로 번역된 W3ii 사이트 를 많이 참고 하였습니다. )

개인적으로 내려받아 테스트한 source(webdriver, selenium server, testNG source)를 git 저장소에 올렷습니다. 귀찮으시면 아래 git 저장소를 clone 해주세요~

git clone http://keehyun2@yona.khphub.com/keehyun2/WebDriverTest

그럼 테스트 실행 과정에 대해서 순서대로 진행해보겠습니다.

Selenium Grid Test (OS - Window 10)

  1. 최신 Jdk 를 설치합니다.

  2. 먼저 공식 사이트 에서 최신 selenium-server-standalone-.jar 를 내려 받습니다. 글을 작성할때 버전은 *3.4.0 이네요.

  3. hub 실행 - 내려받은 위치에서 커맨드 창을 열고 서버를 실행합니다. java -jar selenium-server-standalone-3.4.0.jar -port 4444 -role hub
    실행하고 브라우저에서 http://localhost:4444/ 로 들어가면 hub 의 page 가 나타납니다. 이제 이 process 가 4444 번 포트를 이용해서 hub 역할을 하게 됩니다.

  4. node 등록 - webdriver 를 사용하여 node 역할의 server 를 기동합니다. Internet Explorer Driver Server 를 내려받습니다. 64 bit 버전을 처음에 받아서 테스트 하였는데 속도등의 문제가 있어 32bit 로 변경하여 테스트 진행하였습니다. 32bit 를 내려 받아주세요. 처음 내려받은 selenium-server-standalone-3.4.0.jar과 같은 디렉토리에 위치시킵니다. 이후에 아래 명령을 실행합니다. (저장소 의 resource 폴더 안에 node_ie.bat 를 만들어 놓았습니다.)

    java -Dwebdriver.ie.driver="IEDriverServer.exe" -jar selenium-server-standalone-3.4.0.jar -role node -hub http://localhost:4444/grid/register -browser "browserName=internet_explorer,platform=WINDOWS,maxInstances=2" -port 5558
    

    위에 명령어를 대충 보면 port 는 5558 을 사용할 것이고 역할은 node이고 hub 의 주소를 기입해주었습니다.

  5. console 확인 - console 에서 등록된 노드들을 확인합니다. 현재는 ie 만 등록되어 있는 모습만 확인 될 것입니다.

  6. node 추가 등록 - 이번에는 chrome 을 노드로 추가해보겠습니다. chrome 브라우저도 마찬가지로 selenium 명령어로 제어를 하기 위해서는 webdriver 를 필요로 합니다. 공식 사이트 에서 최신 버전(작성일 기준 2.31)을 내려 받습니다. 이제 아래 명령어를 실행합니다.

    java -Dwebdriver.chrome.driver=chromedriver.exe -jar selenium-server-standalone-3.4.0.jar -role node -hub http://localhost:4444/grid/register -browser "browserName=chrome,platform=WINDOWS,maxInstances=2" -port 5557
    

    4번의 과정과 크게 다르지 않지만 port, browserName, driver 등이 변경된 부분을 확인해주세요. 지금은 Dwebdriver.chrome.driver 를 파라미터로 사용하였고, 아까는 Dwebdriver.ie.driver 를 사용하였습니다. console 을 다시 확인하면 node 가 하나 더 늘어난 것을 확인할 수 있습니다.

  7. hub(webdriver) 제어 - 이제 hub 에 브라우저를 제어하는 명령을 하면 hub 는 2개의 node 에게 다시 명령을 하게 되면서 한번의 명령으로 2개의 브라우저를 제어 할 수가 있습니다. (저는 local(win10 환경) 에서 edge, IE, firefox, chrome 총 4개의 node 를 연결하여 테스트 하여 성공하였습니다.) webdriver에 명령을 여러 가지 언어(java,c#,python,ruby 등)로 할수 있지만 저는 java 를 사용하여 해보도록 하겠습니다.

    위의 코드는 testng와 selenium-java 의존성을 추가 하여 만든 code 입니다.

테스트 화면

위의 이미지를 보시면 자동으로 브라우저를 제어하는 것을 확인할수 있습니다.

IE browser 는 에러가 많이 발생하는데 웹검색을 추천드리고, [인터넷 옵션] 에서 보호모드 전부 체크를 풀어주세요. 처음에 잘 되다가 이유없이 안되는 경우는 작업관리자에서 ie explorer process 전부 kill 하고 다시 해보세요. IE browser 자동 테스트 중에는 마우스를 건들지 않도록 합니다. 지금까지 local 에서 컴퓨터 1대 가지고 테스트 하였는데, 2대 이상의 네트워크 상에서 방화벽 port 를 개방하고 사용할 수도 있습니다.

TestNG 테스트 끝나면 프로젝트 디렉토리 안에 test-output 폴더가 생기고 index.html 을 열면 테스트 결과를 확인 할수 있습니다. 

'etc' 카테고리의 다른 글

VoIP(Voice over Internet Protocol)  (0) 2017.10.01
Building and Using PJSIP  (0) 2017.09.17
웹 테스트 자동화 (Selenium IDE)  (0) 2017.07.26
Regular Expression (ide eclipse 사용)  (0) 2017.06.25
자동 업로드 Window Batch Script (SFTP)  (0) 2017.05.19
댓글
글 보관함
최근에 올라온 글
Total
Today
Yesterday
링크