TestStand incluye numerosos tipos de pasos integrados que actúan como bloques de construcción para las secuencias de prueba. Además de los tipos de pasos integrados, TestStand permite a los usuarios crear tipos de pasos personalizados para implementar funcionalidades adicionales.
Los tipos de pasos personalizados permiten a los usuarios ampliar los pasos existentes de las siguientes maneras:
Un tipo de paso bien diseñado puede acelerar el desarrollo de la secuencia, puede reducir los esfuerzos de depuración, puede permitir a los desarrolladores compartir código estandarizado y puede lograr consistencia entre múltiples estaciones de prueba y grupos separados. Sin embargo, los tipos de pasos personalizados pueden requerir bastante tiempo para planificar, programar, depurar, implementar y mantener.
Antes de leer este artículo, asegúrese de estar familiarizado con el proceso de creación de un tipo de paso personalizado. Consulte el tutorial Creación de un tipo de paso personalizado de forma de onda para obtener más información sobre este proceso.
Antes de comenzar a diseñar un tipo de paso personalizado, debe tener en cuenta otros enfoques que pueden ser más adecuados para una nueva funcionalidad.
No se recomienda crear o modificar un tipo de paso personalizado en los siguientes casos:
Crear o modificar un tipo de paso en las siguientes situaciones:
Puede crear plantillas de pasos mediante el desarrollo o la configuración de pasos en una secuencia, seguida del arrastre y la colocación de esos pasos en la Lista de plantillas [Templates List] de la Paleta de inserción [Insertion Palette]. TestStand almacena una copia de la instancia de paso como una plantilla que puede reutilizar para crear nuevas secuencias con rapidez al arrastrar y soltar la plantilla de pasos en una secuencia nueva.
La diferencia entre una plantilla de pasos y un tipo de paso personalizado es que puede crear una plantilla solo a partir de los tipos de paso existentes y la plantilla incluye solo las mismas capacidades del tipo de paso original. No puede modificar ni rediseñar la plantilla de pasos en la medida en que puede hacerlo un tipo de paso personalizado. En el caso de los pasos que se añaden a la lista de plantillas, solo puede configurar los ajustes habilitados por el desarrollador del tipo de paso original. Por el contrario, puede usar un tipo de paso personalizado nuevo para crear un paso completamente nuevo con un comportamiento completamente nuevo. Además, los cambios en una plantilla de pasos afectan solo a las instancias futuras del paso y no cambian las instancias existentes de ese paso.
Una de las ventajas de utilizar una plantilla de pasos es que se evita la personalización de la configuración de los pasos más de una vez si se reutiliza el mismo paso de la misma manera. Por ejemplo, si configura una fuente de alimentación IVI a 5 V y, a continuación, a 3.3 V y planea hacerlo muchas veces durante toda la secuencia, crear plantillas de dos pasos después de usar y configurar los pasos inicialmente puede ahorrar tiempo. Sin embargo, si necesita un paso que primero configure la fuente de alimentación antes de ejecutar el código de prueba, la creación de un tipo de paso personalizado es la mejor opción.
Plantillas de pasos | Tipos de paso personalizados |
|
|
Cuando diseñe tipos de pasos personalizados, tenga en cuenta los roles independientes del desarrollador de marcos de trabajo y del desarrollador de pruebas. El rol del desarrollador de marcos de trabajo es desarrollar herramientas y bloques de construcción, mientras que el rol del desarrollador de pruebas es usar estas herramientas para implementar el código de prueba real.
Al diseñar un tipo de paso personalizado, asume el rol de desarrollador de marcos de trabajo y es importante tener en cuenta la funcionalidad del tipo de paso que desarrolla en términos de los usuarios finales, los desarrolladores de pruebas.
Utilice estas pautas al determinar los requisitos para el tipo de paso personalizado:
Los tipos de pasos personalizados almacenan datos en varias propiedades y configuraciones que puede usar para configurar el comportamiento de las instancias del tipo de paso y administrar los datos necesarios para la funcionalidad del tipo de paso. Estos incluyen:
Existen propiedades de tipo de paso integradas para todos los tipos de paso, y el usuario no puede realizar cambios en esta configuración en instancias del tipo de paso. Además, todos los cambios que realice en los valores de estas propiedades se propagarán a cualquier instancia del tipo de paso.
Ejemplo: Todos los tipos de pasos definen una expresión de descripción que se muestra en el panel Pasos [Steps] junto a las instancias del paso. Esta propiedad está presente para todos los tipos de pasos, pero el valor se establece para cada tipo de paso. El valor no se puede modificar en instancias del tipo de paso.
Para acceder a las propiedades integradas de un tipo de paso:
Cuadro de diálogo Propiedades de tipo de paso [Step Type Properties]
La mayoría de las configuraciones de este cuadro de diálogo son valores predeterminados, que se describen en la siguiente sección. Las propiedades integradas incluyen:
Dado que la descripción no es configurable en instancias de pasos, puede definirla como un desarrollador de tipo de paso para ayudar a los usuarios a crear pasos de autodocumentación. El campo de descripción se especifica mediante una expresión que le permite crear descripciones dinámicas que muestran propiedades de paso importantes. Cuando el usuario realiza cambios en estos valores de propiedad en instancias del tipo de paso, la descripción se actualizará y permitirá al usuario ver rápidamente el estado del paso sin navegar al panel de configuración del paso.
Ejemplo: La descripción del paso en el segundo paso de la siguiente imagen es más descriptiva y proporciona una mejor documentación. Esta descripción usa la siguiente expresión para definir la descripción:
"Calibrate Channels: " + Str(Step.minChannel) + " - " +Str(Step.maxChannel)
Esta expresión configura la descripción para que se actualice de forma dinámica si el usuario configura las propiedades de paso minChannel y maxChannel.
Ejemplos de descripciones de pasos
Al desarrollar un tipo de paso, puede configurar valores predeterminados para todas las configuraciones de paso configurables por el usuario. Además, puede configurar estas propiedades para que se deshabiliten en instancias de pasos y los valores predeterminados que establezca no puedan modificarse. Al igual que las propiedades integradas, los valores predeterminados se definen en la ventana de propiedades del paso. Sin embargo, todos los valores predeterminados contienen la palabra “predeterminado” [“default”], ya sea en el nombre de la configuración o en la pestaña de configuración donde están configurados.
Ejemplo: La propiedad de expresión de estado se usa para determinar el resultado del paso. Esta propiedad está presente en todos los tipos de pasos, pero el valor predeterminado se establece en cada tipo de paso. En algunos tipos de pasos, como la Prueba de límite numérico [Numeric Limit Test], la expresión de estado se deshabilita en el tipo de paso para que no se pueda editar en pasos de prueba de límite numérico individuales.
Al diseñar un tipo de paso personalizado, puede deshabilitar las propiedades que no variarán entre instancias del tipo de paso. Esto le proporcionará más control sobre cómo los usuarios del tipo de paso pueden modificar el comportamiento. Sin embargo, impedir que los usuarios editen los ajustes de los pasos puede limitar la flexibilidad, por lo que solo debe deshabilitar los ajustes que esté seguro de que un usuario nunca tendrá que modificar.
Tenga en cuenta que cualquier cambio futuro que realice en los valores predeterminados de las propiedades de paso, incluso si desactiva la edición en instancias de pasos, no se propagará a instancias del tipo de paso. Consulte Actualizar y mantener los tipos de pasos para obtener más información sobre cómo mitigar este problema.
No debe usar los valores de estas propiedades para definir ninguna funcionalidad del tipo de paso que deba actualizar el desarrollador del tipo de paso. Por ejemplo, no use la expresión Post del paso para implementar la funcionalidad específica del tipo de paso. Si necesita actualizar esta funcionalidad en una versión futura del tipo de paso, no habrá forma de garantizar que se actualicen todas las instancias del paso. En su lugar, implemente la funcionalidad en un subpaso previo o posterior al paso.
Además de las propiedades integradas, puede definir propiedades personalizadas específicas para el tipo de paso. Utilice estas propiedades para almacenar datos específicamente relacionados con la funcionalidad del tipo de paso.
Ejemplo: Los pasos de prueba de límite numérico contienen una propiedad Limits.High, que es exclusiva del tipo de paso Límite numérico. El tipo define un valor predeterminado de 11 para esta propiedad, y el usuario puede modificar el valor para cada instancia que cree.
Para crear propiedades de paso personalizadas, siga los pasos siguientes:
Si define una propiedad en el contenedor de resultados del tipo de paso, la propiedad se incluirá en la recopilación de resultados. A continuación, puede utilizar los indicadores IncludeInReport o IncludeInDatabase para registrar los datos en un informe o base de datos.
De forma predeterminada, los usuarios pueden cambiar los valores de propiedad de paso en cada instancia de paso. Sin embargo, si establece el indicador compartido para una propiedad de paso en el tipo de paso, el valor se bloqueará en el valor del tipo de paso. A diferencia de los valores predeterminados de los pasos, las actualizaciones del valor se propagarán a instancias del tipo de paso.
Los tipos de datos que elija para las propiedades de paso deben estar determinados por el alcance del tipo de paso. Por ejemplo, considere la prueba de límite numérico y los pasos de la prueba de límite numérico múltiple. Si bien la prueba de límite numérico múltiple puede acomodar límites adicionales y tiene más capacidad, también introduce complejidad en la interfaz de usuario de tiempo de edición y el registro de resultados. La prueba de límite numérico más básica tiene un alcance más pequeño y una interfaz mucho más simple. Además de requerir menos trabajo de desarrollo, los pasos con un alcance más pequeño también son más fáciles de usar para los desarrolladores de secuencias de prueba.
Al desarrollar sus propios tipos de pasos personalizados, es importante definir el alcance del paso antes de definir propiedades personalizadas, ya que las propiedades que elija tienen un impacto significativo en la complejidad del tipo de paso.
Las siguientes secciones describen cómo puede usar los subpasos para implementar los siguientes comportamientos de tipo de paso:
Los subpasos llaman a los módulos de código mediante uno de los adaptadores de TestStand proporcionados. Los subpasos no se pueden modificar en instancias del paso, y todos los cambios en la configuración del subpaso se propagarán a instancias del tipo de paso.
Para agregar subpasos a un tipo de paso personalizado, haga lo siguiente:
Publicación y edición de subpasos del tipo de paso de prueba de límite numérico múltiple
Puede definir la funcionalidad de tiempo de ejecución para el tipo de paso mediante subpasos anteriores y posteriores al paso. Estos pasos se ejecutan antes o después del módulo de código principal cuando se ejecuta el paso.
Ejemplo: El tipo de paso de mensaje emergente utiliza un módulo de código C para crear y mostrar el cuadro de mensaje en tiempo de ejecución. A este módulo se le llama en un subpaso posterior al paso.
Orden de ejecución de pasos: subpasos
Utilice estos subpasos para definir la funcionalidad que se aplica a todas las instancias del paso. A menudo, los subpasos requerirán datos específicos relacionados con el comportamiento del tipo de paso. Defina estos datos en las propiedades de paso personalizadas para asegurarse de que estén disponibles en todas las instancias del paso.
Si existe más de un subpaso previo o posterior, se ejecutan en el orden en el que aparecen en la pestaña Subpaso [Substep] del cuadro de diálogo Propiedad de tipo de paso [Step Type Property].
De forma predeterminada, los desarrolladores de pruebas pueden especificar un módulo de código para cada instancia del tipo de paso. Si el tipo de paso no requiere un módulo de código, debe deshabilitar la opción “Especificar módulo” [“Specify Module”] en la pestaña Deshabilitar propiedades [Disable Properties] para la configuración del tipo de paso. Muchos tipos de pasos integrados están diseñados de esta manera, como los pasos emergentes de declaración y de mensaje.
TestStand espera a que se ejecute el código en los subpasos previos y posteriores al paso antes de continuar. Si los módulos de código para esos pasos funcionan lenta o silenciosamente, es posible que parezca que TestStand no responde. Para solucionar esto, puede cambiar el cursor o usar mensajes de la interfaz de usuario, como UIMsg_ProgressPercent, para actualizar la barra de progreso en la barra de estado.
Consulte Actualizar la barra de estado mediante mensajes de la interfaz de usuario para obtener más información sobre este enfoque.
Los módulos de código que desarrolle deben incluir y sondear periódicamente un monitor de terminación para manejar correctamente el momento en el que los usuarios finalizan o cancelan la ejecución de la secuencia mediante las opciones integradas en TestStand o en la API de TestStand. Al usar el monitor de terminación, puede terminar rápidamente el subpaso si el usuario finaliza la ejecución de la secuencia.
Consulte el Ejemplo del monitor de terminación para obtener más información sobre la implementación del monitor de terminación en el código.
Implemente el módulo de código para las operaciones básicas inherentes al tipo de paso como un subpaso previo o posterior en lugar de como un módulo predeterminado. Utilice la configuración predeterminada del módulo solo cuando cada una de las instancias de un paso pueda llamar a un módulo de código diferente. La configuración predeterminada del módulo existe por separado en cada instancia de pasos y TestStand no actualiza las instancias de paso existentes de forma predeterminada cuando cambia la configuración en el tipo de paso. Sin embargo, los cambios en los subpasos afectan automáticamente a todas las instancias existentes del tipo de paso.
Los subpasos de edición proporcionan una interfaz gráfica de usuario (GUI), implementada en un módulo de código, en la que el usuario puede modificar las variables o la configuración de esa instancia de paso en el momento de la edición. Normalmente, el subpaso Editar se usa para configurar las propiedades de paso personalizadas que se definen para el tipo de paso.
Ejemplo: El tipo de paso Abrir base de datos [Open Database] proporciona un cuadro de diálogo a través de un subpaso de edición para permitir a los usuarios configurar las propiedades de paso ConnectionString y DatabaseHandle, que son propiedades personalizadas para el tipo de paso de base de datos.
El subpaso de edición proporciona una interfaz de usuario para configurar los ajustes de los pasos
Cuando el usuario crea una instancia de un tipo de paso personalizado, puede acceder a la interfaz de usuario del subpaso de edición mediante un botón en el panel de configuración de pasos, que inicia la interfaz de usuario del subpaso de edición en una nueva ventana. Sin embargo, también puede integrar la interfaz de usuario del subpaso de edición directamente en la pestaña, como muchos tipos de pasos incorporados. Este enfoque requiere un esfuerzo de desarrollo adicional y debe desarrollarse en un lenguaje .NET, pero proporciona una interfaz de edición perfecta para el usuario del tipo de paso. Consulte Creación de pestañas de edición del tipo de paso personalizado en el editor de secuencias para obtener más información sobre cómo implementar interfaces de subpaso de edición incorporadas.
Comparación entre una interfaz de edición incorporada (arriba) y un subpaso de edición, que se inicia en una ventana separada (abajo)
Un tipo de paso personalizado puede definir muchas propiedades que pueden ser confusas si el usuario las visualiza todas a la vez. Cuando use el enfoque típico de los subpasos de edición que se inician en una ventana independiente, utilice métodos organizativos en un solo subpaso de edición, como la introducción de pestañas, para organizar los datos en secciones manejables. No se recomienda el uso de varios subpasos de edición porque cada interfaz debe iniciarse por separado. Por ejemplo, el paso Abrir declaración SQL [Open SQL Statement] implementa un solo subpaso de edición con múltiples pestañas.
El subpaso Editar [Edit] para el paso Abrir declaración SQL [Open SQL Statement] contiene dos pestañas para clasificar la configuración
Si utiliza el enfoque de panel de pasos incorporado para tipos de pasos complejos, resulta ventajoso usar múltiples paneles de edición, ya que los datos serán fácilmente visibles en las pestañas de pasos. Por ejemplo, el paso Prueba de límite numérico múltiple [Multiple Numeric Limit Test] incluye dos pestañas para editar la fuente de los datos numéricos y las condiciones de los límites para cada fuente de datos.
Las pestañas Límite [Limit] y Fuente de datos [Data source] están implementadas en un panel de edición independiente
Haga que subpasos de edición y otros módulos de código de interfaz de usuario sean siempre modales para TestStand, porque, cuando TestStand llama a los subpasos de edición, deshabilita el editor de secuencias. Si los módulos de código no son modales, la ventana de TestStand puede ocultar los módulos de código. Los usuarios podrían pensar que el editor de secuencias está bloqueado y pueden intentar cerrar TestStand.
Consulte el ejemplo Hacer que los cuadros de diálogo sean modales para TestStand para obtener más información sobre cómo implementar la modalidad en un módulo de subpasos.
El uso de campos de expresión en una interfaz de usuario de subpasos de edición es una forma flexible para que los usuarios interactúen con los datos y les permite usar variables y lógica en los valores de propiedad. Sin embargo, trabajar con el control de expresión puede requerir una inversión mayor que trabajar con controles de cadena o numéricos, y requiere una verificación adicional para garantizar que la expresión se evalúe como un valor válido para la propiedad.
Las expresiones son más flexibles que los valores fijos para especificar configuraciones
En muchos casos, es posible que desee definir la funcionalidad que tiene lugar cuando un desarrollador de pruebas crea una nueva instancia de un paso. Por ejemplo, el tipo de paso If integrado utiliza un subpaso OnNewStep para insertar un paso End coincidente.
Para implementar este tipo de funcionalidad, cree un subpaso de edición y cambie el nombre del subpaso a “OnNewStep”. Estos subpasos suelen utilizar la API de TestStand para manipular la instancia de paso o crear instancias de pasos adicionales.
Al igual que con un módulo de código estándar, hay dos métodos para proporcionar datos de TestStand a un subpaso. Puede pasar datos a través de los parámetros del módulo de código. O bien, puede llamar a la API de TestStand desde el módulo de código para acceder directamente y cambiar las propiedades. Los subpasos previos y posteriores al paso generalmente solo necesitan leer las propiedades de los pasos para determinar su comportamiento. Por ejemplo, el valor de temperatura para configurar una cámara térmica. Sin embargo, los subpasos de edición necesitan que se muestre el estado actual de las propiedades en la IU inicial, pero también necesitan una forma de actualizar cualquier valor que el usuario modifique.
En la mayoría de los casos, lo más conveniente es usar parámetros para pasar datos en lugar de usar la API de TestStand para acceder a ellos directamente. El uso de parámetros es menos propenso a errores: cualquier error en los nombres de propiedades o tipos de datos será fácil de encontrar, ya que las propiedades se definen en la configuración de tipo de paso en TestStand, no directamente en el módulo de código. Además, tener todas las propiedades definidas en la configuración del paso hace que el tipo de paso sea más fácil de mantener. Cualquier cambio en las propiedades del paso puede lograrse sin modificaciones en el módulo de código.
Sin embargo, usar la API para acceder directamente a las propiedades puede ser útil en los casos en que el módulo de código accede a una variedad de datos de forma dinámica, en función del estado del paso. El uso de parámetros de pasos en este caso puede llevar a una larga lista de parámetros donde solo algunos se usan en diversas condiciones.
El módulo Adaptador lee o escribe variables de paso para las entradas y salidas de los módulos de código y comprueba errores
Acceder a las propiedades de los pasos desde LabVIEW mediante la API de TestStand no proporciona verificación de errores de parámetros en el momento de la edición
Al desarrollar y probar módulos de código para subpasos de un tipo de paso personalizado, tenga en cuenta que TestStand carga y reserva el módulo de código en la memoria cuando se ejecuta el subpaso. Esto mejora el rendimiento, ya que el módulo permanece cargado para ejecuciones posteriores, pero no puede editar el módulo de código hasta que TestStand lo descargue. Puede descargar el módulo de código de una de estas dos maneras:
Es importante plantearse cómo almacenar y distribuir los pasos personalizados que se crean. NI recomienda crear todos los tipos de pasos en un archivo de paleta de tipos, no dentro de un archivo de secuencia, porque TestStand busca actualizaciones de los archivos de paleta de tipos para el tipo de paso cuando carga un archivo de secuencia. TestStand también le ayuda a administrar la reutilización de pasos al guardar una copia de cada tipo de paso utilizado dentro de un archivo de secuencia. Si implementa el archivo de secuencia sin el archivo de paleta de tipos, el archivo de secuencia aún contiene una copia del tipo de paso.
Como desarrollador de marcos de trabajo, es habitual que varios desarrolladores de pruebas utilicen sus tipos de pasos. Esto puede ser un reto, ya que los tipos de pasos tienen muchos archivos asociados. Para ayudar a administrar los archivos de tipo de paso, utilice los siguientes directorios para almacenar los archivos de su tipo de paso:
Al usar estos directorios, puede distribuir los archivos requeridos al directorio público de TestStand en cualquier sistema del desarrollador de pruebas. Si ha definido el tipo en un archivo de paleta de tipos nuevo, puede configurar TestStand para importar automáticamente la paleta de tipos añadiendo un prefijo “Install_” al nombre del archivo de paleta de tipos. Consulte el tema de ayuda Archivos de paleta de tipos para obtener más información sobre este método
Si necesita cambiar el tipo de una propiedad personalizada, puede hacerlo al crear otra propiedad con el nuevo tipo y reteniendo la propiedad con el tipo anterior. Si cambia el nombre o el tipo de datos de una propiedad, TestStand sustituye el valor de la propiedad en las instancias de pasos por el valor predeterminado de la propiedad. Además de crear una propiedad nueva con el nuevo tipo, puede agregar lógica al tipo de paso para manejar casos en los que un paso utiliza la propiedad anterior y la nueva. Por ejemplo, cuando TestStand implementó valores límite como expresiones, se agregaron dos nuevas propiedades booleanas para especificar el uso de la propiedad de límite numérico antiguos. Las propiedades UseLowExpr y UseHighExpr determinan si el paso evalúa los límites numéricos antiguos o los límites de expresión nuevos.