2013-06-03 1 views
6

내 UnitTest 동안 향후 UnitTests에서 참조해야하는 데이터를 생성 중입니다. 예를 들어 :UnitTest에서 LoadTest로 데이터를 전달하는 방법은 무엇입니까?

[TestMethod] 
public void CreateOrder() 
{ 
    Order order = new Order(); 
    int orderNumber = order.Create(); 
    // return orderNumber; 
} 

[TestMethod] 
public void ProcessOrder() 
{ 
    int orderNumber = (int)TestContext.Properties["OrderNumber"]; 
    ProcessOrder(orderNumber); 
} 

나는 (아마도 다른 에이전트) 다른 유닛 테스트는이 순서를 생성 사용할 수 있도록 '주문 번호를'오프 저장해야합니다. 데이터베이스를 사용할 수 있다고 결정했으나 항목을 제거 할 때 대기열처럼 작동해야하며 해당 경로로 이동하지 않는 것이 좋습니다.

OrderNumber를 LoadTest로 '반환'하고 다른 UnitTest를 호출 할 때 컨텍스트 매개 변수로 전달하는 방법이 있습니까?

+0

왜 다른 테스트에서 생성 된 정확한 인스턴스가 필요한지 설명 할 수 있습니까? 설정 메소드에서 인스턴스를 작성하고 두 테스트에서 모두 사용하는 것만으로는 충분하지 않은 이유는 무엇입니까? – unholysampler

+0

주문을 생성하는 방법이 하나 있습니다. 이 방법은 처리보다 빠른 속도로 작동합니다. 1 시간 만에 40000 주문을 생성 할 수 있다는 것과 동시에 주문을 처리 할 수 ​​있다는 것을 증명해야합니다 (40K 주문을 모두 처리 할 필요가 없으며 처리가 진행되는 동안 40K 주문을 작성할 수 있음을 증명할 수 있음). 동시에 40K를 생성하여 동시에 생성하고 처리 할 수있는 동시성 문제가 있기 때문에 시작할 수는 없습니다. 모든 40K 주문을 처리하지 못하기 때문에 Create/Process/Create/Process 패턴을 수행 할 수 없습니다. 명령서는 처리를 위해 존재해야합니다. – esac

+0

로드 테스트와 관련하여 어떤 작업도하지 않았으므로 직접적인 도움을 드릴 수는 없습니다. 그러나 그 두 가지 메소드가 모두 "로드를 생성하는"방법으로 정기적으로 호출된다는 아이디어가 있다면,이 메소드가 정의 된 클래스에'Queue' 멤버 변수를 갖는 것만 큼 간단 할 것입니다. 그러면 CreateOrder()'는 큐에 추가 할 수 있고'ProcessOrder()'는 큐를 풀 수 있습니다. 그렇지 않으면 [this] (http://msdn.microsoft.Visual Studio에서로드 테스트에 대한 자세한 내용은 com/ko-ko/library/ms182561 % 28v = vs.80 % 29.aspx)를 참조하십시오. – unholysampler

답변

4

LoadTest Plugin을 사용하고 UserContext을 사용하면됩니다. 각 가상 사용자는 자신의 UserContext이 있으며이를 사용하여 TestContext에서 데이터를 전달/검색 할 수 있습니다.

  1. Create a load test plugin
  2. TestStarting & TestFinished 이벤트에 이벤트 처리기를 추가합니다. TestStarting 이벤트는 TestInitialize 방법 전에 발사되고 TestFinishedTestCleanup 애프터 :

    public void TestStarting(object sender, TestStartingEventArgs e) 
    { 
        // Pass the UserContext into the TestContext before the test started with all its data retrieved so far data. 
        // At the first test it will just be empty 
        e.TestContextProperties.Add("UserContext", e.UserContext); 
    } 
    
    public void TestFinished(object sender, TestFinishedEventArgs e) 
    { 
        // do something with the data retrieved form the test 
    } 
    
  3. 은/얻을 수있는 TestInitialize & TestCleanup를 사용하여/UserContext에 데이터를 추가 액세스하려면

    [TestInitialize] 
    public void TestInitialize() 
    { 
        // Get the order number which was added by the TestCleanup method of the previous test 
        int orderNumber = (int) UserContext["orderNumber"]; 
    } 
    
    [TestCleanup] 
    public void TestCleanup() 
    { 
        // When the CreateOrder test is completed, add the order number to the UserContext 
        // so the next will have access to it 
        UserContext.Add("orderNumber", orderNumber); 
    } 
    
  4. 테스트의 UserContext에 모든 UnitTest에 다음 속성을 추가합니다.

    public LoadTestUserContext UserContext 
    { 
        get 
        { 
         return TestContext.Properties["$LoadTestUserContext"] as LoadTestUserContext; 
        } 
    } 
    
  5. 테스트 구성로드 Test Mix Model = Based on sequential order에서 테스트가 Test Mix에 추가 된 순서대로 실행됩니다.

참고 :이 들어는 하나의 유닛 테스트 파일을 각 TestMethod을 추가해야 작동합니다. 같은 파일에있는 경우 TestInializeTestCleanup 메서드는 포함 된 모든 TestMethod에서 실행되며, 사용자가 가지고 있지 않은 데이터 (예 : CreateOrder에서 orderNumber를 가져 오는 중)에 액세스하려고 시도 할 수 있습니다.

+1

우수 감사합니다! – esac

+0

당신을 환영합니다. – Schaliasos

+1

안녕하세요, 귀하의 대답과 함께 단계별로 작업하고 괜찮습니다.하지만 4 단계에서 'TestContext.Properties'매개 변수를 추출하기 위해 성공하지 못했습니다. 추상 및 정적 매개 변수가 없기 때문입니다. – Hadash

관련 문제