2012-07-30 2 views
2

저는 Mink/Sahi과 협력하여 내 사이트의 기능 테스트 스위트를 작성하고 있습니다.저희 사이트의 기능 테스트

필자는 Firefox와 Chrome을 통해 일련의 테스트를 진행했으며, 만족 스럽습니다. 그들은 Jenkins 상자에 밤에 달리고 잘 작동하고 있습니다.

그러나 우리 Jenkins 상자가 서버이고 Chrome/Firefox가 GUI 응용 프로그램이기 때문에 데스크톱 PC에서 테스트를 실행해야했습니다. 이것은 매일 밤에 스위치를 켜 놓아야한다는 것을 의미하기 때문에 고통입니다. 환경 및 비용상의 이유로 나쁩니다. 또한 전원 또는 네트워크 또는 소프트웨어에 문제가있는 경우 테스트가 실패합니다.

그래서 Jenkins 상자 자체에서 헤드리스 브라우저를 사용하도록 테스트를 전환하는 것에 대한 조언이 필요합니다.

나는 Goutte, Zombie 및 Phantom의 세 가지 옵션을 가지고있는 것으로 보입니다 (물론 누구나 다른 것을 추천 할 수 없다면). 다음은 지금까지 내 진행 상황을 요약

  • Goutte : 이것은 PHP 기반, 그래서 Sahi에 대한 필요성을 제거, 밍크의 내부에서 실행됩니다. Jenkins 상자에는 리소스가 한정되어 있으므로 설치 및 실행이 더 쉬워집니다. 그러나 JS 코드를 테스트의 일부로 실행해야하며 Goutte는이 기능을 사용할 수 없다고 알고 있습니다. 그것은 그것을 배제 하는가?

  • 좀비 : Node.js에서 실행됩니다. 불행히도, 나는이 일을 전혀 할 수 없었습니다. 노드, NPM 및 좀비를 설치했지만 밍크가 인식 할 수 없습니다. 아무도 나에게 밍크 사이트보다 더 명확한 지시를 내릴 수 있습니까?

  • Phantom : 불행히도 Mink에는 Phantom 용 드라이버가 없으므로 Sahi를 통해 실행해야합니다. 내가 말했듯이 젠킨스 서버에 Sahi를 설치하지 않고 특히 서버로 계속 실행해야하는 경우를 선호합니다. 그러나 그것은 내가 지금까지 성공한 유일한 사람이다. Sahi에서 실행하면 내 테스트가 성공적으로 실행될 수 있습니다 (일관성이 없어도 걱정할 필요는 없지만 임의로 세 번에 한 번 타임 아웃하는 것 같습니다). 누구든지 Sahi (또는 다른 중간 계층 서버)가 설치되어 있지 않아도이 프로그램을 실행할 수있는 방법을 제안 할 수 있습니까? 아니면 Sahi가 필요하면 Jahkins가 테스트 스위트의 시작 부분에서 Sahi를 시작하고 결국 중단하도록 Jenkins를 구성하는 방법을 말해 줄 수 있습니까?

진행 방법에 대한 의견을 보내 주시면 감사하겠습니다. 이러한 옵션 중 어느 것도 다른 이유로 인해 확실한 승리를 거두지 못합니다. 그러나 기능 테스트가 중요하므로이 문제가 해결되어야합니다. 나에게 가장 좋은 해결책은 무엇입니까?

(나는 JavaScript를 사용하여 Zombie 또는 Phantom과 직접 대화 할 수있는 스크립트를 다시 작성하는 옵션이 있다는 것을 알고 있습니다. 실패 할 경우 Firefox에서 계속 실행해야합니다. 무슨 일이 일어나고 있는지 알기 위해 Mink와 같은 크로스 브라우저 인터페이스가 이상적입니다. PHP로 모든 테스트를 이미 작성했다는 사실은 말할 것도 없습니다!

고마워요. :)

답변

2

이 답변을 위해 특별히입니다

사람이 어떻게 테스트 스위트의 태초에 Sahi를 시작하고 마지막에 정지 젠킨스를 구성하는 말해 줄 수?

