2010-06-23 9 views
5

Quiero actualizar un campo de usuario personalizada en el control de calidad utilizando la etiqueta de campo en lugar del nombreQTP, acceso a campo de control de calidad por el sello

En el momento en que lo están haciendo de esta manera

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

Pero me gustaría hacerlo de esta manera

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

Pero no puedo encontrar el método para hacerlo. ¿Alguna idea?

+1

¿Por qué querrías hacer eso? ¿Por qué no puedes usar el nombre como lo haces hoy? –

+0

Hola Alex. Buena pregunta. La razón es que utilizamos muchos campos personalizados y será difícil para los evaluadores/desarrolladores implementar y mantener las pruebas con nombres como "RN_USER_03", será muy fácil confundirse y hacer errores, y muy difícil de leer el código. Las etiquetas no cambiarán muy a menudo y es por eso que queremos usar etiquetas en su lugar. –

+1

¿No podría simplemente asignar el nombre del campo a una constante con un nombre significativo? 'const DATA_ROWS_PASSED =" RN_USER_03 "currentRun.Field (DATA_ROWS_PASSED) = 4' –

Respuesta

1

Dando a entender todas las etiquetas son únicas (que lo dudo ..):

Se puede crear una función que acepta una etiqueta, búsquedas en las tablas de control de calidad que definen campos personalizados para la definición de campo correcto, y devuelve el nombre del campo . Luego use el valor del resultado de la función como el índice de la propiedad indexada.

suponer que la función se llamaría "GetNameOfLabel", luego el código del interlocutor se vería así:

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

Por supuesto, la función sería en realidad no ser trivial, pero es bastante fácil después de algo de investigación en los datos de control de calidad modelar y encontrar una forma eficiente de obtener el nombre de la base de datos a través de SQL.

O bien, la función podría buscar el nombre en una matriz o en un diccionario, entonces tendría que mantener ese diccionario, pero no tendría que ir a la base de datos para cada búsqueda.

Disadventages:

  • secuencias de comandos con la etiqueta equivocada podrían ser más difíciles de ser depurar
  • Si las etiquetas no son únicos, que podría ser real "diversión" para depurar

Si mirando hacia arriba en la base de datos:

  • Todos los scripts se ralentizan si no almacena en caché o carga los resultados de la consulta SQL para esas búsquedas;
  • complejidad, ya que tiene que hacer la consulta SQL derecha, y del que depende el modelo de datos de control de calidad de una manera bastante peculiar (por lo general un horror cuando va a actualizar)

Si mirando hacia arriba en una matriz, o diccionario:

  • o se debe mantener su inicialización (apuesta de otros tipos de administración añadiendo un campo Cust olvidarán tan fácilmente), o debe "carga" que de la mesa de control de calidad (que es un poco como la solución SQL anterior, y tiene los mismos inconvenientes).

Iré con la matriz/dictionary-initialized-from-db-idea. O, si puedes vivir con la idea constante ya presentada, esa es una buena apuesta. Teniendo en cuenta que no existe un alcance independiente de la sesión en los sistemas de control de calidad que personalizan las secuencias de comandos, la idea de acceso a SQL realmente podría matar el rendimiento, ya que tendría que ejecutarse para cada nueva sesión de usuario. Por eso yo también hice +1 la idea constante.

+1

@Jonas: Por favor, de vez en cuando déjenos saber qué opciones usó realmente y cuáles fueron sus experiencias con ellas. – TheBlastOne

+1

Mejor respuesta tardía que nunca :) Terminamos envolviendo todo en funciones. Así que "currentRun.Field (" RN_USER_03 ") = 1" estaba envuelto en algo así como, "update_data_rows_passed (rows_passed)". Todas las funciones se colocaron en nuestras bibliotecas principales y siempre se incluyeron en todas las pruebas. Así que la mayoría de los ingenieros de prueba solo estuvieron expuestos a las funciones y solo el equipo central actualizó las funciones, y una vez que las escribimos casi nunca cambiaban. Fue una manera fácil de resolver nuestro problema y funcionó de maravilla. Gracias por el interés. –

1

vistazo a esto:

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 

Tal vez se desee añadir un poco más de control de errores, tales nosotros teniendo en cuenta el caso de que la etiqueta no se encuentra.

Cuestiones relacionadas