2

私はMink / Sahiと協力して、自分のサイトの機能テスト スイートを作成しています。

私は Firefox と Chrome で一連のテストを行っており、満足しています。それらは私たちの Jenkins ボックスで毎晩実行されており、うまく機能しています。

ただし、Jenkins ボックスはサーバーであり、Chrome/Firefox は GUI アプリであるため、デスクトップ PC でテストを実行する必要がありました。これは、毎晩スイッチを入れたままにしなければならないことを意味するため、環境上およびコスト上の理由から悪いことです。さらに、電源、ネットワーク、またはソフトウェアに問題がある場合、テストは失敗します。

そこで、Jenkins ボックス自体でヘッドレス ブラウザを使用するようにテストを切り替えることについてアドバイスをお願いします。

私には、Goutte、Zombie、Phantom の 3 つのオプションがあるようです (もちろん、他の人が推奨できる場合を除きます)。以下は、これまでの私の進捗状況をまとめたものです。

  • Goutte : これは PHP 駆動型であるため、Mink 内で実行され、Sahi の必要性がなくなります。Jenkins ボックスにはリソースが限られているため、これは素晴らしいことのように思えます。インストールして実行する必要が少ないほど良いのです。ただし、テストの一部として JS コードを実行する必要があり、Goutte ではこれができないことを理解しています。それはそれを除外しますか?

  • Zombie : Node.js で実行されます。残念ながら、私はこれをまったく機能させることができませんでした。Node、NPM、Zombie をインストールしましたが、Mink に認識させることができません。これを実行する方法について、Mink サイトよりも明確な指示を誰か教えてくれませんか?

  • Phantom : 残念ながら、Mink には Phantom 用のドライバーがないため、Sahi 経由で実行する必要があります。前述したように、Jenkins サーバーに Sahi をインストールする必要はありません。特にサーバーとして継続的に実行する必要があるためです。しかし、これまでに成功したのはこれだけです。Sahi の下で実行すると、テストを正常に実行できます (一貫性があるわけではありませんが、これは心配です。約 3 回に 1 回、ランダムにタイムアウトするようです)。Sahi (またはその他の中間層サーバー) をインストールせずにこれを実行する方法を提案できる人はいますか? または、Sahi が必要な場合は、Jenkins を構成して、テスト スイートの最初に Sahi を開始し、最後に停止する方法を誰か教えてもらえますか?

進め方についてアドバイスをいただければ幸いです。何らかの理由で、これらのオプションのいずれも明確な勝利を収めているようには見えません。しかし、機能テストは重要なので、これは解決された問題でなければなりません。私に最適なソリューションは何ですか?

(Zombie や Phantom と直接対話するために、Javascript でスクリプトを書き直すオプションがあることも知っています。失敗した場合でも、何が起こっているかを確認するために Firefox でそれらが実行されているのを確認する必要があるため、これは避けたいと思います。間違っているので、Mink のようなクロスブラウザー インターフェイスが理想的です。言うまでもなく、私は既にすべてのテストを PHP で記述しています!)

アドバイスをありがとう。:)

4

1 に答える 1

2

この回答は、特に

テスト スイートの最初に Sahi を開始し、最後に停止するように Jenkins を構成する方法を誰か教えてもらえますか?

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>

重要なビットは

  1. Sahi を起動してテストを並行して実行する「sahitests」ターゲット。
  2. ダッシュボードなしで Sahi を開始する「開始」ターゲット。

Sahi フォーラムに Sahi+PhantomJS のランダム エラーの問題を投稿して回答を得ることができます。

プロキシ サーバーとしての Sahi のオーバーヘッド/フットプリントはかなり小さいです。

于 2012-08-03T17:15:04.053 に答える