2

皆さんにとって非常に些細な質問かもしれませんが、概念を理解していることを確認したいだけです。私は多くの調査と読書を行いましたがSO投稿)、まだ少し混乱しているので、専門家に頼っています!

以下の記事で、著者は、ビルド時にセレン テストを単体テストから分離するという一般的な方法について言及しています。彼らは、セレンテストはすべてのビルドで実行するべきではなく、maven ビルドの一部としてではなく CI サーバーで実行する必要があると述べているため、セレンテストをスキップするように maven を構成し、統合フェーズで実行します。

理由はなんとなくわかりますが、ビルドのライフサイクルや、作成者のように設定する必要がある理由についてはあまり詳しくありません。

それらの記事で言及されていることをなぜあなたがしたいのかについて、誰かが簡単な説明を提供する(または読み物を提供する)のに十分親切でしょうか? 私はセレンを多用し始めており、これらの概念をよりよく理解したいと思っています。些細なことで申し訳ありませんが、私は討論、議論、世論調査を求めているわけではありません。

本当にありがとう!

http://www.weblogism.com/item/334/integration-tests-with-cucumber-jvm-selenium-and-maven http://www.lagerweij.com/2011/08/24/setting-up-selenium -with-maven http://blog.tfnico.com/2007/09/continous-web-testing-with-selenium_16.html http://developershood.blogspot.com/2009/10/using-selenium-and-maven -for-junit.html

4

2 に答える 2

1

単体テストのみを分離して実行する理由は次のとおりです。

  1. Selenium テストの前に単体テストを実行する必要がある - 失敗の推論を単純化するため。
  2. これらの種類のテストには、maven プラグイン構成で異なる設定が必要です (並列テストの実行、順序付け、システム プロパティ、JVM オプションなど)。
  3. Selenium テストはエンド ツー エンドであり、アプリケーションの状態をリセットする (データベースのクリア、アプリ サーバーの開始と停止)、多くの構成と展開作業が必要です。これらの作業は、すべての開発環境とステージング環境で簡単に実行できるわけではありません。

Mavenには、統合テストのステップを分離するための一連のフェーズがあり、セレンテスト構成を1か所に集めることができるプロファイルもあります。

Selenium を使用したエンド ツー エンド テストの例を次に示します (スクリプトを解凍して実行し、DB を最初からセットアップし、アプリ サーバーを起動し、テストを実行し、アプリ サーバーを停止し、テスト結果を検証して報告します)。

<profile>
    <id>selenium</id>
    <dependencies>
        <dependency>
            <groupId>com.thenewmotion</groupId>
            <artifactId>msp-solveconnector</artifactId>
            <version>${project.version}</version>
            <classifier>sql-install</classifier>
            <type>zip</type>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <id>unpack-dependencies</id>
                            <phase>package</phase>
                            <goals>
                                <goal>unpack-dependencies</goal>
                            </goals>
                            <configuration>
                                <includeGroupIds>com.thenewmotion</includeGroupIds>
                                <includeArtifactIds>msp-solveconnector</includeArtifactIds>
                                <includeClassifiers>sql-install</includeClassifiers>
                                <includeTypes>zip</includeTypes>
                                <includes>**/*.*</includes>
                                <outputDirectory>${project.build.directory}</outputDirectory>
                                <overWriteReleases>false</overWriteReleases>
                                <overWriteSnapshots>true</overWriteSnapshots>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>sql-maven-plugin</artifactId>
                    <dependencies>
                        <dependency>
                            <groupId>mysql</groupId>
                            <artifactId>mysql-connector-java</artifactId>
                            <version>5.1.16</version>
                        </dependency>
                    </dependencies>
                    <executions>
                        <execution>
                            <id>create-db</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>execute</goal>
                            </goals>
                            <configuration>
                                <driver>com.mysql.jdbc.Driver</driver>
                                <url>jdbc:mysql://localhost</url>
                                <username>${msp.db.user}</username>
                                <password>${msp.db.password}</password>
                                <orderFile>ascending</orderFile>
                                <fileset>
                                    <basedir>${project.build.directory}/db</basedir>
                                    <includes>
                                        <include>1_drop_database.sql</include>
                                        <include>2_create_database.sql</include>
                                        <include>3_create_tables.sql</include>
                                        <include>4_create_views.sql</include>
                                        <include>5_create_foreign_keys.sql</include>
                                        <include>6_data.sql</include>
                                    </includes>
                                </fileset>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.mortbay.jetty</groupId>
                    <artifactId>jetty-maven-plugin</artifactId>
                    <configuration>
                        <stopKey>foo</stopKey>
                        <stopPort>8088</stopPort>
                        <connectors>
                            <connector implementation="org.eclipse.jetty.server.nio.SelectChannelConnector">
                                <port>${msp.port}</port>
                                <maxIdleTime>60000</maxIdleTime>
                            </connector>
                        </connectors>
                    </configuration>
                    <executions>
                        <execution>
                            <id>start-jetty</id>
                            <phase>pre-integration-test</phase>
                            <goals>
                                <goal>run</goal>
                            </goals>
                            <configuration>
                                <daemon>true</daemon>
                            </configuration>
                        </execution>
                        <execution>
                            <id>stop-jetty</id>
                            <phase>post-integration-test</phase>
                            <goals>
                                <goal>stop</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-failsafe-plugin</artifactId>
                    <version>2.12</version>
                    <configuration>
                        <systemPropertyVariables>
                            <msp.user>${msp.user}</msp.user>
                            <msp.password>${msp.password}</msp.password>
                            <msp.baseUrl>${msp.baseUrl}</msp.baseUrl>
                            <webdriver.type>${webdriver.type}</webdriver.type>
                            <webdriver.chrome.driver>${webdriver.chrome.driver}</webdriver.chrome.driver>
                        </systemPropertyVariables>
                        <includes>
                            <include>**/*FT.class</include>
                        </includes>
                    </configuration>
                </plugin>
            </plugins>
        </pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-dependency-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>sql-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.mortbay.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
            </plugin>
        </plugins>
    </build>
</profile>
于 2012-07-29T06:21:13.553 に答える
1

あなたが参照している記事の1つを書いたので、これに追加する必要があると思います.

セレンテストを分離する別の理由があります。Selenium テストは遅いです。開発者は、実行に数分かかるビルドを必要としません。彼は、単体テストからの迅速なフィードバックを望んでいます。Selenium テストは、バージョン管理へのコードのコミット/プッシュの前など、より低い頻度で実行される場合があります。

同じ理由で、おそらくビルド サーバーにさまざまなビルド ジョブを設定し、UI 以外のテストをチェックのたびに実行し、UI テストをその後に実行するか、より低い頻度 (1 時間ごと?実行にかかる時間と、余裕のあるインフラストラクチャの種類によって異なります。

于 2013-09-04T09:26:36.067 に答える