2010-06-23 17 views
5

मैं नामQTP, लेबल

फिलहाल के बजाय क्षेत्र के लेबल का उपयोग कर QC में एक कस्टम उपयोगकर्ता क्षेत्र को अपडेट करना चाहते द्वारा क्यूसी क्षेत्र के लिए उपयोग हम इसे इस तरह

Set currentRun = QCUtil.CurrentRun 
currentRun.Field("RN_USER_03") = 1 
currentRun.Post 

कर रहे हैं लेकिन मैं इसे इस तरह से करना चाहूंगा

Set currentRun = QCUtil.CurrentRun 
currentRun.Field("Data Rows Passed") = 4 
currentRun.Post 

लेकिन मुझे इसे करने का तरीका नहीं मिल रहा है। कोई विचार?

+1

आप ऐसा क्यों करना चाहते हैं? आप आज के नाम का उपयोग क्यों नहीं कर सकते? –

+0

हाय एलेक्स। अच्छा प्रश्न। कारण यह है कि हम कई कस्टम फ़ील्ड का उपयोग करते हैं और "आरएन_USER_03" जैसे नामों के परीक्षणों को कार्यान्वित करने और बनाए रखने के लिए टेस्टर्स/डेवलपर्स के लिए यह मुश्किल होगा, यह उलझन में होना और गलत तरीके से बनाना और कोड को पढ़ने में बहुत मुश्किल हो जाएगा। लेबल अक्सर नहीं बदलेंगे और इसलिए हम लेबल का उपयोग क्यों करना चाहते हैं। –

+1

क्या आप आसानी से फ़ील्ड नाम को सार्थक नाम के साथ स्थिर रूप से असाइन नहीं कर सके? 'स्थिरांक DATA_ROWS_PASSED =" RN_USER_03 "currentRun.Field (DATA_ROWS_PASSED) = 4' –

उत्तर

1

सभी लेबल के दावे के अंतर्गत अद्वितीय हैं (जो मुझे शक है ..):

आप एक समारोह जो एक लेबल स्वीकार करता है बना सकते हैं, खोज क्यूसी की तालिकाओं में है कि सही क्षेत्र परिभाषा के लिए अनुकूलित क्षेत्रों को परिभाषित, और क्षेत्र का नाम देता है । फिर अनुक्रमित संपत्ति के सूचकांक के रूप में फ़ंक्शन के परिणाम मान का उपयोग करें।

कि समारोह, "GetNameOfLabel" कहा जाता है मान लीजिए जाएगा तो कॉलर के कोड दिखाई देगा:

Set currentRun = QCUtil.CurrentRun 
currentRun.Field(GetNameOfLabel ("Data Rows Passed")) = 1 
currentRun.Post 

बेशक, समारोह वास्तव में तुच्छ हो नहीं होगा, लेकिन QC डेटा में कुछ खुदाई के बाद काफी आसान मॉडल और डीबी से एसक्यूएल के माध्यम से नाम लाने के लिए एक कुशल तरीका खोजना।

या, फ़ंक्शन किसी सरणी या शब्दकोश में नाम देख सकता है, तो आपको उस शब्दकोश को बनाए रखना होगा, लेकिन आपको प्रत्येक लुकअप के लिए डेटाबेस पर जाना नहीं होगा।

Disadventages: गलत लेबल के साथ

  • स्क्रिप्ट कठिन हो सकता है
  • डिबग जा करने के लिए लेबल अद्वितीय नहीं हैं, तो यह

डिबग करने के लिए असली "मजा" हो सकता है को देख डीबी पर:

  • यदि आप कैश नहीं करते हैं, या प्री-लोड, उन लुकअप के लिए SQL क्वेरी परिणाम नहीं करते हैं तो सभी स्क्रिप्ट धीमी हो जाती हैं;
  • जटिलता, आप सही SQL क्वेरी क्या करना है, और आप एक काफी अजीब तरह से QC के डेटा मॉडल पर निर्भर करते हैं (आमतौर पर एक हॉरर जब आप अपग्रेड कर रहे हैं)

तो एक सरणी में देख के रूप में, या शब्दकोश:

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

मैं सरणी/शब्दकोश-प्रारंभिक-से-डीबी-विचार के साथ जाऊंगा। या, यदि आप पहले से प्रस्तुत निरंतर विचार के साथ रह सकते हैं, तो यह एक अच्छी शर्त है। यह देखते हुए कि क्यूसी अनुकूलित स्क्रिप्ट में कोई सत्र-स्वतंत्र दायरा नहीं है, एसक्यूएल एक्सेस विचार वास्तव में प्रदर्शन को मार सकता है क्योंकि इसे हर नए उपयोगकर्ता सत्र के लिए निष्पादित करना होगा। यही कारण है कि मैंने भी निरंतर विचार को +1 किया।इस पर

+1

@ जोनास: कृपया, कभी-कभी हमें बताएं कि आपने वास्तव में किस विकल्प का उपयोग किया था, और उनके साथ आपके अनुभव क्या थे। – TheBlastOne

+1

कभी भी देर से उत्तर नहीं दिया :) हम कार्यों में सब कुछ लपेटकर समाप्त हो गए। तो "currentRun.Field (" RN_USER_03 ") = 1" कुछ की तरह लपेटा गया था, "update_data_rows_passed (rows_passed)"। सभी कार्यों को हमारे मूल पुस्तकालयों में रखा गया था और हमेशा सभी परीक्षणों में शामिल किया गया था। इसलिए अधिकांश परीक्षण इंजीनियरों को केवल कार्यों के संपर्क में लाया गया था और केवल कोर टीम ने कार्यों को अद्यतन किया था, और एक बार जब हमने उन्हें लिखा तो वे शायद ही कभी बदल गए। यह हमारी समस्या को हल करने का एक आसान तरीका था और यह बहुत अच्छा काम करता था। ब्याज के लिए धन्यवाद। –

1

देखो:

Dim gFieldLabelToNameDICT: Set gFieldLabelToNameDICT = CreateObject("Scripting.Dictionary") 
gFieldLabelToNameDICT.CompareMode = vbTextCompare 

Function GetNameOfLabel (strFieldLabel) 
    ' If it doesn't exist yet in fieldLabelToName dict -> search it using TDC and add it to the list to improve performance 
    If Not gFieldLabelToNameDICT.Exists(strFieldLabel) Then 
     Dim testSetFields As List 

     Dim testSetFields: Set testSetFields = QCUtil.QCConnection.Customization.Fields.Fields("RUN") 
     For Each aField in testSetFields 
      If aField.UserLabel = strFieldLabel Then 
       gFieldLabelToNameDICT.Item(strFieldLabel) = aField.ColumnName 
      End If 
     Next aField 
    End If 

    GetNameOfLabel = gFieldLabelToNameDICT.Item(strFieldLabel) 
End Function 

हो सकता है कि आप कुछ और त्रुटि हैंडलिंग जोड़ने के लिए, इस तरह के मामले में हमें उस लेबल नहीं मिला है पर विचार चाहते हैं जाएगा।