1

私は自動化に取り組んでいるテスターで、最近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.
        }
4

2 に答える 2

1

NUnitをあきらめて、Gallio/MbUtnitとDynamicTestFactoryで解決策を見つけました。意図したとおりに動作します。

    [DynamicTestFactory]
    public IEnumerable<Test> LoginAndOut() 
    {
        string method;
        while (Model.graphWalker.HasNextStep())
        {
            method=Model.graphWalker.GetNextStep().ToString();
            if (method == string.Empty)
                break;
            yield return new TestCase(method, () =>
                {
                    object obj = this.GetType().InvokeMember(method, BindingFlags.InvokeMethod | BindingFlags.Instance | BindingFlags.Public, null, this, null);
                });
        }
     }
于 2012-04-18T11:45:58.390 に答える
0

GraphWalkerとコードの間にアダプターを作成する必要があります-GraphWalkerによって作成されたパスを解析し、それに応じて必要なテストメソッドを起動します。つまり、テストクラスのインスタンスを作成し(その場合は抽象化できませんでした)、必要なメソッドを呼び出します。

于 2012-04-13T15:03:26.393 に答える