2013-03-27 3 views
1

웹 응용 프로그램을 테스트하기 위해 Selenium을 사용하여 NUnit 테스트 케이스를 작성했습니다. 다른 환경 (예 : QA, 준비, & 생산)에 대해 동일한 테스트 케이스를 실행하고 싶습니다. 어떻게 달성 할 수있는 가장 쉬운 방법입니까?Selenium을 사용하여 NUnit 테스트 케이스를 실행하여 다른 환경에서 실행하려면 어떻게해야합니까?

+0

설정 파일을 왜 당신의 환경은 본질적 것? (내가 전에했던 것처럼 비슷한 방법으로) 그런 다음 검사 환경을 어떻게, 어떤 종류의 새로운 Settings 클래스를 필요 UAT와 프로덕션간에 다른 점이 있습니까? –

답변

5

NUnit은 매개 변수화 된 테스트 픽스처와 매개 변수화 된 테스트를 지원합니다. 따라서 첫 번째로 다른 환경에 대해 특정 테스트를 실행하려고합니까 아니면 전체 테스트 픽스쳐가 두 환경 모두에 대해 다시 실행될 것입니까?

이 질문에 대한 답은 매개 변수 (환경)를 전달할 위치를 결정하므로 부탁드립니다. 전체 테스트 픽스쳐를 재실행하려는 경우, 테스트 픽스처 레벨에서 환경을 통과시켜야합니다. 즉 매개 변수화 된 테스트 픽스처를 작성해야합니다. 이러한 환경에 대해 특정 테스트 만 실행하려면 각 테스트 케이스에 테스트를 전달해야합니다. 예를 들어, 내가 같은 일을 어떻게 수행했는지 아래에 있습니다.

먼저 테스트에 '첨부 할 수있는'환경을 정의하는 방법을 만듭니다. ,

public enum Environment 
{ 
    QA, 
    Production, 
    Hotfix, 
    Development 
} 

public class Settings 
{ 
    public static string QAUrl { get { return "some url"; } } 

    public static string ProductionUrl { get { return "some url"; } } 

    public static string HotfixUrl { get { return "some url"; } } 

    public static string DevUrl { get { return "some url"; } } 
} 

위 "일부 URL이"구성 파일이나 하드에서 읽을 것이다 : 나는 아마의 app.config에이를 밀어 제안과 함께 갈 수있는 '설정'클래스와 열거이있을 것이다 그러나 너는 부탁한다.

환경에 대한 개념이 있고 URL이지만, 어떤 방식 으로든 서로 연결되어 있거나 관련이 없습니다. 이상적으로는 열거 형의 'QA'값을 부여하려는 경우 URL이 정렬됩니다.

다음으로 모든 테스트 픽스쳐가 상속 할 수있는 기본 테스트 픽스처를 생성하여 현재 환경을 유지합니다. 당신은 아마 어떤 enum 값의에 어떤 URL의지도를 해결하도록 반사를 사용할 수

public class BaseTestFixture 
{ 
    private Dictionary<Environment, string> PossibleEnvironments 
    { 
     get 
     { 
      return new Dictionary<Environment, string>() 
      { 
       { Environment.QA, Settings.QAUrl }, 
       { Environment.Production, Settings.ProductionUrl }, 
       { Environment.Hotfix, Settings.HotfixUrl }, 
       { Environment.Development, Settings.DevelopmentUrl }, 
      } 
     } 
    } 

    private Environment CurrentEnvironment { get; set; } 

    public BaseTestFixture(Environment environment) 
    { 
     CurrentEnvironment = environment; 
    } 
} 

: 우리는 또한 URL의에 이제 환경 값을 관련시키는 Dictionary을 만들 수 있습니다.

우리가 실행할 수있는 환경이 멋지다. 사이트 관리자로 로그인하기위한 샘플 테스트 :

public class LoginToSite 
{ 
    [Test] 
    public void CanAdministratorSeeAdministratorMenu() 
    { 
     // go to the site 
     driver.Navigate().GoToUrl("production site"); 
     // login as administrator 
    } 
} 

특정 URL로 이동하려면 어떻게해야합니까?

그래서 우리는 지금이 ...

public class BaseTestFixture 
{ 
    private Dictionary<Environment, string> PossibleEnvironments 
    { 
     get 
     { 
      return new Dictionary<Environment, string>() 
      { 
       { Environment.QA, Settings.QAUrl }, 
       { Environment.Production, Settings.ProductionUrl }, 
       { Environment.Hotfix, Settings.HotfixUrl }, 
       { Environment.Development, Settings.DevelopmentUrl }, 
      } 
     } 
    } 

