2009-09-08 4 views
5

TestNG와 함께 Selenium Grid를 사용하여 테스트를 병렬로 실행하고 있습니다. 사용자가 로그인해야하는 특정 테스트가 있으므로 테스트를 위해 구성된 사용자 계정이 있습니다.테스트 내에서 내 테스트를 실행중인 Selenium Grid 호스트를 어떻게 식별 할 수 있습니까?

내 테스트 사용자로 로그인하는 것과 관련된 테스트가 별도의 가상 컴퓨터에서 실행되도록하여 세션이 중단되지 않도록주의를 기울였습니다. 그러나 정기적으로 실패한 테스트를 조사한 결과이 테스트가 충분하지 않은 것으로 나타났습니다.

  • 는 각 시험 (I이 이상적인 해결책이 될 수 있습니다 이해하지만, 그것은/실행을 구성하는 데 시간이 걸릴 수 있습니다에 대한 새 사용자를 설정

  • 여러 유무 : 그래서 저는 하나에 필요합니다. 테스트 사용자 계정, 그리고 한 번에 하나만 사용되어 있는지 확인합니다.

내가 따라 테스트 계정을 설정할 수 있습니다 테스트를 실행하는 시스템의 호스트를 식별 할 수 있다면.이 작업을 수행 할 수있는 방법이 있습니까, 또는 내가 생각하지 못했던 다른 해결책이 있습니까?

+0

안녕 데이브, 당신이 시도하고 셀레늄 그리드 포럼에서이 질문을 게시나요. –

답변

0

전적으로 테스트를 위해 몇 가지 고유 한 사용자 계정을 설정하여 모든 문제가 해결되었습니다 (예 : selenium.test1). Selenium을 사용하여 하나의 작업으로 자동화하는 것이 간단했습니다.

이 코드는 코드에 저장되며 테스트가 로그인해야 할 때마다 숫자가 증가하고 사용자 이름이 생성됩니다.

테스트를 마칠 때 '릴리스'하고 이후에이 계정을 다시 사용하는 것을 고려했지만 테스트를 위해 많은 테스트 계정이 있는지 확인하기가 더 쉽다고 결정했습니다.

1

나는 "who am I page"를 입력하여 리모컨을 식별하는 문제를 해결했습니다. 원격 웹 드라이버 (또는 Selenium) 팩토리에서는 해당 페이지를 방문하고 세션을 유지하는 데 사용하는 클래스에 저장하고 로그인합니다. 이 페이지는 호스트 이름, IP, 브라우저 유형 및 버전을보고합니다. 여기에 제공

0

또 다른 해결책 :

https://groups.google.com/forum/#!topic/selenium-users/8eNRW9JnayQ

public static String[] getHostNameAndPort(String hostName, int port, SessionId session) { 
     String[] hostAndPort = new String[2]; 
     String errorMsg = "Failed to acquire remote webdriver node and port info. Root cause: "; 

     try { 
      HttpHost host = new HttpHost(hostName, port); 
      DefaultHttpClient client = new DefaultHttpClient(); 
      URL sessionURL = new URL("http://" + hostName + ":" + port + "/grid/api/testsession?session=" + session); 
      BasicHttpEntityEnclosingRequest r = new BasicHttpEntityEnclosingRequest("POST", 
        sessionURL.toExternalForm()); 
      HttpResponse response = client.execute(host, r); 
      JSONObject object = extractObject(response); 
      URL myURL = new URL(object.getString("proxyId")); 
      if ((myURL.getHost() != null) && (myURL.getPort() != -1)) { 
       hostAndPort[0] = myURL.getHost(); 
       hostAndPort[1] = Integer.toString(myURL.getPort()); 
      } 
     } catch (Exception e) { 
      logger.log(Level.SEVERE, errorMsg, e); 
      throw new RuntimeException(errorMsg, e);    
     } 
     return hostAndPort; 
    }