私は、RemoteWebDriver
Selenium Grid を使用して Selenium 2 について多くのことを調べてきました。現時点では、属性Test()
を使用してテストが生成されています。[Test]
クラスにTestCriteria
情報を入力し、このデータをテストに入力する方法を「制御」する方法として、Selenium WebDriver の「ページ オブジェクト デザイン パターン」を使用します。
したがって、次のような単純な基準オブジェクトがあります。
public class Credentials
{
public string Username { get; set; }
public string Password { get; set; }
}
次に、この情報を LoginPage オブジェクトで使用します。
public class LoginPage
{
[FindsByAnnotation]
public IWebElement UsernameField { get; set; }
[FindsByAnnotation]
public IWebelement PasswordField { get; set; }
[FindsByAnnotation]
public IWebelement SubmitButton { get; set; }
public HomePage Login(Credentials cred)
{
UsernameField.SendKeys(cred.user);
// code for login and return new HomePage object
}
}
さて、この種の構造を使用して、テスト データ、Credentials オブジェクト、他のページで入力する必要があるデータなどを取得したら、テストで適切なメソッド チェーンを作成できます。
[TestFixture]
public class TestFixture
{
private IWebDriver driver;
private TestCaseData data; // Which contains a Credentials object etc etc
[SetUp]
public void SetUp()
{
data = new TestCaseData()
{
Credentials = new Credentials()
{
Username = "username",
Password = "password"
}
// Other test case data objects can be populated here
};
driver = new FireFoxDriver();
}
[Test]
public void Test()
{
new LoginPage().Login(data.Credentials)
.NavigateToSearchPage()
.EnterSearchCriteria(data.SearchCritiera)
// etc
}
}
これで問題ありませんが、XML から逆シリアル化できるシリアル化された TestData オブジェクトからこのテスト データをロードしたい場合はどうすればよいでしょうか。
を使用することにも興味がRemoteWebDriver
ありますが、これは既に使用していますが、単に を使用するのに比べてまだIWebDriver driver = new FireFoxDriver();
不安定ですが、これらの問題を無視して、 TESTCASE を複数回実行したいと思います...同時に。これにより、並列テストの問題が発生します。
MBUnit は Gallio の一部であるこれを処理できることを理解しています。Nunit の拡張である PUnit も調べましたが、まだ長い道のりがあります。だから私はMbUnitに固執することにしました。
これにより、属性で TestFixtures を実行できるようになります[Parallelizable]
。したがって、プロジェクトをコンパイルし、プロジェクト dll を Gallio TestRunner GUI にロードすると、4 つのテスト ケースを同時に実行できます。これにより、各テストを同時に実行する 4 つのブラウザーが開き、サイトに負荷をかけることもできます。 4 つのテストがすべて実行されている間。(明らかに、これは、Selenium Grid で Selenium RemoteWebDriver を使用して、複数のマシンで数百のブラウザーを実行するために増加します。
[Parallelizable]
xml シリアル化されたオブジェクトのコレクションをロードし、テスト フィクスチャの上部に属性を追加して、ロード後にすべてを同時に実行できる新しい TestFixture オブジェクトを生成する方法を知っている人はいますか1 - 10たとえば、C:\TestCase ディレクトリの .xml ファイル?
私の考えは、これらをすべてロードしてから、メインのセレン グリッド ハブに接続されて実行されている 1 ~ 5 つの Selenium ノードでブラウザ セッションを Selenium Grid に処理させることです。
TestCase .xml からロードされる内容に応じて、特定のテスト条件をテスト属性に設定する機能をTest Fixture
含むを生成できるフレームワークが見つからない場合、Selenium Grid を実際に活用するのが困難です。[SetUp]
[TearDown]
[Test]
ファイル。
たとえば、TestCase .xml ファイルに失敗した要素が含まれている場合、この .xml ファイルをロードして TestFixture の [Test] に属性を設定する方法、またはテストの TestCase .xml Description を[Test(Description = "")]
属性にマップする方法を教えてください。実行時間。
Selenium Webdriver の機能、ページ オブジェクトのデザイン パターン、EventFiringWebDriver
スクリーンショットの Selenium 機能については既に知っています。
いくつかの XML シリアル化された TestCaseData をロードし、これらがロードされた後に新しい TestFixture オブジェクトを生成する機能を利用するにはどうすればよいですか?
理想的には、各 TestFixture の [SetUp] をセットアップする必要があります。IWebDriver
これは、特定の URL が TestCase.xml ファイルに含まれるものに応じて異なるためです。たとえば、このテストは UAT 環境、テスト環境、本番前の環境で実行することです。テストを実行する前にこれをセットアップする必要があります。
複数のブラウザを実行するSelenium Grid機能を利用するために、これらのテストフィクスチャを並行して実行する機能を備えたSelenium Grid / Selenium WebDriverでこれらの主な概念を使用する基本的な例はありますか?
だから私は疑似コードで探しているもの。
public class Main()
{
// Load Testfixtures
List<TestCase> testCases = Deserialise("\\Some\\FolderLocation");
foreach(test in testCases)
{
// create NEW testFixture, not [Test]
// ability to attach parallel TestFixture
}
}
[Testfixture]
[Parallelizable]
public class TestFixture
{
public TestCase testCase { get; set; }
public IWebDriver driver { get; set; }
[SetUp]
public void SetUp()
{
if(testCase.Environment == "UAT")
{
driver = new FireFoxDrive()
driver.NavigateTo("http://localhost/uat/Login");
}
// What if the testCase.ShouldPass is false?
// How can i generate my [Test] with ExpectedException?
}
[Test]
public void Test()
{
// code here with page object method chaining passing in testCase data objects
}
}
多分私はこのデザインを間違った方法で行っています。これらを並列化するための最良の方法について何か提案はありますか?