5

festを使用していくつかの単体テストを作成しました。今度は、ヘッドレス システムで maven を使用して mvn my test を実行する必要があります。Xvfb を使用してテストを実行したいのですが、テストの前に Xvfb を開始し、すべてが完了したら停止するように maven を構成するのに助けが必要です。

4

3 に答える 3

3

exec-maven-plugin

サーバーの起動用と停止用の 2 つの実行を定義する必要があります。これらの実行構成を適切な Maven フェーズと結び付ける必要があります。テスト フェーズの前に Xvfb を開始し、テスト フェーズの後に Xvfb を停止します。

        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>

            <executions>
                <execution>
                    <id>exec-at-test-compile</id>
                    <phase>test-compile</phase> <!-- runs right before 'test' -->
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>/home/anew/bin/manage-xvfb.sh</executable>
                        <arguments>
                            <argument>start</argument>
                        </arguments>
                    </configuration>
                </execution>
                <execution>
                    <id>exec-at-prepare-package</id>
                    <phase>prepare-package</phase> <!-- runs right after 'test' -->
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>/home/anew/bin/manage-xvfb.sh</executable>
                        <arguments>
                            <argument>stop</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
        </plugin>

manage-xvfb.shスクリプトの内容は次のとおりです。

#!/bin/bash

XVFB_CMD="sudo /usr/bin/Xvfb :15 -ac -screen 0 1024x768x8"

function stop_xvfb {
  XVFB_PID=`ps ax | pgrep "Xvfb"`
  if [ "${XVFB_PID}" != "" ]; then
    sudo kill ${XVFB_PID}
  fi
}

if [ "${1}" == "start" ]; then
  stop_xvfb
  ${XVFB_CMD} &
elif [ "${1}" == "stop" ]; then
  stop_xvfb
fi 

NOPASSWDsudoers ファイルに設定する必要があることに注意してください。

于 2013-02-04T16:36:40.840 に答える
1

実際、私はこのプラグイン構成を使用しています:

<plugin>
    <artifactId>maven-antrun-plugin</artifactId>
    <executions>
        <execution>
            <id>start-xvfb</id>
            <phase>process-test-classes</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo message="Starting xvfb ..." />
                    <exec executable="Xvfb" spawn="true">
                        <arg value=":1" />
                    </exec>
                </tasks>
            </configuration>
        </execution>
        <execution>
            <id>shutdown-xvfb</id>
            <phase>test</phase>
            <goals>
                <goal>run</goal>
            </goals>
            <configuration>
                <tasks>
                    <echo message="Ending xvfb ..." />
                    <exec executable="killall">
                            <arg value="Xvfb" />
                    </exec>
                </tasks>
            </configuration>
        </execution>
    </executions>
</plugin>

良い点は、( を使用して) バックグラウンド プロセスを取得し、スクリプトを記述しなくてもspawn = "true"Xvfb プロセスを ( で) 強制終了できることです。killallさらに、私のUbuntuディストリビューションでは、これを機能させるためにsudoersファイルに特別な設定をする必要はありません。

shutdown-xvfb の実行はテスト フェーズの最後に実行されますが、(ここに問題があります) テストが失敗した場合は実行されません。別のテストを再開したい場合、これは問題ではありません (古い Xvfb はまだ実行中で、新しいものは実行できませんが、これは問題ではありません) が、問題は、リソースが Xvfb によってまだビジー状態であることです。これの回避策は、maven-surefire-plugin の構成に追加testFailureIgnore = "true"することですが、この方法では、一部のテストが失敗したかどうかを簡単に確認できません。

于 2013-02-06T11:08:26.417 に答える
0

このジョブは、 selenium-maven-pluginを介して簡単に実行できます。

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>selenium-maven-plugin</artifactId>

  <executions>
    <execution>
      <id>setup-xvfb</id>
      <phase>pre-integration-test</phase>
      <goals>
        <goal>xvfb</goal>
      </goals>
    </execution>
  </executions>
</plugin>

残念ながら、このプラグインはまったくメンテナンスされていないようです。最近 からに移行したmojohaus プロジェクトの一部でした。誰もまだを github に移植していないようです。そのため、ソースとドキュメントは現在 mojohaus の github ページで利用できません。codehaus.orggithub.comselenium-maven-plugin

ただし、JAR はMaven Centralで入手でき、プラグインは引き続き使用できます。さらに構成パラメーターを検索する必要がある場合は、 github hereで利用可能なソースとサイトのフォークがあります。

于 2016-01-28T10:34:01.963 に答える