2017-06-19 9 views
2

Visual StudioのC#とSeleniumで使用する場合、NUnitを理解するのに少し助けが必要です。C#とSeleniumを使ったNunitのパラメータ化

私は自己学習型のビデオとYouTube動画を使ってたくさんのテストをまとめたテストスイートを作りました。

プロジェクトは、複数のブラウザで単一のサイトに対して実行される一連の回帰テストである必要がありました。

私はこれを達成し、結果に非常に満足しています。

は、私が今やりたいことは、私は反対テストしてきたこの小さなさらに

製品を拡大しているコンテンツの99%が同じである別のクライアントのためにスキンを変えるされるサイトです。

ビジュアルスタジオで複数のプロジェクト/ソリューションを作成するのではなく、異なるスキンに対する回帰をカバーするために、もう少しダイナミックなことをしたいと思います。

私がしたいことは、テストケース/ブラウザ/ URLの組み合わせをパラメータ化することです。

  • TestCase1 /クローム/ Site1の
  • TestCase1 /クローム/サイト2
  • TestCase1 /エッジ/ Site1の
  • TestCase1 /エッジ/サイト2など

私が得ることができましたVisual Studioのテストエクスプローラでパラメータを認識することができますが、なんらかの理由で予期せぬ結果が発生するようです

  • TestCase1/Site1の
  • testcase1 /クローム
  • TestCase1 /サイト2
  • TestCase1/EDGEの/ etc。

私はここで、NUnitパラメータを使用してここで話していることに類似したことについて話し合うフォーラムを見ましたが、目的の結果を生成できませんでした。

私は以前と同じように別のNUnitを追加して渡すだけのケースだと思っていました。

namespace AutomationStuffs.SmokeTests 
{ 
    [TestFixture] 
    //[Parallelizable] 
    public class LoginTests : TestBase 
    { 
     [Test] 
     [TestCaseSource(typeof(TestBase), "BrowserToRunWith")] 
     [TestCaseSource(typeof(TestBase), "URLToRunWith")] 
     public void FirstTimeLogin(String BrowserName, String Url) 
     { 
      //Browser Driver Setup For test 
      Setup(BrowserName); 

      Assert.IsTrue(FiveComponentsAndDocStorePage.AssertOnThePage()); 
     } 
    } 
} 
:ここ

namespace AutomationStuffs.SmokeTests 
{ 
    [TestFixture] 
    public class LoginTests : TestBase 
    { 
     [Test] 
     [TestCaseSource(typeof(TestBase), "BrowserToRunWith")] 
     public void FirstTimeLogin(String BrowserName, String Url) 
     { 
      //Browser Driver Setup For test 
      Setup(BrowserName); 

      //...DO SOME TESTING THINGS 
     } 
    } 
} 

namespace AutomationStuffs.Utilities 
{ 
    public class TestBase 
    { 
     public static IWebDriver driver; 

     public void Setup(String BrowserName) 
     { 
      Driver.Intialize(BrowserName); 
      //... DO SOME SETUP STUFF 
      LoginPage.GoTo(); 
      //..I DO SOME LOGIN SETUP HERE 
     } 


     public static IEnumerable<String> BrowserToRunWith() 
     { 
      String[] browsers = BrowsersList.theBrowserList.Split(','); 
      foreach (String b in browsers) 
      { 
       yield return b; 
      } 
     } 
    } 
} 


namespace AutomationStuffs.Pages 
{ 
    public class LoginPage 
    { 
     public static void GoTo() 
     { 
      Driver.Instance.Navigate().GoToUrl(Driver.baseURL); 
     } 
    } 
} 


namespace AutomationStuffs.Selenium 
{ 
    public class Driver 
    { 
     public static IWebDriver Instance { get; set; } 
     public static string baseURL 
     { 
      get 
      { 
       string url = System.Configuration.ConfigurationManager.AppSettings["BaseUrl"]; 
       return url; 
      } 
     } 

     public static string chromeDriver 
     { 
      get 
      { 
       string driver = System.Configuration.ConfigurationManager.AppSettings["ChromeDriver"]; 
       driver = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, driver); 
       return driver; 
      } 
     } 

