2010-06-23 11 views
5

voglio aggiornare un campo utente personalizzato in QC utilizzando l'etichetta di campo al posto del nomeQTP, l'accesso al campo di controllo di qualità per etichetta

Al momento stiamo facendo in questo modo

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

ma vorrei farlo in questo modo

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

ma io non riesco a trovare il metodo per farlo con. Qualche idea?

+1

Perché vorresti farlo? Perché non puoi usare il nome come fai oggi? –

+0

Ciao Alex. Buona domanda. Il motivo è che usiamo molti campi personalizzati e sarà difficile per i tester/sviluppatori implementare e mantenere i test con nomi come "RN_USER_03", sarà molto facile confondersi e fare misstakes, e molto difficile leggere il codice. Le etichette non cambieranno molto spesso e questo è il motivo per cui vogliamo invece utilizzare le etichette. –

+1

Non potresti facilmente assegnare il nome del campo a una costante con un nome significativo? 'const DATA_ROWS_PASSED =" RN_USER_03 "currentRun.Field (DATA_ROWS_PASSED) = 4' –

risposta

1

Implicando tutte le etichette sono unici (che dubito ..):

è possibile creare una funzione che accetta un'etichetta, le ricerche nelle tabelle di controllo di qualità che definiscono i campi personalizzati per la definizione campo corretto, e restituisce il nome del campo . Quindi utilizzare il valore del risultato della funzione come indice della proprietà indicizzata.

supporre che la funzione sarebbe chiamato "GetNameOfLabel", quindi il codice del chiamante sarà simile:

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

Naturalmente, la funzione non sarebbe davvero banale, ma abbastanza facile dopo qualche scavo nei dati QC modello e trovare un modo efficiente per recuperare il nome dal DB tramite SQL.

Oppure, la funzione potrebbe cercare il nome in un array, o un dizionario, quindi si dovrebbe mantenere quel dizionario, ma non si dovrebbe andare al database per ogni ricerca.

Disadventages:

  • script con l'etichetta sbagliata potrebbe essere più difficile da eseguire il debug
  • Se le etichette non sono univoci, potrebbe essere vero e proprio "divertimento" per eseguire il debug

Se alzando lo sguardo sul DB:

  • Tutti gli script rallentano se non si memorizza nella cache o precarica i risultati di query SQL per tali ricerche;
  • complessità, come si deve fare la query SQL a destra, e si dipende da modello di dati di controllo di qualità in un modo tutto particolare (di solito un orrore quando si esegue l'aggiornamento)

Se guardando in un array, o un dizionario:

  • si sia necessario mantenere la sua inizializzazione (scommessa altri ragazzi di amministrazione aggiunta di un campo Cust dimenticheranno tanto facilmente), oppure deve "caricare" dalla tabella di QC (che è un po 'come la soluzione SQL sopra, e ha gli stessi aspetti negativi).

Vorrei andare con l'array/dizionario-inizializzato-da-db-idea. Oppure, se riesci a vivere con l'idea costante già presentata, quella è una buona scommessa. Considerando che non c'è un ambito indipendente dalla sessione in QC che personalizzi gli script, l'idea di accesso SQL potrebbe davvero uccidere le prestazioni perché dovrebbe essere eseguita per ogni nuova sessione utente. Questo è il motivo per cui anch'io ho fatto +1 sull'idea costante.

+1

@Jonas: Per favore, di tanto in tanto facci sapere quale delle opzioni hai effettivamente utilizzato e quali sono state le tue esperienze con loro. – TheBlastOne

+1

Risposta in ritardo migliore che mai :) Abbiamo finito per avvolgere tutto nelle funzioni. Quindi "currentRun.Field (" RN_USER_03 ") = 1" è stato inserito in qualcosa di simile a "update_data_rows_passed (rows_passed)". Tutte le funzioni sono state inserite nelle nostre librerie principali e sono sempre state incluse in tutti i test. Quindi la maggior parte dei tecnici di test sono stati esposti solo alle funzioni e solo il core team ha aggiornato le funzioni, e una volta che le abbiamo scritte non sono quasi mai cambiate. È stato un modo semplice per risolvere il nostro problema e ha funzionato alla grande. Grazie per l'interesse –

1

Guardate questa:

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 

Forse voi ne vuole aggiungere un po 'di più la gestione degli errori, come noi considerando il caso che l'etichetta non è stato trovato.

Problemi correlati