2013-06-03 6 views
6

मेरे यूनिटटेस्ट के दौरान, मैं डेटा बना रहा हूं जिसे भविष्य में यूनिटटेस्ट में संदर्भित करने की आवश्यकता है। उदाहरण के लिए:यूनिटटेस्ट से लोडटेस्ट तक डेटा कैसे पास करें?

[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' बंद को बचाने के लिए इतना है कि एक और unittest (संभवतः एक और एजेंट पर) इस आदेश उत्पन्न उपयोग कर सकते हैं की जरूरत है। मैंने फैसला किया है कि मैं डेटाबेस का उपयोग कर सकता हूं, लेकिन फिर मुझे वस्तुओं को हटाने में कतार की तरह इसे संचालित करना होगा, और उस मार्ग पर नहीं जाना पसंद करेंगे।

क्या आदेश वापस 'वापसी' करने का कोई तरीका है लोडस्टेस्ट पर वापस जाएं और किसी यूनिटटेस्ट को कॉल में कॉन्टेक्स्ट पैरामीटर के रूप में पास करें?

+0

क्या आप समझा सकते हैं कि आपको अन्य परीक्षण द्वारा बनाए गए सटीक उदाहरण की आवश्यकता क्यों है? सेटअप विधि में उदाहरण बनाने के लिए पर्याप्त क्यों नहीं है और दोनों परीक्षणों द्वारा उपयोग किया जाना चाहिए? – unholysampler

+0

आपके पास एक तरीका है जो आदेश बनाता है। यह विधि प्रसंस्करण की तुलना में तेज दर से चलती है। आपको यह साबित करना होगा कि आप 1 घंटे में 40000 ऑर्डर बना सकते हैं, और साथ ही, उन आदेशों को संसाधित कर सकते हैं (आपको सभी 40 के ऑर्डर को संसाधित करने की आवश्यकता नहीं है, केवल साबित करें कि प्रोसेसिंग होने पर, आप 40 के ऑर्डर बना सकते हैं)। आप बस शुरू करने के लिए सभी 40K नहीं बना सकते हैं, क्योंकि समवर्ती मुद्दे हैं जो एक ही समय में बनाने और प्रसंस्करण करके आ सकते हैं। आप एक निर्माण/प्रक्रिया/निर्माण/प्रक्रिया पैटर्न नहीं कर सकते हैं क्योंकि आप सभी 40K ऑर्डर नहीं प्राप्त करेंगे। आदेश प्रक्रिया के लिए मौजूद है। – esac

+0

मैंने लोड टेस्ट के साथ कोई काम नहीं किया है, इसलिए मैं प्रत्यक्ष सहायता नहीं दे सकता। लेकिन अगर विचार यह है कि उन दोनों विधियों को नियमित रूप से "लोड बनाने" के तरीके के रूप में जाना जाता है, तो यह कक्षा में 'कतार' सदस्य चर के रूप में सरल हो सकता है, इन तरीकों को परिभाषित किया गया है। इस तरह, 'CreateOrder() 'कतार में जोड़ सकते हैं और' ProcessOrder() 'इसे खींच सकते हैं। अन्यथा, इसे पढ़ें [यह] (http://msdn.microsoft।विजुअल स्टूडियो में लोड टेस्ट के बारे में विवरण के लिए com/en-us/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 पर प्रत्येक यूनिटटेस्ट पर निम्न संपत्ति जोड़ें:

    public LoadTestUserContext UserContext 
    { 
        get 
        { 
         return TestContext.Properties["$LoadTestUserContext"] as LoadTestUserContext; 
        } 
    } 
    
  5. आप परीक्षण कॉन्फ़िगरेशन सेट Test Mix Model = Based on sequential order लोड करते हैं ताकि आपके परीक्षण Test Mix पर उन्हें जोड़ने के क्रम में निष्पादित किए जाएंगे।

नोट: इसके लिए काम करने के लिए, आप एक ही unittest फ़ाइल पर प्रत्येक TestMethod जोड़ने के लिए। यदि आपके पास एक ही फ़ाइल में है, तो TestInialize और TestCleanup विधियों को प्रत्येक TestMethod पर निष्पादित किया जाएगा, और संभवतः आप उस डेटा तक पहुंचने का प्रयास करेंगे जो आपके पास नहीं है (उदाहरण के लिए CreateOrder पर ऑर्डर नम्बर प्राप्त करने का प्रयास करें)।

+1

उत्कृष्ट, धन्यवाद! – esac

+0

आपका स्वागत है। – Schaliasos

+1

हाय, मैं कदम कदम से अपने जवाब के साथ काम करने और यह ठीक है, लेकिन चरण 4 पर मैं सफलता पुनर्प्राप्त करने के लिए 'TestContext.Properties' पैरामीटर क्योंकि यह सार है और कोई स्थिर पैरामीटर, आप मदद कर सकते हैं नहीं किया? – Hadash

संबंधित मुद्दे