2013-09-26 3 views
3

Behat/Mink 테스트를 실행하면서 동적 값, 특히 name을 구문 분석 할 수있는 방법이 있는지 궁금합니다. Selenium2 기능이있는 Yml 구성 파일에 추가Saucelabs 용 Mink Extension.php (Selenium2)를 통한 Behat/Mink Yml 파일 구성의 구문 분석

behat.yml 파일은 파일에서 Selenium 2 Capabilities 매개 변수가있는 Behat/Mink/Extension 확장 파일을 사용합니다. Extension.php file

default: 
     context: 
     class: 'FeatureContext' 
     extensions: 
     Behat\MinkExtension\Extension: 
     base_url: 
     javascript_session: 'selenium2' 
     goutte: 
     selenium2: 
      browser: firefox 
      wd_host: <sauce username>:<accesscode>@ondemand.saucelabs.com/wd/hub 
      capabilities: { "platform": "Windows 7" , "version": "21" , "name":"Test" } 

는 다음 MinkExtension 디렉토리에 Extension.php에서 https://github.com/Behat/MinkExtension/blob/2.0/src/Behat/MinkExtension/Extension.php

  arrayNode('selenium2')-> 
       children()-> 
        scalarNode('browser')-> 
         defaultValue(isset($config['selenium2']['browser']) ? $config['selenium2']['browser'] : '%behat.mink.browser_name%')-> 
        end()-> 
        arrayNode('capabilities')-> 
         normalizeKeys(false)-> 
         children()-> 
          scalarNode('browserName')-> 
           defaultValue(isset($config['selenium2']['capabilities']['browserName']) ? $config['selenium2']['capabilities']['browserName'] : 'firefox')-> 
          end()-> 
          scalarNode('version')-> 
           defaultValue(isset($config['selenium2']['capabilities']['version']) ? $config['selenium2']['capabilities']['version'] : "9")-> 
          end()-> 
          scalarNode('platform')-> 
           defaultValue(isset($config['selenium2']['capabilities']['platform']) ? $config['selenium2']['capabilities']['platform'] : 'ANY')-> 
          end()-> 
          scalarNode('browserVersion')-> 
           defaultValue(isset($config['selenium2']['capabilities']['browserVersion']) ? $config['selenium2']['capabilities']['browserVersion'] : "9")-> 
          end()-> 
          scalarNode('browser')-> 
           defaultValue(isset($config['selenium2']['capabilities']['browser']) ? $config['selenium2']['capabilities']['browser'] : 'firefox')-> 
          end()-> 
          scalarNode('ignoreZoomSetting')-> 
           defaultValue(isset($config['selenium2']['capabilities']['ignoreZoomSetting']) ? $config['selenium2']['capabilities']['ignoreZoomSetting'] : 'false')-> 
          end()-> 
          scalarNode('name')-> 
           defaultValue(isset($config['selenium2']['capabilities']['name']) ? $config['selenium2']['capabilities']['name'] : 'Behat Test')-> 
          end()-> 
          scalarNode('deviceOrientation')-> 
           defaultValue(isset($config['selenium2']['capabilities']['deviceOrientation']) ? $config['selenium2']['capabilities']['deviceOrientation'] : 'portrait')-> 
          end()-> 
          scalarNode('deviceType')-> 
           defaultValue(isset($config['selenium2']['capabilities']['deviceType']) ? $config['selenium2']['capabilities']['deviceType'] : 'tablet')-> 
          end()-> 
          scalarNode('selenium-version')-> 
           defaultValue(isset($config['selenium2']['capabilities']['selenium-version']) ? $config['selenium2']['capabilities']['selenium-version'] : '2.31.0')-> 
          end()-> 
          scalarNode('max-duration')-> 
           defaultValue(isset($config['selenium2']['capabilities']['max-duration']) ? $config['selenium2']['capabilities']['max-duration'] : '300')-> 
          end()-> 
          booleanNode('javascriptEnabled')->end()-> 
          booleanNode('databaseEnabled')->end()-> 
          booleanNode('locationContextEnabled')->end()-> 
          booleanNode('applicationCacheEnabled')->end()-> 
          booleanNode('browserConnectionEnabled')->end()-> 
          booleanNode('webStorageEnabled')->end()-> 
          booleanNode('rotatable')->end()-> 
          booleanNode('acceptSslCerts')->end()-> 
          booleanNode('nativeEvents')->end()-> 
          booleanNode('passed')->end()-> 
          booleanNode('record-video')->end()-> 
          booleanNode('record-screenshots')->end()-> 
          booleanNode('capture-html')->end()-> 
          booleanNode('disable-popup-handler')->end()-> 
          arrayNode('proxy')-> 
           children()-> 
            scalarNode('proxyType')->end()-> 
            scalarNode('proxyAuthconfigUrl')->end()-> 
            scalarNode('ftpProxy')->end()-> 
            scalarNode('httpProxy')->end()-> 
            scalarNode('sslProxy')->end()-> 
           end()-> 
           validate()-> 
            ifTrue(function ($v) { 
             return empty($v); 
            })-> 
            thenUnset()-> 
           end()-> 
          end()-> 
          arrayNode('firefox')-> 
           children()-> 
            scalarNode('profile')-> 
             validate()-> 
             ifTrue(function ($v) { 
              return !file_exists($v); 
             })-> 
              thenInvalid('Cannot find profile zip file %s')-> 
             end()-> 
            end()-> 
            scalarNode('binary')->end()-> 
           end()-> 
          end()-> 
          arrayNode('chrome')-> 
           children()-> 
            arrayNode('switches')-> 
             prototype('scalar')->end()-> 
            end()-> 
            scalarNode('binary')->end()-> 
            arrayNode('extensions')-> 
             prototype('scalar')->end()-> 
            end()-> 
           end()-> 
          end()-> 
         end()-> 
        end()-> 
        scalarNode('wd_host')-> 
         defaultValue(isset($config['selenium2']['wd_host']) ? $config['selenium2']['wd_host'] : 'http://localhost:4444/wd/hub')-> 
        end()-> 
       end()-> 
      end()-> 
      arrayNode('saucelabs')-> 
       children()-> 
        scalarNode('username')-> 
         defaultValue(getenv('SAUCE_USERNAME'))-> 
        end()-> 
        scalarNode('access_key')-> 
         defaultValue(getenv('SAUCE_ACCESS_KEY'))-> 
        end()-> 
        booleanNode('connect')-> 
         defaultValue(isset($config['saucelabs']['connect']) ? 'true' === $config['saucelabs']['connect'] : false)-> 
        end()-> 
        scalarNode('browser')-> 
         defaultValue(isset($config['saucelabs']['browser']) ? $config['saucelabs']['browser'] : 'firefox')-> 
        end()-> 
        arrayNode('capabilities')-> 
         children()-> 
          scalarNode('name')-> 
           defaultValue(isset($config['saucelabs']['name']) ? $config['saucelabs']['name'] : 'Behat feature suite')-> 
          end()-> 
          scalarNode('platform')-> 
           defaultValue(isset($config['saucelabs']['platform']) ? $config['saucelabs']['platform'] : 'Linux')-> 
          end()-> 
          scalarNode('version')-> 
           defaultValue(isset($config['saucelabs']['version']) ? $config['saucelabs']['version'] : '21')-> 
          end()-> 
          scalarNode('deviceType')-> 
           defaultValue(isset($config['saucelabs']['deviceType']) ? $config['saucelabs']['deviceType'] : null)-> 
          end()-> 
          scalarNode('deviceOrientation')-> 
           defaultValue(isset($config['saucelabs']['deviceOrientation']) ? $config['saucelabs']['deviceOrientation'] : null)-> 

