2013-06-03 24 views
6

UnitTest'im sırasında, gelecekteki UnitTests'de referans alınması gereken verileri oluşturuyorum. Örneğin:Bir UnitTest öğesinden LoadTest'e veri nasıl aktarılır?

[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); 
} 

ben (muhtemelen başka ajan üzerine) başka UnitTest bu emri oluşturulan kullanabilmek için 'ORDERNUMBER' kapalı kaydetmeniz gerekir. Veritabanını kullanabileceğime karar verdim, ancak öğeleri kaldırmak için bir kuyruk gibi çalıştırmam gerekiyor ve o rotaya gitmemeyi tercih ediyorum.

orderNumber öğesinin LoadTest öğesine geri döndürülmesi ve bunu başka bir UnitTest ürününe yapılan bir Bağlam parametresi olarak iletmenin bir yolu var mı?

+0

Diğer testin neden oluşturduğu örneğe neden ihtiyaç duyduğunuzu açıklayabilir misiniz? Örnek bir kurulum yönteminde oluşturmak ve her iki test tarafından kullanmak için neden yeterli değildir? – unholysampler

+0

Siparişleri oluşturan bir yönteminiz var. Bu yöntem, işlemden daha hızlı çalışır. 1 saat içinde 40000 adet sipariş oluşturabileceğinizi ve aynı zamanda bu siparişi işleme koyduğunuzu ispatlamanız gerekir (tüm 40K siparişlerini işlemek zorunda kalmazsınız, sadece işleme devam ederken bunu 40K sipariş oluşturabilirsiniz). Başlangıç ​​için tüm 40K'ları yaratamazsınız, çünkü aynı anda oluşturup işleyerek ortaya çıkabilecek eşzamanlılık sorunları vardır. 40K siparişlerinin tümünü geçemeyeceğiniz için bir İşlem/İşlem/Oluştur/Süreç modeli yapamazsınız. İşlenecek süreç var. – esac

+0

Yük Testleriyle herhangi bir çalışma yapmadım, bu yüzden doğrudan yardım edemem. Ancak, bu iki yöntemin de düzenli olarak "yük oluşturmak" için bir yol olduğu düşünülürse, bu yöntemlerin tanımlandığı sınıfta bir "Queue" üye değişkenine sahip olmak kadar basit olabilir. Bu şekilde, CreateOrder() 'sıranıza ekleyebilir ve' ProcessOrder() 'bundan alabilir. Aksi halde, [this] 'i (http://msdn.microsoft.Visual Studio'daki Yükleme Testleri hakkında ayrıntılı bilgi için com/en-us/library/ms182561% 28v = vs80% 29.aspx). – unholysampler

cevap

4

LoadTest Plugin aracılığıyla ve UserContext'u kullanarak yapabilirsiniz. Her sanal kullanıcının kendi UserContext'u vardır ve verileri TestContext'dan aktarmak/almak için kullanabilirsiniz.

  1. Create a load test plugin
  2. TestStarting & TestFinished olaylara olay işleyicileri ekleyin. TestStarting olay TestInitialize yönteminden önce tetiklenecek ve TestFinishedTestCleanup sonra:

    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. /almak için TestInitialize & TestCleanup kullanın/UserContext için veri ekleyin: erişebilmek için

    [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. sınamadaki UserContext için her bir Birim üzerinde aşağıdaki özelliği ekleyin TestTest:

    public LoadTestUserContext UserContext 
    { 
        get 
        { 
         return TestContext.Properties["$LoadTestUserContext"] as LoadTestUserContext; 
        } 
    } 
    
  5. Test yapılandırması Test Mix Model = Based on sequential order'u yükledikten sonra, testleriniz Test Mix'a eklediğiniz sırayla gerçekleştirilecektir.

Not: Bunun için tek UnitTest dosyada her TestMethod eklemek zorunda, çalışmak. Aynı dosyada varsa, TestInialize ve TestCleanup yöntemleri, içerdiği her bir TestMethod üzerinde yürütülecek ve muhtemelen sahip olmadığınız verilere erişmeye çalışacaksınız (örneğin, CreateOrder üzerinde orderNumber almaya çalışırken).

+1

Mükemmel, teşekkürler! – esac

+0

Rica ederim. – Schaliasos

+1

Merhaba, Cevabınız ile adım adım çalışıyorum ve sorun değil, ama adım 4'te 'TestContext.Properties' parametresini geri alma başarısı olmadı çünkü soyut ve hiçbir statik parametre olmadı, Siz yardımcı olabilirsiniz? – Hadash

İlgili konular