     public static string ieDriver 
     { 
      get 
      { 
       string driver = System.Configuration.ConfigurationManager.AppSettings["IEDriver"]; 
       driver = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, driver); 
       return driver; 
      } 
     } 


     public static string edgeDriver 
     { 
      get 
      { 
       string driver = System.Configuration.ConfigurationManager.AppSettings["EdgeDriver"]; 
       driver = System.IO.Path.Combine(AppDomain.CurrentDomain.BaseDirectory, driver); 
       return driver; 
      } 
     } 

     public static void Intialize(String BrowserName) 
     { 
      String DRIVER_PATH = chromeDriver; 
      String DRIVER_PATH_IEFF = ieDriver; 
      String DRIVER_PATH_EDGE = edgeDriver; 

      var optionsChrome = new ChromeOptions(); 
      optionsChrome.AddArgument("start-maximized"); 
      optionsChrome.AddArgument("no-sandbox"); 

      var optionsIe = new InternetExplorerOptions(); 

      if (BrowserName.Equals("ie")) 
      { 
       Instance = new InternetExplorerDriver(DRIVER_PATH_IEFF); 
       Instance.Manage().Window.Maximize(); 
      } 
      else if (BrowserName.Equals("firefox")) 
      { 
       Instance = new FirefoxDriver(); 
       Instance.Manage().Window.Maximize(); 
      } 
      else if (BrowserName.Equals("edge")) 
      { 
       Instance = new EdgeDriver(DRIVER_PATH_EDGE); 
       Instance.Manage().Window.Maximize(); 
      } 
      else 
      { 
       Instance = new ChromeDriver(DRIVER_PATH, optionsChrome); 
      } 
     } 
    } 
} 

私は私が(ちょうど複製し、適切な基礎となる方法を適応させることは明らかと)しなければならないだろうと思ったものです。ここで私が現在使用しているコードのslimmed downバージョンです

答えて

2

NUnitはすべてTestCaseSourceを別々に扱います。BrowserToRunWithのテストケースを作成し、それ以降はURLToRunWithのためにテストケースを作成します。あなたはそれを実行しようとすると、

結果メッセージを取得します:引数の数が間違っをあなたはTestCaseSourceにそれらを一緒に送信する必要があり、両方のパラメータのためのテストケースを作成するには

を提供します。あなたは

public static IEnumerable TestData 
{ 
    get 
    { 
     string[] browsers = BrowsersList.theBrowserList.Split(',') 
     string[] urls = UrlsList.theUrlList.Split(',') 

     foreach (string browser in browsers) 
     { 
      foreach (string url in urls) 
      { 
       yield return new TestCaseData(browser, url); 
      } 
     } 
    } 
} 

様またはLINQ

public static IEnumerable TestData 
{ 
    get 
    { 
     string[] browsers = BrowsersList.theBrowserList.Split(',') 
     string[] urls = UrlsList.theUrlList.Split(',') 

     return from browser in browsers 
       from url in urls 
       select new TestCaseData(browser, url); 
    } 
} 

で何かを行うことができますそしてTestCaseSource

[TestCaseSource(typeof(AAA), "TestData")] 
+0

それは答えのスポットです!どうもありがとうございます。私はTestCaseSourceの値をもう一度渡すことができ、NUnitはいくつかの魔法をやったという誤った印象の下で走っていました - 明らかに、私は非常に間違っていました。 – saab613

1

@Guyの答えはまさに正しいかのようになります - 私はそれをアップ票を投じました。

完全性のために、ここではテストを書く別の方法があります。これは、NUnitが「何らかの魔法をやる」と思ったときに思い描いたことかもしれません。

[Test] 
    public void FirstTimeLogin(
     [ValueSource("BrowserToRunWith")] String BrowserName, 
     [ValueSource("UrlToRunWith")] String Url) 
    { 
     //Browser Driver Setup For test 
     Setup(BrowserName); 

     Assert.IsTrue(FiveComponentsAndDocStorePage.AssertOnThePage()); 
    } 

ValueSourceのメンバーは、あなたがすでに持っているものと同様であるが、それぞれがTestCaseDataインスタンスではなくstringを返します。

この場合、[Test]属性が必要です。元の例ではオプション(そして醜いIMO!)でした。 :-)

+0

これは非常に便利です。これありがとう。 – saab613

関連する問題