JMeter

2012-03-22 15 views
13
में धागा समूहों के बीच कुकी मानों साझा करना

मैं निम्नलिखित सेटअप:JMeter

Thread A 
    - Http Cookie Manager 
    - Login Page 
Thread B 
    - Http Cookie Manager 
    - Page to hit 
    - Another page to hit 

मैं कुकी है कि एक वैश्विक संपत्ति के लिए लॉगिन पृष्ठ में स्थापित किया जाएगा और फिर करने के लिए यह सेट करने का प्रयास किया गया है थ्रेड बी में एचटीपी कुकी प्रबंधक हालांकि मैं इसे सही नहीं मिला। मैंने बीनशेल पोस्ट प्रोसेसर और इस तरह की कोशिश की है, लेकिन इसे सही तरीके से सेटअप करने में सक्षम नहीं हैं।

=== व्यवहार वांछित को स्पष्टीकरण के लिए जोड़े ===

कारण मैं थ्रेड बी में पृष्ठ और कुकी प्रबंधक में लॉग नहीं हो सकता है कारण है। लक्ष्य लॉग इन करना है, कुकी प्राप्त करें, और उसके बाद पृष्ठों का एक गुच्छा बार-बार दबाएं। यह हमें एक बार लॉग इन करने की क्षमता देता है और उसके बाद उस उपयोगकर्ता से कई हिट अनुकरण करता है। कुकी मैनेजर डालने और पेज में उसी थ्रेड में लॉग इन करके उपयोगकर्ता लॉग इन करेगा, पेजों का एक समूह दबाएगा और फिर लॉग इन करेगा और फिर से करेगा।

उत्तर

21

मुझे अपने प्रश्न में थोड़ा और स्पष्ट होना चाहिए था, लेकिन हमें यह तय हुआ।

jmeter.properties फ़ाइल खोलें और लाइन के पास जाओ "CookieManager.save.cookies = false" और यह सुनिश्चित करें:

Http Cookie Manager 
Thread A - 1 Thread - 1 Loop Count 
    - Login Page 
     - BeanShell PostProcessor 
      - props.put("MyCookie","${COOKIE_<INSERT ACTUAL COOKIE NAME>}"); 
Thread B - 50 Threads - Infinite Loop Count 
    - BeanShell PreProcessor 
     - import org.apache.jmeter.protocol.http.control.CookieManager; 
     import org.apache.jmeter.protocol.http.control.Cookie; 
     CookieManager manager = sampler.getCookieManager(); 
     Cookie cookie = new Cookie("<INSERT ACTUAL COOKIE NAME>",props.get("MyCookie"),"<INSERT DOMAIN NAME>","<INSERT COOKIE PATH>",false,0); 
     manager.add(cookie); 
    - Page to hit 
    - Another page to hit, repeat as needed 

तो फिर वहाँ JMeter के लिए एक विन्यास बदलाव की जरूरत है: यहाँ हमारे समाधान है = सच।

यह दूसरे धागे में उपयोग किए जाने वाले पहले धागे में लॉगिन कुकी को अनुमति देगा।

+0

कुकी पथ कैसे प्राप्त करें ??? – Esty

+0

आप पथ के रूप में "/" का उपयोग कर सकते हैं ... –

+0

@Clarence Klopfstein, I आपके द्वारा की गई विधि का उपयोग किया गया, और मैं एक ही कुकीज के नाम और मूल्यों को देख पा रहा हूं, लेकिन मेरे द्वारा उपयोग किए जाने वाले अनुरोध अब "[कोई कुकीज़ नहीं]" हैं। कोई विचार? –

1

क्यों थ्रेड ग्रुप वन के बजाय टेस्ट प्लान स्तर पर एचटीपी कुकी प्रबंधक को जोड़ने और एक थ्रेड समूह में सभी नमूने समूह को क्यों नहीं जोड़ना है?

Test Plan 
    Http Cookie Manager 
    Thread Group 
     - Login Page 
     - Page to hit 
     - Another page to hit 