    private Environment CurrentEnvironment { get; set; } 

    protected string CurrentEnvironmentURL 
    { 
     get 
     { 
      string url; 
      if (PossibleEnviroments.TryGetValue(CurrentEnviroment, out url)) 
      { 
       return url; 
      } 

      throw new InvalidOperationException(string.Format("The current environment ({0}) is not valid or does not have a mapped URL!", CurrentEnviroment)); 
     } 
    } 

    public BaseTestFixture(Environment environment) 
    { 
     CurrentEnvironment = environment; 
    } 

      public BaseTestFixture() 
      { 
      } 
} 

우리의 기본 클래스는 지금 우리가 어떤 환경, 어떤 페이지로 이동하기에 따라, 우리가 말할 수있는 ...의 우리의 기본 클래스 조금 수정하자 테스트, 우리의 기지에서 상속 :

public class LoginToSite : BaseTestFixture 
{ 
    [Test] 
    public void CanAdministratorSeeAdministratorMenu() 
    { 
     // go to the site 
     driver.Navigate().GoToUrl(CurrentEnvironmentURL); 
     // login as administrator 
    } 
} 

그러나 위의 컴파일되지 않습니다 ... 왜? 우리는 실제로 아직 환경을 제공하지 않고 있으므로 우리는 하나를 전달해야합니다 ...위대한

[TestFixture(Environment.QA)] 
public class LoginToSite : BaseTestFixture 
{ 
    [Test] 
    public void CanAdministratorSeeAdministratorMenu() 
    { 
     // go to the site 
     driver.Navigate().GoToUrl(CurrentEnvironmentURL); 
     // login as administrator 
    } 
} 

는, 지금 전달 환경을 가지고, 등 URL의 검사는 모든 그러나이 여전히가 컴파일되지 않습니다 ... 지금 당신을 위해 백그라운드에서 수행됩니다. 우리가 상속을 사용하고 있기 때문에, 우리에게 전달할 생성자가 있어야합니다 :

public LoginToSite(Environment currentEnvironment) 
    { 
     CurrentEnvironment = currentEnvironment; 
    } 

Et voilà. 특정 테스트 케이스에 관해서는

이 이전부터 우리의 테스트 케이스를 가지고, 좀 더 쉽게 :

public class LoginToSite 
{ 
    [TestCase(Environment.QA)] 
    public void CanAdministratorSeeAdministratorMenu(Environment environment) 
    { 
     // go to the site 
     driver.Navigate().GoToUrl("production site"); 
     // login as administrator 
    } 
} 

는 것을 특정 테스트 케이스로 환경을 전달한다. ..

public class EnvironmentHelper 
{ 
    private static Dictionary<Environment, string> PossibleEnvironments 
    { 
     get 
     { 
      return new Dictionary<Environment, string>() 
      { 
       { Environment.QA, Settings.QAUrl }, 
       { Environment.Production, Settings.ProductionUrl }, 
       { Environment.Hotfix, Settings.HotfixUrl }, 
       { Environment.Development, Settings.DevelopmentUrl }, 
      } 
     } 
    } 

    public static string GetURL(Environment environment) 
    { 
     string url; 
     if (PossibleEnviroments.TryGetValue(environment, out url)) 
     { 
      return url; 
     } 

     throw new InvalidOperationException(string.Format("The current environment ({0}) is not valid or does not have a mapped URL!", environment)); 
    } 
} 
+0

답변 해 주셔서 감사합니다. 그것은 나를 많이 도왔다. 좀 더 구체적이어야 했어. QA 직원이 회귀 도구를 실행할 수있는 방법을 찾고 싶었습니다. 그래서 나에게 가장 좋은 방법은 환경별로 [configuration files] (http://www.nunit.org/index.php?p=configFiles&r=2.2.10)를 사용하는 것이 었습니다. 그래서 "QA"와 "Production"이라는 공유 폴더에 여러 개의 폴더를 만든 다음 내 test.dll과 test.dll.config를 복사했습니다. 그래서 그들은 상자에 NUnit을 설치하고 회귀 테스트를 수행 할 환경에 따라 각각의 폴더에 기반한 dll을 열 수 있습니다. – Duk

0

가장 좋은 방법은 모든 기능에 대해 하드 코딩 된 링크 대신 변수를 사용하는 것입니다. 환경을 변경해야 할 때 변경할 수 있습니다. 더 쉬운 방법은 메모장/엑셀 파일에서 링크를 읽는 것입니다.

관련 문제