Selenium でテストしたい ASP.NET Web サイトがあります。「ステージング」仮想マシンに Jenkins インスタンスをセットアップして、テストを自動的に実行したいと考えています。
問題は、テストの実行が非常に遅いことです。私の開発マシンよりも数倍遅くなります。1 回の簡単なテストには、2 ~ 3 分以上かかる場合があります。
これが予想されるかどうか、私のようなテスト設定に明らかな落とし穴があるかどうか、テスト スイートのパフォーマンスをプロファイリングして改善するためにできることがあるかどうかを知りたいです。
情報:
テストは、Windows 7 64 ビットを搭載した 2.7GHz 2GB RAM 仮想マシンで実行されます。私の開発マシンも似ていますが、32 ビットの Windows がインストールされています。
以下はジェンキンスによって行われます。
- Web サイトはソース管理からチェックアウトされ、カスタム web.config で構成されます。主な違いは、リリース モードでコンパイルされ、別のマシン (同じサーバー上の仮想マシンでもある) 上のデータベースに接続することです。
- IIS は Web サイトのディレクトリを監視しており、変更を自動的に再読み込みします。
- 次のコマンドが実行されます (ディレクトリはサニタイズされます): nunit-console Selenium-Project-Dir /labels
- テストは Chrome Web ドライバーで実行されます。
Selenium プロジェクトは NUnit と WebRunner を使用します。ドライバー インスタンスは、[SetUpFixture] クラス内の [SetUp] 属性で、すべてのテストの前に 1 回作成されます。それらは、クラスの [TearDown] 属性で一度削除されます。
サンプル テストは次のようになります。
[Test, Combinatorial]
public void AnExistingUserCanLogin(
[ValueSource(typeof(Drivers), "Good")]
IWebDriver driver)
{
// This function clicks on some buttons and fills in some forms.
LoginUser(driver);
// Make sure the user is now logged in
Assert.IsTrue(driver.ElementIsPresent(By.ClassName("imgUserAvatar")));
Assert.IsTrue(driver.ElementIsPresent(By.CssSelector("a.my-profile")));
Assert.IsTrue(driver.ElementIsPresent(By.CssSelector("a.logout")));
}
(「Drivers」クラスには、遅延インスタンスの FF、IE、Chrome の Webdriver インスタンスが含まれています。クラス インスタンスの「Good」静的プロパティが何であるかを推測できます)