यह किसी अन्य अतिरिक्त नमूने के बिना आपकी समस्या का समाधान करना चाहिए।
या शायद आपके द्वारा किए गए तरीके को लागू करने के कुछ उद्देश्य कारण हैं?

... कृपया this पर भी देखें।

+1

मैं अपना समाधान थोड़ा सा पोस्ट करूंगा, लेकिन हमें यह काम मिल गया। हालांकि आपके सुझाव का उत्तर देने के लिए, विचार एक बार लॉगिन करना था और बहुत सारी चीज़ें करना था और देखें कि यह कैसा प्रदर्शन करता है। आपकी विधि को प्रत्येक पुनरावृत्ति के लॉगिन की आवश्यकता होगी। यथार्थवादी भार परीक्षण नहीं। –

+0

टेस्ट प्लान स्तर पर HTTP कुकीज़ प्रबंधक को मेरे लिए काम नहीं किया ... :( –

2

मेरे पास आपके जैसा ही उपयोग-मामला है लेकिन मुझे लगता है कि एक आसान समाधान है: थ्रेड समूह के अंदर आप लूप नियंत्रक का उपयोग कर सकते हैं।

तो ...

Thread Group 
    Login 
    Loop Controller 
    - Page to hit 
    - Another page to hit 

कहा कि मैं अभी भी चाल आप का वर्णन उपयोग करने के लिए है, क्योंकि मुझे लगता है कि हम एक बार प्रवेश करना चाहते हैं जाएगा जा रहा हूँ, तो अलग धागा समूहों से समानांतर में कई अलग अलग पृष्ठों मारा । तो हम पहले लॉगिन करेंगे, फिर कई अलग-अलग धागे समूह एक साथ सर्वर को हिट करेंगे। तो आपकी चाल निश्चित रूप से उपयोगी है। लेकिन साधारण मामलों के लिए, एक लूप नियंत्रक ऐसा कर सकता है मुझे लगता है।

+0

क्या लूप कंट्रोलर के अंदर हिट अनुक्रमिक या समानांतर होंगे? –

+0

अनुक्रमिक - यही कारण है कि इसका उपयोग करने के लिए * नहीं * रास्ता –

0

ऊपर दिए गए उत्तर ने वास्तव में मेरी मदद की लेकिन HTTP कुकी प्रबंधक उस विवरण को याद कर रहा था जिसे मुझे इसे काम करने के लिए आवश्यक था। नीचे के रूप में कुकी प्रबंधक की स्थापना करके, यह मेरे

Http Cookie Manager 
NAME $<ACTUAL_COOKIE_NAME> 
VALUE ${COOKIE_<INSERT_ACTUAL_COOKIE_NAME>}  
DOMAIN ${SITE} 
PATH /
Thread A - 1 Thread - 1 Loop Count 
.... 
Thread B - 50 Threads - Infinite Loop Count 
.... 
0

CookieManager के लिए काम किया धागे के बीच कुकी साझा नहीं करता। किसी कारण से @ क्लेरेंस क्लोप्स्टीन की विधि मेरे लिए काम नहीं करती (जेमीटर 3.0)। कुछ कारणों से "${COOKIE_<INSERT ACTUAL COOKIE NAME>}" पारित स्ट्रिंग का मूल्यांकन नहीं कर रहा था।

तो, यहां लॉगिन करने का एक और समाधान है, और फिर .ASPXAUTH कुकी पास करें। एक setUp Thread Group (महत्वपूर्ण) में : यह किसी भी विन्यास बदलाव के बिना काम करना चाहिए

BeanShell PostProcessor: 
import org.apache.jmeter.protocol.http.control.CookieManager; 
import org.apache.jmeter.protocol.http.control.Cookie; 

CookieManager manager = ctx.getCurrentSampler().getCookieManager(); 
Cookie cookie = manager.get(3); //Find the '.ASPXAUTH' cookie 
log.info("Cookie:" + cookie); 
props.put("MyCookie",cookie.getValue()); 
तो एक सामान्य थ्रेड समूह में

:

अन्य समाधान यहाँ की
BeanShell PreProcessor: 
import org.apache.jmeter.protocol.http.control.CookieManager; 
import org.apache.jmeter.protocol.http.control.Cookie; 
CookieManager manager = sampler.getCookieManager(); 
Cookie cookie = new Cookie(".ASPXAUTH",props.get("MyCookie"),"<DOMAIN>","/",false,0); 
manager.add(cookie); 
+0

यह समाधान मेरे लिए काम नहीं करता है :( –

+0

आपको अभी भी टेस्ट प्लान स्तर @ShaiAlon में कुकी मैनेजर की आवश्यकता है। क्या आपने बिना कोशिश की है? –

2

कोई भी मेरे लिए काम किया, लेकिन वे सभी समाधान का कुछ हिस्सा था। आखिरकार एक थ्रेड समूह से दूसरे तक कुकी (JSESSIONID, मेरे मामले में) पास करने के लिए क्या काम किया गया है। नोट मुझे किसी भी चीज़ पर CookieManager.save.cookies सेट करने की आवश्यकता नहीं थी।

Http Cookie Manager 
Thread A - 1 Thread - 1 Loop Count 
    - Login Page 
     - BeanShell PostProcessor 
      - import org.apache.jmeter.protocol.http.control.CookieManager; 
       import org.apache.jmeter.protocol.http.control.Cookie; 
       import org.apache.jmeter.testelement.property.PropertyIterator; 
       import org.apache.jmeter.testelement.property.JMeterProperty; 
       CookieManager manager = ctx.getCurrentSampler().getCookieManager(); 
       PropertyIterator iter = manager.getCookies().iterator(); 
       while (iter.hasNext()) { 
        JMeterProperty prop = iter.next(); 
        Cookie cookie = prop.getObjectValue(); 
        if (cookie.getName().equals("JSESSIONID")) { 
         props.put("MySessionCookie", cookie); 
         break; 
        } 
       } 
Thread B - 50 Threads - Infinite Loop Count 
    - BeanShell PreProcessor 
     - import org.apache.jmeter.protocol.http.control.CookieManager; 
     import org.apache.jmeter.protocol.http.control.Cookie; 
     CookieManager manager = sampler.getCookieManager(); 
     manager.add(props.get("MySessionCookie")); 
    - Page to hit 
    - Another page to hit, repeat as needed 
+0

धन्यवाद। एक आकर्षण की तरह काम कर रहा है! –

-1

कुकी में एक से अधिक क्षेत्र के लिए मैं इस n अपने काम करता है

BeanShell Post Processor 
    props.put("MyCookie","${COOKIE_<FIRST FIELD>}"); 
    props.put("MyCookie1","${COOKIE_<SECOND FIELD>}"); 

    BeanShell Pre Processor 

    import org.apache.jmeter.protocol.http.control.CookieManager; 
    import org.apache.jmeter.protocol.http.control.Cookie; 
    CookieManager manager = sampler.getCookieManager(); 
    Cookie cookie = new Cookie("<FIRST FIELD>",props.get("MyCookie"),"DOMAIN","/",false,0); 
    manager.add(cookie); 
    Cookie cookie1 = new Cookie("<SECOND FIELD>",props.get("MyCookie1"),"DOMAIN NAME","/",false,0); 
    manager.add(cookie1); 
0

बजाय में उन लॉग इन करने के लिए, आप एक साथ एक ही धागा समूह उपयोग कर सकते हैं एक अलग थ्रेड समूह होने की कोशिश की एक बार केवल नियंत्रकनमूनाके तहत एक बार केवल नियंत्रक लॉगिन करने और सत्र कुकी प्राप्त करने के लिए (जो निश्चित रूप से केवल एक बार चलाएगा) जोड़ें। तब से थ्रेड समूह पर सभी अनुरोधों को सत्र कुकी पास करने वाले अन्य नमूने चलाएंगे। मेरे पास HTTP कुकी प्रबंधकटेस्ट प्लान इस पर दायरा था।

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