Phantomjs 我们网站的功能测试

Phantomjs 我们网站的功能测试,phantomjs,zombie.js,sahi,mink,goutte,Phantomjs,Zombie.js,Sahi,Mink,Goutte,我正在为我的站点编写一个功能测试套件 我用Firefox和Chrome进行了一系列测试,我很满意。他们每晚都在我们的詹金斯包厢里运行,而且运行得很好 然而,因为我们的Jenkins box是一个服务器,Chrome/Firefox是GUI应用程序,我不得不在我的桌面PC上运行测试。这是一个痛苦,因为这意味着我必须每晚打开它,这对环境和成本都不好。另外,如果它在电源、网络或软件方面有任何问题,那么测试就会失败 因此,我想要一些关于在Jenkins box本身上切换测试以使用无头浏览器的建议 看来我

我正在为我的站点编写一个功能测试套件

我用Firefox和Chrome进行了一系列测试,我很满意。他们每晚都在我们的詹金斯包厢里运行,而且运行得很好

然而,因为我们的Jenkins box是一个服务器,Chrome/Firefox是GUI应用程序,我不得不在我的桌面PC上运行测试。这是一个痛苦,因为这意味着我必须每晚打开它,这对环境和成本都不好。另外,如果它在电源、网络或软件方面有任何问题,那么测试就会失败

因此,我想要一些关于在Jenkins box本身上切换测试以使用无头浏览器的建议

看来我有三个选择:痛风、僵尸和幻影(当然,除非有人能推荐另一个)。以下总结了我迄今为止的进展:

  • Goutte:这是PHP驱动的,因此将在Mink内部运行,从而消除对Sahi的需求。这听起来很棒,因为Jenkins box的资源有限,所以我需要安装和运行的越少越好。然而,我需要在测试中运行JS代码,我知道Goutte无法做到这一点。这排除了吗

  • 僵尸:在Node.js下运行。不幸的是,我根本无法做到这一点。我已经安装了Node、NPM和Zombie,但我无法让Mink识别它。有谁能给我一些比水貂网站更清晰的指导,告诉我如何运行这个网站

  • 幻影:不幸的是,水貂没有幻影的驱动程序,所以我必须通过Sahi运行它。正如我所说的,我不希望在Jenkins服务器上安装Sahi,特别是因为它还需要作为服务器持续运行。但到目前为止,这是我唯一成功的一次。在Sahi下运行它,我可以让我的测试成功运行(尽管不一致,这是一个问题-它似乎是随机超时的,大约三分之一)。有人能建议一种不需要安装Sahi(或任何其他中间层服务器)的方式来运行它吗?或者如果我确实需要Sahi,有人能告诉我如何配置Jenkins在测试套件开始时启动Sahi,并在测试套件结束时停止它吗

如果您能给我一些建议,我将不胜感激。出于这样或那样的原因,这些选择似乎都没有明显的胜利。但是功能测试很重要,所以这必须是一个解决的问题。对我来说最好的解决方案是什么

(我知道也可以选择用Javascript重新编写脚本,以便直接与僵尸或幻影对话。我不希望这样做,因为当它们失败时,我仍然需要看到它们在Firefox中运行,以了解出了什么问题,因此像Mink这样的跨浏览器界面是理想的——更不用说我已经在P中编写了所有测试HP!)


谢谢你的建议。:

这个答案是专门为

有人能告诉我如何配置Jenkins以启动Sahi吗 测试套件的开始和结束

使用ant,您可以使用以下目标启动Sahi

<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>

重要的是

  • “sahitests”目标启动Sahi并在中运行测试 平行
  • “启动”目标,在没有仪表板的情况下启动Sahi
  • 您可以在Sahi论坛上发布Sahi+PhantomJS中的随机故障问题以获得答案


    Sahi作为代理服务器的开销/占用空间相当小

    谢谢你的回答。非常感谢。我会试试你的想法;听起来很有趣。我现在也要接受答案,在我尝试之前,因为它看起来应该是我想要的,即使它对我不起作用,它肯定会教我一些东西!非常感谢。