2010-06-23 52 views
5

我想用領域而不是名稱QTP,獲得QC場按標籤

目前的標籤,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

你爲什麼要這麼做?你今天爲什麼不能使用這個名字? – 2010-06-25 21:29:28

+0

嗨,亞歷克斯。好問題。原因是我們使用了很多自定義字段,測試人員/開發人員很難用「RN_USER_03」這樣的名稱來實現和維護測試,所以很容易混淆,犯錯誤,而且很難閱讀代碼。標籤不會經常更改,這就是爲什麼我們想要使用標籤。 – 2010-07-05 19:49:57

+1

難道你不能像使用有意義的名稱一樣容易地將字段名稱分配給常量嗎? 'const DATA_ROWS_PASSED =「RN_USER_03」currentRun.Field(DATA_ROWS_PASSED)= 4' – 2010-07-06 13:17:37

回答

1

難不成所有標籤是唯一的(我懷疑..):

您可以創建它接受標籤的功能,在QC的表搜索定義正確的字段定義自定義的字段,並返回字段名稱。然後使用函數的結果值作爲索引屬性的索引。

假設功能將被稱爲「GetNameOfLabel」,然後在主叫方的代碼看起來像:

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

當然,該功能不會真的是微不足道的,但在該QC數據一些挖後很容易模型,並找到一種通過SQL從數據庫中獲取名稱的有效方法。

或者功能可以查找名稱在數組或字典,那麼你就必須維持該字典,但你不必去到數據庫中的每個查詢。

Disadventages:

  • 腳本用錯誤的標籤可能會難以進行調試
  • 如果標籤不是唯一的,它可能是真正的「好玩」來調試

如果仰視在DB上:

  • 如果您沒有爲這些查找緩存或預加載SQL查詢結果,所有腳本速度都會下降;
  • 複雜,因爲你必須做正確的SQL查詢,你依賴於一個非常特殊的方式QC的數據模型(通常當你升級的恐怖)

如果陣列仰視,或詞典:

  • 你要麼必須保持其初始化(BET其他管理球員加入卡斯特場都會忘記,很容易),或者必須「裝載」從QC的表(這是一個有點像SQL解決方案上面,並具有相同的缺點)。

我會去與數組/字典初始化從數據庫的想法。或者,如果您可以接受已經提出的恆定想法,那麼這是一個很好的選擇。考慮到在QC定製腳本中不存在與會話無關的範圍,SQL訪問想法可能會真正地影響性能,因爲它必須針對每個新用戶會話執行。這也是爲什麼我也爲此堅持不懈的想法。

+1

@Jonas:請偶爾讓我們知道您實際使用了哪些選項,以及您與他們的經歷是什麼。 – TheBlastOne 2010-11-25 08:53:22

+1

更好的遲到答覆比從來沒有:)我們結束了包裝功能的一切。所以「currentRun.Field(」RN_USER_03「)= 1」被包裝成「update_data_rows_passed(rows_passed)」之類的東西。所有功能都放在我們的核心庫中,並且始終包含在所有測試中。所以大多數測試工程師只會接觸到這些功能,而只有核心團隊纔會更新這些功能,而一旦我們寫了這些功能,他們幾乎不會改變。這是一個解決我們問題的簡單方法,並且效果很好。感謝您的關注。 – 2011-10-06 07:05:46

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 

也許你應該想添加一些更多的錯誤處理,這樣我們考慮到標籤中沒有找到的情況。