5

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」静的プロパティが何であるかを推測できます)

4

1 に答える 1

0

それが VM であるという事実は問題にならないはずであり、RAM は良いように思えます。しかし、どのOSが実行されていますか?一部の Windows OS では、異なるビット バージョン間で速度に大きな違いがあります (ハードウェアに対する要求のため)。これは Vista で特に顕著ですが、Windows 7 と Server 2003 の違いに気付きました。

64 ビット VM を実行しているマシンが 32 ビット マシンである場合、大きな問題があることがわかりました。多くの場合、しばらくはうまく機能しているように見えますが、テストを実行し続けると速度が低下します。これは当然のことですが、主なことは、同じ場所から実行されている VM が多すぎる可能性があることです。他のプログラムはこれによって影響を受け、VM が会社のファームにある場合のトラブルシューティングに役立ちます。

大きな違いをもたらしたもう 1 つの要因は、さまざまなブラウザーに対してテストを実行している場合です。IE8 と IE9 は同じ selenium コマンドを受け取り、異なる速度で実行します。これがなぜなのかはわかりませんが、見たことがあることだけはわかっています。ステージング マシンに最新バージョンの Chrome (または少なくとも開発マシンと同じバージョン) があることを確認してください。

ステージング マシンがデータベースにどのようにネットワーク接続されているかによって、違いが生じる場合があります。これは非常に小さな可能性に思えますが、2 つの VM 間にファイアウォールのクラップが存在すると、時間に大きな影響を与える可能性があります。

時間の長さを変更する可能性があると私が考えることができる唯一のことは、ステージングマシンで同時に実行されている他のプログラムがある場合です。CPU 使用率を確認すると役立つ場合があります。個人的には、VM が個人のマシンよりも多くの CPU を使用していることに気付きました。この場合、これまでに見つけた唯一の解決策は、VM の処理能力を高めるか、テストのみを実行し、他には何も実行しないことです。

幸運を!

于 2013-04-26T15:26:28.847 に答える