사용 개미 당신은 중요한 비트 Sahi를 시작하고 병렬로 테스트를 실행

  1. "sahitests"대상입니다

    <target name="sahitests" description="start the server and run sahi tests"> 
        <parallel> 
         <antcall target="start"/> 
         <sequential> 
          <waitfor maxwait="3" maxwaitunit="minute" checkevery="100"> 
           <http url="http://${urlbase}/demo/index.htm"/> 
          </waitfor> 
          <antcall target="runietests"/> 
          <antcall target="stopsahi"/> 
         </sequential> 
        </parallel> 
    </target> 
    
    <target name="start" description="starts proxy"> 
        <java classname="net.sf.sahi.Proxy" fork="true"> 
         <classpath location="lib/sahi.jar"> 
          <pathelement location="extlib/rhino/js.jar"/> 
          <pathelement location="extlib/apc/commons-codec-1.3.jar"/> 
          <pathelement location="extlib/license/truelicense.jar"/> 
          <pathelement location="extlib/license/truexml.jar"/> 
          <pathelement location="extlib/db/h2.jar" /> 
          <pathelement location="extlib/poi/dom4j-1.6.1.jar"/> 
          <pathelement location="extlib/poi/excelpoi.jar"/> 
          <pathelement location="extlib/poi/poi-3.7-20101029.jar"/> 
          <pathelement location="extlib/poi/poi-ooxml-3.7-20101029.jar"/> 
          <pathelement location="extlib/poi/poi-ooxml-schemas-3.7-20101029.jar"/> 
          <pathelement location="extlib/poi/xmlbeans-2.3.0.jar"/> 
          <fileset dir="extlib" includes="*.jar"/> 
         </classpath> 
         <arg value="." id="basePath"/> 
         <arg value="userdata" id="userdataPath"/> 
        </java> 
    </target> 
    
    <target name="runietests"> 
        <antcall target="clean-tests"> 
        </antcall> 
        <sahi suite="../userdata/scripts/demo/demo.suite" 
          browserType="ie" 
          baseurl="http://${urlbase}/demo/" 
          sahihost="localhost" 
          sahiport="9999" 
          failureproperty="sahi.failed" 
          haltonfailure="false" 
          threads="6" 
          > 
         <report type="html"/> 
         <report type="junit" logdir="${userdata.dir}/temp/junit/tests"/> 
        </sahi> 
        <antcall target="report-gen" /> 
        <antcall target="failsahi"/> 
    </target> 
    
    <target name="report-gen"> 
        <delete dir="${userdata.dir}/temp/junit/reports"> 
        </delete> 
        <mkdir dir="${userdata.dir}/temp/junit/reports"/> 
        <junitreport todir="${userdata.dir}/temp/junit/reports"> 
         <fileset dir="${userdata.dir}/temp/junit/tests"> 
          <include name="TEST-*.xml" /> 
         </fileset> 
         <report format="frames" todir="${userdata.dir}/temp/junit/reports/sahi-html" /> 
        </junitreport> 
    </target> 
    
    <target name="failsahi" if="sahi.failed"> 
        <antcall target="stopsahi"/> 
        <fail message="Sahi tests failed!"/> 
    </target> 
    
    
    <target name="stopsahi" description="stop sahi server"> 
        <sahi stop="true" sahihost="localhost" sahiport="9999"/> 
    </target> 
    

    다음 타겟을 사용하여 Sahi를 시작할 수 있습니다.

  2. 대시 보드없이 Sahi를 시작하는 "시작"대상.

Sahi 포럼의 Sahi + PhantomJS에 임의의 실패 문제를 게시 할 수 있습니다.

프록시 서버로 사용되는 Sahi의 오버 헤드/점유 공간은 상당히 적습니다.

+0

답변 해 주셔서 감사합니다. 대단히 감사합니다. 나는 너의 아이디어를 줄 것이다. 그들은 매우 흥미로운 소리. 그리고 나는 심지어 그것을 시도하기 전에, 내가 찾고있는 것이어야하기 때문에 대답을 받아 들일 것이다. 그리고 그것이 나를 위해 일하지 않는다고해도, 나는 확실히 나를 가르치려고한다. 몇 가지! 고맙습니다. – SDC