2012-04-13 8 views
1

私はオートメーションを扱うテスターで、最近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. 
     } 

答えて

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); 
       }); 
     } 
    } 
0

を - GraphWalkerによって作成されたパスを解析し、起動それに応じて必要なテストメソッド、つまりテストクラスのインスタンスを作成します(抽象クラ​​スではない)。そして、必要なメソッドを呼び出します。

+0

私はまだNUnitがtestresultデータを "無料で"取得するテストを実行したいと思います。私のコンソールアプリケーションが(GraphWalkerを介して)テストを実行するようにすれば、私自身のレポートツールを作らなければならず、NUnitの他の素晴らしい機能を使うことはできません。 – Johan

関連する問題