2012-02-07 15 views
14

क्या एक चर/संपत्ति के माध्यम से वर्तमान स्क्रिप्ट के पूर्ण भौतिक पथ तक पहुंचने का कोई तरीका है? डीबग नमूने के माध्यम से सूचीबद्ध कुछ भी प्रतीत नहीं होता है।जेएमटर स्क्रिप्ट पथ तक पहुंच

यह अविश्वसनीय रूप से कष्टप्रद है कि सीएसवी फाइलों और जेएमएक्स को लोड करने जैसी कार्रवाइयां वर्तमान कार्यशील निर्देशिका को इसके सापेक्ष पथ के रूप में उपयोग करती हैं।

उत्तर

10
  • Include Controller
    घटक के संदर्भ के अनुसार:

    यह तत्व फ़ाइल नाम क्षेत्र में चर/कार्य का समर्थन नहीं करता।
    हालांकि, यदि संपत्ति includecontroller.prefix परिभाषित है, तो सामग्री पथनाम को उपसर्ग करने के लिए उपयोग की जाती है। यदि फ़ाइल उपसर्ग + फ़ाइल नाम द्वारा दिए गए स्थान पर नहीं मिल पाती है, तो नियंत्रक JMX लॉन्च निर्देशिका (2.3.4 के बाद जेएमटर के संस्करण) के सापेक्ष फ़ाइल नाम खोलने का प्रयास करता है।

    आप JMeter आप शामिल कर रहे हैं एक जावा संपत्ति includecontroller.prefix नामित जो JMX के लिए एक निर्देशिका पहले जोड़ें करने के लिए इस्तेमाल किया जा सकता फाइल पारित कर सकते हैं।

    1) कंसोल लॉन्च उपयोग के मामले में:

    -Jincludecontroller.prefix=/full/path/to/jmx/scripts/dir/

    2) जीयूआई के मामले में -/.cmd/.bat फ़ाइल .sh या एक आवरण फ़ाइल में लिखने का एक ही जोड़ने ; -
    3) Jmeter Ant Task उपयोग के मामले में अलग संपत्ति के रूप में सेट करें:

    <jmeter 
    jmeterhome="${jmeter.home}" 
    testplan="..." 
    resultlog="..."> 
        <property name="jmeter.save.saveservice.assertion_results" value="all"/> 
        <property name="jmeter.save.saveservice.output_format" value="xml"/> 
        <property name="includecontroller.prefix" value="..."/> 
    </jmeter> 
    
  • CSV Data Set Config
    घटक के संदर्भ के अनुसार:

    सापेक्ष फ़ाइल नाम के रास्ते के संबंध में हल कर रहे हैं सक्रिय परीक्षण योजना।
    पूर्ण फ़ाइल नाम भी समर्थित हैं, लेकिन पर ध्यान दें कि रिमोट मोड में काम करने की संभावना नहीं है, जब तक कि दूरस्थ सर्वर की निर्देशिका निर्देशिका समान न हो। यदि एक ही भौतिक फ़ाइल दो अलग-अलग तरीकों से संदर्भित है - उदा। csvdata.txt और ./csvdata.txt - तब ये>> विभिन्न फ़ाइलों के रूप में माना जाता है। यदि ओएस ऊपरी और निचले मामले के बीच अंतर नहीं करता है, तो csvData.TXT भी अलग से खोला जाएगा।
    उदहारण के लिए:


    आप एक परीक्षा योजना चर उस फ़ोल्डर के साथ पैरामीटर मान प्राप्त करता csv डेटा फ़ाइलों से युक्त घोषणा कर सकते हैं

    csv.path | ${__P(csv.path, ${__property(user.dir)}${__BeanShell(File.separator,)})}

    CSV Data Set Config 
    Filename = ${csv.path}${__P(users-list,)} 
    

    कंसोल से निर्धारित करना: वितरित परीक्षण सेटअप के लिए

    -Jcsv.path=/full/path/to/csv/data/dir/

    स्थापना:

    -Gcsv.path=/full/path/to/csv/data/dir/
+0

आपके विस्तृत उत्तर सहयोगियों के लिए धन्यवाद। GUI के माध्यम से "डीबग" में चलते समय यह कैसे काम करता है? –

+0

