私は自動化に取り組んでいるテスターで、最近Webドライバーを調べています。たとえば、pageObjectsや、Nunitでテストを実行する方法について考えています。私の問題は、事前定義された順序でテストを実行したくないということです。現在使用しているGUI自動化ソリューションは、ModelBasedTestingツールGraphWalkerを使用して、実行時にテストシーケンスを生成します。このアプローチを継続したいと思います。
簡単に言うと、このように機能します。グラフには、アクションと検証の手順、および「グラフを歩く」方法を決定するためのロジックが含まれています。各ステップは、Webドライバーで実行されるメソッドを表します。
もちろん、たくさんのメソッドを作成して1つずつ呼び出すこともできますが、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();
}
しかし、私は次のようなことを達成したいと思います。
while (Model.graphWalker.HasNextStep())
{ //Get next method from GraphWalker Soap-service.
nextMethodToRun = Model.graphWalker.GetNextStep().ToString());
//handle Method result, if ok continue.
}