2012-12-20 3 views
5

SauceLabs를 사용하여 일부 브라우저 테스트를 설정하고 있습니다. 로컬 및 소스를 통해 테스트를 수행 할 수있게되었으므로 이제 Jenkins 설치와 통합하여 빌드 및 브라우저 테스트를 자동으로 트리거하려고합니다.

대부분이 모두 작동하지만 작은 문제가 하나 있습니다. 로컬에서 테스트하고 소스를 통해 테스트를 수행 할 수 있도록 phpUnit setup() 함수에서 하드 코딩하지 않고 $ 브라우저의 정적 속성을 설정하려고합니다. 이것은 가능하지 않습니다. https://github.com/jlipps/sausage/blob/master/WebDriverDemo.php

나는 $ 브라우저 배열을 업데이트하도록 설정()에서 시도했다, 그러나 결코 적용 것 같다 :

내가 바인딩 소시지를 사용하고, 내 TestCase의이 데모 꽤 비슷합니다. 예.

public function setUp() 
{ 
    self::$browsers = array(
     'browserName' => getenv('SELENIUM_BROWSER'), 
     'desiredCapabilities' => array(
      'version' => getenv('SELENIUM_VERSION'), 
      'platform' => getenv('SELENIUM_PLATFORM'), 
     ) 
    ); 
} 

Jenkins의 브라우저 세부 정보를 전달하여 테스트 케이스가보다 유연해질 수있는 방법이 있습니까? 나는 여기서 간단한 것을 놓치고있는 것처럼 느껴 집니까?

+0

Jenkins에는 작업을 트리거 할 때 매개 변수를 사용하는 매개 변수 플러그인이 있습니다. 다음과 같이 하시겠습니까? https://wiki.jenkins-ci.org/display/JENKINS/Parameterized+Build가 도움이됩니까? –

+0

phpunit 테스트 케이스에 매개 변수를 가져 오는 데 문제가 없습니다. 일단 그들이 거기에있어, 그것을 사용하는 너무 늦은 것 같습니다. –

답변

1

좋아, 그래서 이것을 해결했다. 다른 사람들도 같은 문제를 겪어야합니다. 어떻게 해결 했는가?

Jenkins가 PHPUnit을 차례로 실행하는 ANT 스크립트에서 config.xml 파일을 포함 시켰습니다. 이것은 지금 트릭 실제로 $ 브라우저 정적 배열을 사용하지 않는 것입니다, 대신 setupSpecificBrowser 방법을 사용

<phpunit> 
    <php> 
     <env name="sauce" value="true" /> 
    </php> 
</phpunit> 

truesauce라는 설정 (환경) 변수를 설정합니다. 이제 내 테스트의 setUp() 함수에서 소스 env 변수를 켜고 변수가 있으면 Jenkins에서 실행 중이므로 제공된 변수를 사용합니다.

if(getenv('sauce') == true) { 
     $browser = array(
       'browserName' => getenv('SELENIUM_BROWSER'), 
       'desiredCapabilities' => array(
         'version' => getenv('SELENIUM_VERSION'), 
         'platform' => getenv('SELENIUM_PLATFORM'), 
       ) 
     ); 
    } else { 
     $browser = array(
       'browserName' => 'firefox', 
       'local' => true, 
       'sessionStrategy' => 'isolated' 
     ); 
    } 
    $this->setupSpecificBrowser($browser); 

AFAIK AFAIK에 대한 문서가없는 것 같아서 코드를 살펴 보았습니다. 장난.

+0

하나 이상의 브라우저를 추가 할 수 있었습니까? –

+0

테스트의 자동 이름 지정이 이런 식으로 손상된 것 같습니다. 모든 테스트의 이름은 "익명 작업" –

+0

내 방법을 사용하면 테스트 할 브라우저마다 별도의 Jenkins 작업을 설정해야합니다.이 작업은 Ant의 SauceOnDemand 플러그인을 통해 전달되므로 테스트 작업을 수행해야합니다. 즉, UI를 사용하면 여러 브라우저를 선택할 수 있습니다. 나는 당신이 그것을 한 경우에 당신이이 가치에 어떻게 접근 할 것인지는 모르겠다. (나는 지금 시험 할 시간이 없다.) –

