私はオートメーションを扱うテスターで、最近webdriverを調べて、pageObjectsとNunitでテストを実行する方法を知りました。 私の問題は、定義済みの順序でテストを実行したくないということです。私たちが現在持っているGUIオートメーションソリューションは、実行時にテストシーケンスを生成するためにModelBasedTestingツールGraphWalkerを使用しています。私はそのアプローチを継続したいと思います。webdriverで実行するテストを動的に選択
このように動作します。グラフには、アクションと検証のステップと、「グラフを歩く」方法を決定するロジックが含まれています。各ステップは、webdriverで実行されるメソッドを表します。
NunitやPageObjectsの構造のようなテストフレームワークをサポートしていないのはもちろん、多くのメソッドを作成して呼び出すことができます。私は(と思う)何
私は希望がある:
[TestFixture]
public abstract class LoginTest : TestFixtureBase
{
[Test]
public void e_test1()
{
loginPage = PageBase.GetInstance<Login>(driver, "Title");
accountHome = loginPage.MainLogin(username, password);
Assert.IsTrue(accountHome.UserLoggedIn(),"fail");
}
[Test]
public void v_test1()
{
loginPage = accountHome.LogOut();
Assert.IsTrue(loginPage.UserLoggedOut(), "Fail");
}
.
.
.
[Test]
public void e_testN()
{
//Do something
}
と私は、グラフを実行すると、それは私の最初のステップと魔法のコードとして「e_test2」を与えるには、e_test2を実行します()。次のステップは "v_test1"で、テストが実行されます。 誰でもこれを行う方法を知っていますか?
更新: 私はTestCaseSource属性を試してみましたが、それは動作するようになっていますが、テストの前にグラフを実行して完全なシーケンスを返すときだけです。私は「オンライン」時に1つのステップを実行する方法を探しています。 これは動作します:
[Test, TestCaseSource("RunModel")]
public void LoginAndOut(string method)
{
object obj = this.GetType().InvokeMember(method, BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, null, this, null);
}
public string[] RunModel()
{
List<string> methods = new List<string>();
while (Model.graphWalker.HasNextStep())
{
methods.Add(Model.graphWalker.GetNextStep().ToString());
}
return methods.ToArray();
}
しかし、私はのような何かを達成したいと思います:あなたはGraphWalkerとあなたのコードの間にアダプタを作成する必要があると思い
while (Model.graphWalker.HasNextStep())
{ //Get next method from GraphWalker Soap-service.
nextMethodToRun = Model.graphWalker.GetNextStep().ToString());
//handle Method result, if ok continue.
}
私はまだNUnitがtestresultデータを "無料で"取得するテストを実行したいと思います。私のコンソールアプリケーションが(GraphWalkerを介して)テストを実行するようにすれば、私自身のレポートツールを作らなければならず、NUnitの他の素晴らしい機能を使うことはできません。 – Johan