, 그것은 behat.yml 위에 해당 파일의 정보를 분석하는 배열의 세트로 selenium2.xml 파일을로드합니다. 이 말과 함께

scalarNode('name')-> defaultValue(isset($config['selenium2']['capabilities']['name']) ? $config['selenium2']['capabilities']['name'] : 'Behat Test')->

:

은 내가 YML 파일에 지정된 Selenium2 기능에서 매개 변수가없는 경우 Extension.php 배열 이름에 따라 기본값을 할당합니다 것으로 나타났습니다 테스트가 실행되는 동안 name 내에서 제목을 구문 분석하기 위해 내 로컬 디렉토리에서 Behat/Mink 기능 테스트 <test>.feature의 이름을 사용할 수있는 방법이 있는지 궁금합니다.

답변

3

늦은 대답하지만없는 것보다는 어쩌면 더 나은 ...

어떻게 .feature 테스트에 태그를 사용하는 방법에 대한? 당신은 주어진 태그 만 테스트를 실행 behat을 조언 해 줄 수 있습니다 :

behat documentation - tags

당신이 개미 파일을 통해 예를 들어 태그를 분석 할 수있는 동적 테스트를 실행하려면 :

<target name="test-behat"> 
    <exec dir="${basedir}" executable="bin/behat" failonerror="false"> 
     <arg line="--config ${basedir}/behat.yml --tags '${env.SELENIUM_TAG}'"/> 
    </exec> 
</target> 
수동으로 개미 스크립트를 시작

bin/behat --tags '@your_tag' 

:

behat-CLI 의미

ant -file <path to your ant-script> -D'SELENIUM_TAG'='@whatever_you_want' 

완전 자동화의 경우 앤트 스크립트 (및 행동 테스트)를 시작할 수 있습니다. 젠킨스 (또는 아파치 개미를 처리 할 수있는 다른 CI)를 통해. behat.yml, composer.json (작곡가를 사용하는 경우) 등에 필요한 매개 변수를 전달할 수도 있습니다.

실제로 하나의 .feature 만 실행하려는 경우 같은 방법으로 진행할 수 있습니다.behat-CLI 의미

<target name="test-behat"> 
    <exec dir="${basedir}" executable="bin/behat" failonerror="false"> 
     <arg line="--config ${basedir}/behat.yml '${env.FEATURE_FILE}'"/> 
    </exec> 
</target> 

:

bin/behat your.feature 

은 --help behat에서

ant -file <path to your ant-script> -D'FEATURE_FILE'='your.feature' 

해당 라인을 시작

behat [--many config params we don't need right here] [features] 

Arguments: 
features   Feature(s) to run. Could be: 
        - a dir (features/) 
        - a feature (*.feature) 
        - a scenario at specific line (*.feature:10). 
        - all scenarios at or after a specific line (*.feature:10-*). 
        - all scenarios at a line within a specific range (*.feature:10-20)