0

브라우저가 사실을 테스트 한 후 병렬 테스트를 중지한다는 점에주의하십시오. 또한 $ browser 정적 배열에서 시작하여 브라우저를 chrome으로 설정할 세 가지 다른 브라우저가있는 경우 chrome을 실행하는 세 대의 컴퓨터를 갖게됩니다.

5

소스를 꽤 오랜 시간 동안 보냈다가 "여러 브라우저"시나리오에 대한 해결책을 찾았습니다. chapmatic의 여러 브라우저에 대한 주장과 주어진 답변은 실제로 정확했습니다. 병렬 테스트에서는 작동하지 않으며 $ 브라우저 배열에 여러 브라우저가 정의되어있는 경우 동일한 브라우저가 여러 번 실행됩니다. 이 솔루션은 여전히 ​​환경 변수를 사용하지만 $ 브라우저 배열을 사용해야합니다.

그래서 먼저 추상 테스트 클래스에 $ 브라우저 배열을 정의해야합니다. 그런 다음, env var BROWSER를 정의하고 테스트 할 브라우저를 지정했다고합시다. 당신은 소스 \ 소시지 \의 WebDriverTestCase를 확장하는 추상 테스트 클래스에 다음과 같은 정적 기능을 설정할 수 있습니다

이제 browserSetup가(), 당신이이 테스트 스위트가 설정되기 전에 호출되어 있는지 확인해야 정의되어 있는지
public static function browserSetup() 
    { 
     switch (getenv('BROWSER')) { 
      case 'firefox': 
       self::$browsers = array(
        array(
         'browserName' => 'firefox', 
         'desiredCapabilities' => array(
          'platform' => 'self::WIN_VERSION', 
          'version' => self::FIREFOX_VERSION, 
         ) 
        ) 
       ); 
       break; 

      case 'safari': 
       //safari desiredCapabilities 
       break; 

      case 'explorer': 
       //ie desiredCapabilities 
       break; 

      case 'chrome': 
      //chrome desiredCapabilities 

      default: //This will just use the default $browsers array you defined 
     return; 
    } 

테스트가 BROWSER 환경 변수에서 지정한 브라우저에서만 실행되도록 설정됩니다.Sauce \ Sausage \ WebDriverTestCase에 의해 소비되는 PHPUnit_Extensions_Selenium2TestCase를 살펴 보겠습니다. PHPUnit_Extensions_Selenium2TestCase는 다음과 같은 방법을 정의합니다

이 방법은 당신이 당신의 추상 테스트 클래스에서이 메소드를 오버라이드 (override) 할 필요가 있으므로 확인하고, 당신이 당신의 $ 브라우저 배열에 지정된 모든 브라우저에서 테스트 스위트를 설정하기 위해 호출되는
public static function suite($className) 
{ 
    return PHPUnit_Extensions_SeleniumTestSuite::fromTestCaseClass($className); 
} 

fromTestCaseClass 전에 browserSetup을()()를 호출하기 위해 호출된다 :

public static function suite($className) 
{ 
    self::browserSetup(); 
    return PHPUnit_Extensions_SeleniumTestSuite::fromTestCaseClass($className); 
} 

지금, 당신은 테스트하고자하는 브라우저를 사용하여 환경 변수 브라우저를 정의하면, 당신이 될 것입니다 테스트 스위트와 $ 브라우저 배열을 찰 수 BROWSER enviro에 정의 된 단일 브라우저에 대해 지정한 설정으로 제대로 무시됩니다. 변수. jenkins가 Build-> Execute 쉘 섹션에서이 환경 변수를 올바르게 설정했는지 확인하십시오.

+0

그 해결책은 다소 유망 해 보입니다. 'local', 'sauce', –

+0

과 같은 browsergroup을 켜지 않는 이유는 기본 클래스로 PHPUnit_Extensions_SeleniumTestCase를 사용할 때도 효과가 있습니다. – Kryten

관련 문제