2012-04-13 2 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 특성을 시도하고 작동 시켰습니다. 그러나 테스트 이전에 그래프를 실행하고 전체 시퀀스를 반환 할 때만 나타납니다. 나는 "온라인"에서 한 걸음 씩 나아갈 길을 찾고있다.

[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. 
     } 

답변

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와 코드 사이의 어댑터를 만들 필요 것 - GraphWalker에 의해 생성 된 경로를 구문 분석하고를 실행을 필요에 따라 테스트 메소드를 필요로합니다. 즉, 테스트 클래스의 인스턴스를 생성하고 (추상화 할 수는 없습니다) 필요한 메소드를 호출합니다.

+0

여전히 NUnit이 "무료"로 testresult 데이터를 가져 오기 위해 테스트를 실행하고 싶습니다. 내 console-app에서 (GraphWalker를 통해) 테스트를 실행하게하면 내 자신의보고 도구를 만들어야하고 NUnit의 다른 멋진 기능을 사용할 수 없습니다. – Johan

관련 문제