2013-06-03 26 views
6

Trong phần UnitTest của tôi, tôi đang tạo dữ liệu cần được tham chiếu trong các Bài kiểm tra đơn vị trong tương lai. Ví dụ:Làm cách nào để truyền dữ liệu từ một UnitTest đến một 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); 
} 

Tôi cần lưu 'orderNumber' để một UnitTest khác (có thể trên một tác nhân khác) có thể sử dụng thứ tự được tạo này. Tôi đã quyết định rằng tôi có thể sử dụng một cơ sở dữ liệu, nhưng sau đó tôi phải vận hành nó như một hàng đợi trong việc loại bỏ các mục, và không muốn đi theo con đường đó.

Có cách nào để 'trả lại' orderNumber quay lại LoadTest và chuyển thông số đó dưới dạng tham số Ngữ cảnh trong cuộc gọi đến một UnitTest khác không?

+0

Bạn có thể giải thích tại sao bạn cần ví dụ chính xác do thử nghiệm khác tạo ra không? Tại sao nó không đủ để tạo ra cá thể trong một phương thức thiết lập và được sử dụng bởi cả hai bài kiểm tra? – unholysampler

+0

Bạn có một phương pháp tạo đơn đặt hàng. Phương pháp này hoạt động với tốc độ nhanh hơn xử lý. Bạn phải chứng minh rằng bạn có thể tạo 40000 đơn đặt hàng trong 1 giờ và đồng thời xử lý các đơn hàng đó (bạn không phải xử lý tất cả đơn đặt hàng 40K, chỉ chứng minh rằng trong khi đang xử lý, bạn có thể tạo đơn đặt hàng 40K). Bạn không thể chỉ tạo tất cả 40K để bắt đầu, bởi vì có các vấn đề đồng thời có thể xuất hiện bằng cách tạo và xử lý cùng một lúc. Bạn không thể làm mẫu Tạo/Xử lý/Tạo/Xử lý vì bạn sẽ không nhận được thông qua tất cả các đơn hàng 40K. Đơn đặt hàng HAS tồn tại để xử lý. – esac

+0

Tôi chưa thực hiện bất kỳ công việc nào với Kiểm tra tải, vì vậy tôi không thể cung cấp trợ giúp trực tiếp. Nhưng nếu ý tưởng là cả hai phương thức này thường được gọi là cách để tạo "tải", thì có thể đơn giản là có một biến thành viên 'Queue' trong lớp mà các phương thức này được định nghĩa. Bằng cách đó,' CreateOrder() 'có thể thêm vào hàng đợi và' ProcessOrder() 'có thể kéo từ nó. Nếu không, hãy thử đọc [this] (http://msdn.microsoft.com/en-us/library/ms182561% 28v = vs.80% 29.aspx) để biết chi tiết về Tải thử nghiệm trong Visual Studio. – unholysampler

Trả lời

4

Bạn có thể làm điều đó qua số LoadTest Plugin và sử dụng UserContext. Mỗi người dùng ảo có UserContext của riêng mình và bạn có thể sử dụng nó để chuyển/truy xuất dữ liệu từ TestContext.

  1. Create a load test plugin
  2. Thêm xử lý sự kiện trên TestStarting & TestFinished sự kiện. Sự kiện này TestStarting sẽ kích hoạt trước khi phương pháp TestInitializeTestFinished sau TestCleanup:

    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. Sử dụng TestInitialize & TestCleanup để có được/thêm dữ liệu từ/tới 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. Để có được quyền truy cập vào bài kiểm tra UserContext trên bài kiểm tra thêm thuộc tính sau đây vào mỗi UnitTest:

    public LoadTestUserContext UserContext 
    { 
        get 
        { 
         return TestContext.Properties["$LoadTestUserContext"] as LoadTestUserContext; 
        } 
    } 
    
  5. Khi bạn tải cấu hình thử nghiệm thiết lập Test Mix Model = Based on sequential order để kiểm tra của bạn sẽ được thực hiện theo thứ tự bạn thêm chúng trên Test Mix.

Lưu ý: Để làm việc này, bạn phải thêm từng TestMethod trên một tệp UnitTest. Nếu bạn có chúng ở cùng một tệp, các phương pháp TestInializeTestCleanup sẽ được thực hiện trên mỗi TestMethod được chứa và có thể bạn sẽ cố gắng truy cập dữ liệu mà bạn không có (ví dụ: cố gắng lấy orderNumber trên CreateOrder).

+1

Tuyệt vời, cảm ơn! – esac

+0

Bạn được chào đón. – Schaliasos

+1

Xin chào, tôi đang làm việc từng bước với câu trả lời của bạn và ok, nhưng ở bước 4 tôi đã không thành công để thử lại tham số 'TestContext.Properties' vì nó trừu tượng và không có tham số tĩnh, Bạn có thể trợ giúp? – Hadash