प्रलेखन संदर्भों के लिए धन्यवाद। मैं उलझन में था क्योंकि लॉग आउटपुट का तात्पर्य है कि जेएमटर होम पथ का इस्तेमाल किया गया था; हालांकि, यदि जेएमएक्स-रिश्तेदार पथ सही है तो यह काम करेगा। –

3

मेरे विशेष मुद्दा था मेरी रिश्तेदार शामिल है कि नियंत्रक पथ एक बैकस्लैश जो तोड़ दिया शामिल लिनक्स और ओएसएक्स पर।

समाधान सापेक्ष पथों में एक आगे स्लैश का उपयोग करना था, जो सभी प्लेटफार्मों पर काम करता है।

+1

इसके लिए धन्यवाद। जेएमटर स्क्रिप्ट के अंदर आप सभी पथों को सेट करने के लिए $ {__ बीनशेल (फ़ाइल.सेपरेटर,)} का भी उपयोग कर सकते हैं - इससे वे प्लेटफार्म-स्वतंत्र भी बन जाएंगे। –

+0

@AliesBelik - मैं इसे ध्यान में रखूंगा, हालांकि इस मामले के लिए नियंत्रक शामिल चर (आपके उत्तर के अनुसार) का समर्थन नहीं करता है। –

+0

वास्तव में इन आदेशों का क्या अर्थ है? $ {__ बीनशेल (Name_Of_BeanShell_Script)}। मेरे पास जेएमटरप्रोजेक्ट के अंदर एक बीन्सहेल स्क्रिप्ट है और मैं अनुरोध भेजने से पहले केवल इसमें से एक का उपयोग करना चाहता हूं। क्या मुझे बीनशेल प्रीप्रोसेसर कमांड के अंदर उपयोग करना चाहिए: $ {__ बीनशेल (Name_of_my_script)} ?? –

8

"वर्तमान स्क्रिप्ट का पूर्ण भौतिक पथ" कहकर, मैं अनुमान लगा रहा हूं कि ओपी उस स्थान का जिक्र कर रहा है जहां testplan (jmx फ़ाइल) से लोड किया गया है। मुझे रन की शुरुआत में बीनशेल स्क्रिप्ट से सीएसवी फ़ाइल उत्पन्न करने के लिए बिल्कुल इसकी आवश्यकता थी, जिसे बाद में पढ़ने के लिए एक CSV डेटा सेट कॉन्फ़िगर में उपयोग किया जाता था, इसलिए मैं चाहता था कि स्क्रिप्ट काम करे, जैसे कोई पथ नहीं है जब बाद में काम करता है निर्दिष्ट। मैं JMeter स्रोत के माध्यम से चला गया और यह काम कर समाधान नहीं मिला:

import org.apache.jmeter.services.FileServer; 
log.info(FileServer.getFileServer().getBaseDir()); 

मैं इस परीक्षण किया है और jmeter.log में सही पथ को देखा।

18

मैंने haridsv द्वारा प्रदान किए गए उत्तर का उपयोग किया। यह महान काम करता है सिवाय इसके कि मुझे निर्देशिका को जेएमएक्स फ़ाइल में एक चर में रखना होगा। मैं एक "उपयोगकर्ता निर्धारित मान" घटक बना दिया है और इस तरह चर के "मूल्य" क्षेत्र में BeanShell प्रयोग किया है:

${__BeanShell(import org.apache.jmeter.services.FileServer; FileServer.getFileServer().getBaseDir();)}${__BeanShell(File.separator,)} 

पहले BeanShell अनुभाग जावा वर्ग है कि प्रश्न में निर्देशिका हो जाता है कहते हैं। दूसरा पथ के लिए एक फ़ाइल विभाजक संलग्न करता है, जो निश्चित रूप से वैकल्पिक है।

+1

यह गुई, गैर-गुई और कॉन्फ़िगरेशन या पैरामीटर के साथ गड़बड़ किए बिना सभी घटकों के साथ काम करता है – KCD

+0

बस रिकॉर्ड के लिए: इस समाधान का प्रभाव, (कम से कम 3.2 के लिए मैंने परीक्षण किया), यह है कि किसी कारण से कोई नहीं है रिपोर्ट फ़ाइलों के लिए अधिक ओवरराइट चेतावनी (परिशिष्ट स्वचालित रूप से किया जाता है) –

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