Configurar el equipo de estado IDT - AWS IoT Greengrass

Las traducciones son generadas a través de traducción automática. En caso de conflicto entre la traducción y la version original de inglés, prevalecerá la version en inglés.

Configurar el equipo de estado IDT

importante

A partir de IDT v4.5.1, esta máquina de estado está obsoleta. Le recomendamos que utilice el nuevo orquestador de pruebas. Para obtener más información, consulte Configurar el orquestrador de pruebas IDT.

Un equipo de estado es un componente fijo que controla el flujo de ejecución del conjunto de pruebas. Determina el estado inicial de un conjunto de pruebas, administra las transiciones de estado en función de reglas definidas por el usuario y continúa realizando la transición a través de esos estados hasta que alcanza el estado final.

Si el conjunto de pruebas no incluye un equipo de estado definido por el usuario, IDT generará un equipo de estado para usted. El equipo de estado predeterminado realiza las siguientes funciones:

  • Proporciona a los ejecutores de pruebas la capacidad de seleccionar y ejecutar grupos de pruebas específicos, en lugar de todo el conjunto de pruebas.

  • Si no se seleccionan grupos de pruebas específicos, ejecuta todos los grupos de pruebas del conjunto de pruebas en orden aleatorio.

  • Genera informes e imprime un resumen de la consola que muestra los resultados de las pruebas de cada grupo de prueba y caso de prueba.

La máquina de estado de un grupo de pruebas de IDT debe cumplir los siguientes criterios:

  • Cada estado corresponde a una acción que IDT debe llevar a cabo, como ejecutar un grupo de prueba o un producto un archivo de informe.

  • La transición a un estado ejecuta la acción asociada al estado.

  • Cada estado define la regla de transición para el siguiente estado.

  • El estado final debe ser oSucceedoFail.

Formato de la máquina de estado

Puede utilizar la siguiente plantilla para configurar la suya propia<custom-test-suite-folder>/suite/state_machine.jsonfile:

{ "Comment": "<description>", "StartAt": "<state-name>", "States": { "<state-name>": { "Type": "<state-type>", // Additional state configuration } // Required states "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }

Todos los campos que contienen valores son obligatorios tal y como se describe aquí:

Comment

Una descripción de la máquina de estado.

StartAt

Nombre del estado en que IDT comienza a ejecutar el grupo de pruebas. El valor deStartAtdebe establecerse en uno de los estados que figuran en laStatesobjeto.

States

Objeto que asigna nombres de estados definidos por el usuario a estados IDT válidos. Cada uno de los Estados.state-namecontiene la definición de un estado válido asignado alstate-name.

LaStatesobjeto debe incluir elSucceedyFailestados. Para obtener información sobre los estados válidos, consulteEstados válidos y definiciones de estado.

Estados válidos y definiciones de estado

En esta sección se describen las definiciones de estado de todos los estados válidos que se pueden utilizar en el equipo de estado IDT. Algunos de los siguientes estados admiten configuraciones a nivel de caso de prueba. Sin embargo, le recomendamos que configure las reglas de transición de estado a nivel de grupo de pruebas en lugar del caso de prueba, a menos que sea absolutamente necesario.

RunTask

LaRunTaskstate ejecuta casos de prueba de un grupo de prueba definido en el conjunto de pruebas.

{ "Type": "RunTask", "Next": "<state-name>", "TestGroup": "<group-id>", "TestCases": [ "<test-id>" ], "ResultVar": "<result-name>" }

Todos los campos que contienen valores son obligatorios tal y como se describe aquí:

Next

Nombre del estado que se va a adoptar después de ejecutar las acciones en el estado actual.

TestGroup

Opcional. Identificador del grupo de prueba que se va a ejecutar. Si no se especifica este valor, IDT ejecuta el grupo de prueba que selecciona el corredor de prueba.

TestCases

Opcional. Matriz de identificadores de casos de prueba del grupo especificado enTestGroup. Sobre la base de los valores deTestGroupyTestCases, IDT determina el comportamiento de ejecución de la prueba de la siguiente manera:

  • Cuando ambosTestGroupyTestCasesse especifican, IDT ejecuta los casos de prueba especificados del grupo de prueba.

  • CuandoTestCasesse especifican peroTestGroupno se especifica, IDT ejecuta los casos de prueba especificados.

  • CuandoTestGroupse especifica, peroTestCasesno se especifica, IDT ejecuta todos los casos de prueba del grupo de prueba especificado.

  • Cuando ningunoTestGroupoTestCases, IDT ejecuta todos los casos de prueba del grupo de prueba que el ejecutor de prueba selecciona de la CLI de IDT. Para habilitar la selección de grupos para los ejecutores de pruebas, debe incluir ambosRunTaskyChoiceestados en tustate_machine.jsonfile. Para ver un ejemplo de cómo funciona, consulteMáquina de estado de ejemplo: Ejecutar grupos de prueba seleccionados por el usuario.

    Para obtener más información acerca de la habilitación de los comandos de la CLI de IDT para ejecutores de prueba, consulteHabilitar comandos de la CLI.

ResultVar

El nombre de la variable de contexto que se va a establecer con los resultados de la prueba. No especifique este valor si no ha especificado un valor paraTestGroup. IDT establece el valor de la variable que define enResultVaratrueofalsebasado en lo siguiente:

  • Si el nombre de la variable pertenece al formulariotext_text_passed, el valor se establece en si todas las pruebas del primer grupo de pruebas han pasado o se han omitido.

  • En todos los demás casos, el valor se establece en si se han omitido o se han omitido todas las pruebas de todos los grupos de pruebas.

Normalmente, utilizaráRunTaskestado para especificar un ID de grupo de pruebas sin especificar identificadores de casos de prueba individuales, de modo que IDT ejecute todos los casos de prueba del grupo de prueba especificado. Todos los casos de prueba ejecutados por este estado se ejecutan en parallel, en orden aleatorio. Sin embargo, si todos los casos de prueba requieren que se ejecute un dispositivo y solo hay un dispositivo disponible, los casos de prueba se ejecutarán secuencialmente.

Error handling (Control de errores)

Si alguno de los grupos de prueba o ID de casos de prueba especificados no es válido, este estado emite laRunTaskErrorerror de ejecución de. Si el estado encuentra un error de ejecución, también establece elhasExecutionErrorvariable en el contexto de la máquina de estado paratrue.

Opción

LaChoicestate le permite establecer dinámicamente el siguiente estado al que se va a realizar la transición en función de las condiciones definidas por el usuario.

{ "Type": "Choice", "Default": "<state-name>", "FallthroughOnError": true | false, "Choices": [ { "Expression": "<expression>", "Next": "<state-name>" } ] }

Todos los campos que contienen valores son obligatorios tal y como se describe aquí:

Default

El estado predeterminado que se va a adoptar si no tiene lugar ninguna de las expresiones definidas enChoicesse puede evaluar paratrue.

FallthroughOnError

Opcional. Especifica el comportamiento cuando el estado encuentra un error en la evaluación de expresiones. Establezca entruesi desea omitir una expresión si la evaluación produce un error. Si no hay expresiones que coincidan, el equipo de estados hace la transición aDefaultestado. Si el archivo deFallthroughOnErrorno se especifica el valor, el valor predeterminado esfalse.

Choices

Conjunto de expresiones y estados para determinar a qué estado realizar la transición después de ejecutar las acciones en el estado actual.

Choices.Expression

Cadena de expresión que se evalúa en un valor booleano. Si la expresión se evalúa comotrue, a continuación, la máquina de estados cambia al estado definido enChoices.Next. Las cadenas de expresión recuperan valores del contexto de la máquina de estado y, a continuación, realizan operaciones en ellas para obtener un valor booleano. Para obtener información sobre cómo acceder al contexto de la máquina de estado, consulteContexto de máquina de estado.

Choices.Next

Nombre del estado que se va a adoptar si la expresión definida enChoices.Expressionevalúa paratrue.

Error handling (Control de errores)

LaChoicestate puede requerir la gestión de errores en los siguientes casos:

  • Algunas variables de las expresiones de elección no existen en el contexto de la máquina de estados.

  • El resultado de una expresión no es un valor booleano.

  • El resultado de una búsqueda JSON no es una cadena, un número ni un booleano.

No puede utilizar unCatchbloque para tratar los errores de este estado. Si desea dejar de ejecutar la máquina de estado cuando se produce un error, debe configurarFallthroughOnErrorafalse. Sin embargo, le recomendamos que establezcaFallthroughOnErroratruey, en función de su caso de uso, lleve a cabo uno de los procedimientos siguientes:

  • Si se espera que no exista una variable a la que está accediendo en algunos casos, utilice el valor deDefaulty adicionalesChoicesbloques para especificar el siguiente estado.

  • Si siempre debe existir una variable a la que está accediendo, establezca laDefaultestado aFail.

Parallel

LaParallelstate le permite definir y ejecutar nuevos equipos de estado en parallel entre sí.

{ "Type": "Parallel", "Next": "<state-name>", "Branches": [ <state-machine-definition> ] }

Todos los campos que contienen valores son obligatorios tal y como se describe aquí:

Next

Nombre del estado que se va a adoptar después de ejecutar las acciones en el estado actual.

Branches

Matriz de definiciones de máquinas de estado que se van a ejecutar. Cada definición de máquina de estado debe contener su propiaStartAt,Succeed, yFailestados. Las definiciones de máquina de estado de esta matriz no pueden hacer referencia a estados fuera de su propia definición.

nota

Dado que cada máquina de estado de rama comparte el mismo contexto de máquina de estado, establecer variables en una rama y luego leer esas variables de otra rama podría dar lugar a un comportamiento inesperado.

LaParallelstate se mueve al siguiente estado solo después de ejecutar todas las máquinas de estado de sucursal. Cada estado que requiera un dispositivo esperará a ejecutarse hasta que el dispositivo esté disponible. Si hay varios dispositivos disponibles, este estado ejecuta casos de prueba de varios grupos en parallel. Si no hay suficientes dispositivos disponibles, los casos de prueba se ejecutarán secuencialmente. Dado que los casos de prueba se ejecutan en orden aleatorio cuando se ejecutan en parallel, se pueden utilizar distintos dispositivos para ejecutar pruebas del mismo grupo de pruebas.

Error handling (Control de errores)

Asegúrese de que tanto la máquina de estado de sucursal como la máquina de estado padre pasen alFailestado para gestionar los errores de ejecución.

Dado que los equipos de estado de sucursal no transmiten errores de ejecución al equipo de estado principal, no se puede utilizar unCatchbloque para gestionar errores de ejecución en máquinas de estado de sucursal. En su lugar, utilice lahasExecutionErrorsvalor en el contexto de máquina de estado compartido. Para ver un ejemplo de cómo funciona, consulteMáquina de estado de ejemplo: Ejecutar dos grupos de prueba en parallel.

Añadir características del producto

LaAddProductFeaturesstate le permite añadir características del producto a laawsiotdevicetester_report.xmlarchivo generado por IDT.

Una característica de producto es información definida por el usuario sobre criterios específicos que un dispositivo podría cumplir. Por ejemplo, laMQTTla función del producto puede indicar que el dispositivo publica correctamente los mensajes MQTT. En el informe, las características del producto se establecen comosupported,not-supported, o un valor personalizado, según si se han superado las pruebas especificadas.

nota

LaAddProductFeaturesstate no genera informes por sí mismo. Este estado debe pasar alReportstatepara generar informes.

{ "Type": "Parallel", "Next": "<state-name>", "Features": [ { "Feature": "<feature-name>", "Groups": [ "<group-id>" ], "OneOfGroups": [ "<group-id>" ], "TestCases": [ "<test-id>" ], "IsRequired": true | false, "ExecutionMethods": [ "<execution-method>" ] } ] }

Todos los campos que contienen valores son obligatorios tal y como se describe aquí:

Next

Nombre del estado que se va a adoptar después de ejecutar las acciones en el estado actual.

Features

Una serie de características del producto que se pueden mostrar en elawsiotdevicetester_report.xmlfile.

Feature

El nombre de la característica

FeatureValue

Opcional. El valor personalizado que se utilizará en el informe en lugar desupported. Si no se especifica este valor, en función de los resultados de la prueba, el valor de la entidad se establece ensupportedonot-supported.

Si utiliza un valor personalizado paraFeatureValue, puede probar la misma entidad con condiciones diferentes e IDT concatena los valores de entidad para las condiciones admitidas. Por ejemplo, en el siguiente fragmento se muestra laMyFeatureentidad con dos valores de elemento independientes:

... { "Feature": "MyFeature", "FeatureValue": "first-feature-supported", "Groups": ["first-feature-group"] }, { "Feature": "MyFeature", "FeatureValue": "second-feature-supported", "Groups": ["second-feature-group"] }, ...

Si ambos grupos de prueba pasan, el valor de la entidad se establece enfirst-feature-supported, second-feature-supported.

Groups

Opcional. Una matriz de los ID de grupos de pruebas. Todas las pruebas de cada grupo de pruebas especificado deben pasar para que se admita la función.

OneOfGroups

Opcional. Una matriz de los ID de grupos de pruebas. Todas las pruebas de al menos uno de los grupos de pruebas especificados deben pasar para que se admita la función.

TestCases

Opcional. Una matriz de los ID de casos de prueba de prueba. Si especifica este valor, se aplica lo siguiente:

  • Se deben aprobar todos los casos de prueba especificados para que se admita la función.

  • GroupsDebe contener un único ID de grupo de prueba.

  • OneOfGroupsno debe especificarse.

IsRequired

Opcional. Establezca enfalsepara marcar esta función como elemento opcional en el informe. El valor predeterminado es true.

ExecutionMethods

Opcional. Matriz de métodos de ejecución que coinciden con elprotocolvalor especificado en ladevice.jsonfile. Si se especifica este valor, los ejecutores de prueba deben especificar unprotocolvalor que coincide con uno de los valores de esta matriz para incluir la entidad en el informe. Si no se especifica este valor, la función siempre se incluirá en el informe.

Para utilizar elAddProductFeaturesstate, debes establecer el valor deResultVaren laRunTaskestado de uno de los siguientes valores:

  • Si ha especificado identificadores de casos de prueba individuales, establezcaResultVaragroup-id_test-id_passed.

  • Si no especificó ID de caso de prueba individuales, establezcaResultVaragroup-id_passed.

LaAddProductFeaturesComprobaciones de estado de los resultados de las pruebas de la siguiente manera:

  • Si no especificó ningún identificador de caso de prueba, el resultado de cada grupo de prueba se determina a partir del valor delgroup-id_passedvariable en el contexto de la máquina de estado.

  • Si especificó ID de caso de prueba, el resultado de cada una de las pruebas se determina a partir del valor de lagroup-id_test-id_passedvariable en el contexto de la máquina de estado.

Error handling (Control de errores)

Si un ID de grupo proporcionado en este estado no es un ID de grupo válido, este estado da como resultado elAddProductFeaturesErrorerror de ejecución de. Si el estado encuentra un error de ejecución, también establece elhasExecutionErrorsvariable en el contexto de la máquina de estado paratrue.

Informar

LaReportstate genera elsuite-name_Report.xmlyawsiotdevicetester_report.xmlarchivos. Este estado también transmite el informe a la consola.

{ "Type": "Report", "Next": "<state-name>" }

Todos los campos que contienen valores son obligatorios tal y como se describe aquí:

Next

Nombre del estado que se va a adoptar después de ejecutar las acciones en el estado actual.

Siempre debes hacer la transición a laReportestado hacia el final del flujo de ejecución de la prueba para que los ejecutores de pruebas puedan ver los resultados de las pruebas. Normalmente, el siguiente estado después de este estado esSucceed.

Error handling (Control de errores)

Si este estado encuentra problemas al generar los informes, emite elReportErrorerror de ejecución de.

Mensaje de registro

LaLogMessagestate genera eltest_manager.logy transmite el mensaje de registro a la consola.

{ "Type": "LogMessage", "Next": "<state-name>" "Level": "info | warn | error" "Message": "<message>" }

Todos los campos que contienen valores son obligatorios tal y como se describe aquí:

Next

Nombre del estado que se va a adoptar después de ejecutar las acciones en el estado actual.

Level

Nivel de error en el que se va a crear el mensaje de registro. Si especifica un nivel que no es válido, este estado genera un mensaje de error y lo descarta.

Message

El mensaje que se va a registrar.

Seleccionar grupo

LaSelectGroupstate actualiza el contexto de la máquina de estado para indicar qué grupos están seleccionados. Los valores establecidos por este estado los utiliza cualquier subsiguienteChoiceestados.

{ "Type": "SelectGroup", "Next": "<state-name>" "TestGroups": [ <group-id>" ] }

Todos los campos que contienen valores son obligatorios tal y como se describe aquí:

Next

Nombre del estado que se va a adoptar después de ejecutar las acciones en el estado actual.

TestGroups

Matriz de grupos de prueba que se marcarán como seleccionados. Para cada ID de grupo de pruebas de esta matriz, elgroup-id_selectedvariable se establece entrueen el contexto. Asegúrese de proporcionar ID de grupo de pruebas válidos porque IDT no valida si existen los grupos especificados.

Fail

LaFailstate indica que la máquina de estado no se ha ejecutado correctamente. Este es un estado final de la máquina de estado y cada definición de máquina de estado debe incluir este estado.

{ "Type": "Fail" }

Succeed

LaSucceedstate indica que la máquina de estado se ha ejecutado correctamente. Este es un estado final de la máquina de estado y cada definición de máquina de estado debe incluir este estado.

{ "Type": "Succeed" }

Contexto de máquina de estado

El contexto de máquina de estado es un documento JSON de solo lectura que contiene datos disponibles para el equipo de estado durante la ejecución. Solo se puede acceder al contexto de la máquina de estado desde el equipo de estado y contiene información que determina el flujo de prueba. Por ejemplo, puede utilizar la información configurada por los ejecutores de pruebas en eluserdata.jsonpara determinar si se requiere una prueba específica para ejecutarse.

El contexto de la máquina de estados utiliza el siguiente formato:

{ "pool": { <device-json-pool-element> }, "userData": { <userdata-json-content> }, "config": { <config-json-content> }, "suiteFailed": true | false, "specificTestGroups": [ "<group-id>" ], "specificTestCases": [ "<test-id>" ], "hasExecutionErrors": true }
pool

Información sobre el grupo de dispositivos seleccionado para la ejecución de prueba. Para un grupo de dispositivos seleccionado, esta información se recupera del elemento de matriz de grupos de dispositivos de nivel superior correspondiente definido en eldevice.jsonfile.

userData

Información de la sección deuserdata.jsonfile.

config

Información de anclar elconfig.jsonfile.

suiteFailed

El valor se establece enfalsecuando se inicia la máquina de estado. Si un grupo de prueba falla en unRunTaskstate, a continuación, este valor se establece entruedurante el resto de la ejecución de la máquina de estado.

specificTestGroups

Si el ejecutor de pruebas selecciona grupos de pruebas específicos para ejecutarlos en lugar de todo el conjunto de pruebas, esta clave se crea y contiene la lista de identificadores de grupos de pruebas específicos.

specificTestCases

Si el ejecutor de pruebas selecciona casos de prueba específicos para ejecutarse en lugar de todo el conjunto de pruebas, esta clave se crea y contiene la lista de identificadores de casos de prueba específicos.

hasExecutionErrors

No sale cuando se inicia el equipo de estado. Si algún estado encuentra errores de ejecución, esta variable se crea y se establece entruedurante el resto de la ejecución de la máquina de estado.

Puede consultar el contexto mediante la notación JSONPath. La sintaxis de las consultas JSONPath en las definiciones de estado es{{$.query}}. Puede utilizar las consultas JSONPath como cadenas de marcador de posición dentro de algunos estados. IDT reemplaza las cadenas de marcador de posición por el valor de la consulta JSONPath evaluada del contexto. Puede utilizar marcadores de posición para los siguientes valores:

  • LaTestCasesvalor de enRunTaskestados.

  • LaExpressionvalueChoiceestado.

Al acceder a los datos desde el contexto de la máquina de estado, asegúrese de que se cumplan las siguientes condiciones:

  • Las rutas de JSON deben comenzar por$.

  • Cada valor debe evaluarse en una cadena, un número o un booleano.

Para obtener más información acerca de la utilización de la notación JSONPath para acceder a los datos del contexto, consulteUtilizar el contexto IDT.

Errores de ejecución

Los errores de ejecución son errores en la definición de máquina de estado que encuentra el equipo de estado al ejecutar un estado. IDT registra información sobre cada error en eltest_manager.logy transmite el mensaje de registro a la consola.

Puede utilizar los siguientes métodos para tratar los errores de ejecución:

Coger

Para utilizarCatch, añada lo siguiente a la definición de estado:

"Catch": [ { "ErrorEquals": [ "<error-type>" ] "Next": "<state-name>" } ]

Todos los campos que contienen valores son obligatorios tal y como se describe aquí:

Catch.ErrorEquals

Matriz de los tipos de errores que se catch. Si un error de ejecución coincide con uno de los valores especificados, la máquina de estado adopta el estado especificado enCatch.Next. Consulte cada definición de estado para obtener información sobre el tipo de error que produce.

Catch.Next

El siguiente estado al que se va a realizar la transición si el estado actual encuentra un error de ejecución que coincida con uno de los valores especificados enCatch.ErrorEquals.

Los bloques de captura se manejan secuencialmente hasta que uno coincida. Si los errores no coinciden con los que aparecen en los bloques Catch, las máquinas de estado siguen ejecutándose. Dado que los errores de ejecución son el resultado de definiciones de estado incorrectas, le recomendamos que haga la transición al estado Fallo cuando un estado detecte un error de ejecución.

Tiene error de ejecución

Cuando algunos estados encuentran errores de ejecución, además de emitir el error, también establecen elhasExecutionErrorvalor de atrueen el contexto de la máquina de estados. Puede utilizar este valor para detectar cuándo se produce un error y, a continuación, utilizar unChoicestate para pasar la máquina de estado a laFailestado.

Este método tiene las siguientes características:

  • El equipo de estado no se inicia con ningún valor asignado ahasExecutionError, y este valor no está disponible hasta que un estado determinado lo establezca. Esto significa que debe establecer explícitamente laFallthroughOnErrorafalsepara laChoiceindica que acceden a este valor para evitar que la máquina de estado se detenga si no se producen errores de ejecución.

  • Una vez que esté configurado entrue,hasExecutionErrornunca se establece en false ni se elimina del contexto. Esto significa que este valor solo es útil la primera vez que se establece entrue, y para todos los estados posteriores, no proporciona un valor significativo.

  • LahasExecutionErrorvalor se comparte con todos los equipos de estado de rama delParallelstate, que puede dar lugar a resultados inesperados según el orden en que se acceda a él.

Debido a estas características, no recomendamos que utilice este método si puede utilizar un bloque Catch en su lugar.

Máquinas de estado de ejemplo

En esta sección se proporcionan ejemplos de configuraciones de máquina de estado.

Máquina de estado de ejemplo: Ejecutar un único grupo de pruebas

Esta máquina de estado de:

  • Ejecuta el grupo de prueba con idGroupA, que debe estar presente en la suite de ungroup.jsonfile.

  • Comprueba si hay errores de ejecución y transiciones aFailsi se encuentra alguno.

  • Genera un informe y hace transiciones aSucceedsi no hay errores, yFailDe lo contrario, .

{ "Comment": "Runs a single group and then generates a report.", "StartAt": "RunGroupA", "States": { "RunGroupA": { "Type": "RunTask", "Next": "Report", "TestGroup": "GroupA", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "Report": { "Type": "Report", "Next": "Succeed", "Catch": [ { "ErrorEquals": [ "ReportError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }

Máquina de estado de ejemplo: Ejecutar grupos de prueba seleccionados por el usuario

Esta máquina de estado de:

  • Comprueba si el corredor de prueba ha seleccionado grupos de pruebas específicos. El equipo de estado no comprueba casos de prueba específicos porque los ejecutores de pruebas no pueden seleccionar casos de prueba sin seleccionar también un grupo de pruebas.

  • Si se seleccionan grupos de prueba:

    • Ejecuta los casos de prueba dentro de los grupos de prueba seleccionados. Para ello, el equipo de estado no especifica explícitamente ningún grupo de prueba ni casos de prueba en elRunTaskestado.

    • Genera un informe después de ejecutar todas las pruebas y salidas.

  • Si no se seleccionan grupos de prueba:

    • Realiza pruebas en el grupo de pruebasGroupA.

    • Genera informes y sale.

{ "Comment": "Runs specific groups if the test runner chose to do that, otherwise runs GroupA.", "StartAt": "SpecificGroupsCheck", "States": { "SpecificGroupsCheck": { "Type": "Choice", "Default": "RunGroupA", "FallthroughOnError": true, "Choices": [ { "Expression": "{{$.specificTestGroups[0]}} != ''", "Next": "RunSpecificGroups" } ] }, "RunSpecificGroups": { "Type": "RunTask", "Next": "Report", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "RunGroupA": { "Type": "RunTask", "Next": "Report", "TestGroup": "GroupA", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "Report": { "Type": "Report", "Next": "Succeed", "Catch": [ { "ErrorEquals": [ "ReportError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }

Máquina de estado de ejemplo: Ejecutar un único grupo de pruebas con características de producto

Esta máquina de estado de:

  • Ejecute el grupo de pruebasGroupA.

  • Comprueba si hay errores de ejecución y transiciones aFailsi se encuentra alguno.

  • Adición de laFeatureThatDependsOnGroupAcaracterística de laawsiotdevicetester_report.xmlfile:

    • SiGroupApases, la característica está establecida ensupported.

    • La función no está marcada como opcional en el informe.

  • Genera un informe y hace transiciones aSucceedsi no hay errores, yFailde lo contrario

{ "Comment": "Runs GroupA and adds product features based on GroupA", "StartAt": "RunGroupA", "States": { "RunGroupA": { "Type": "RunTask", "Next": "AddProductFeatures", "TestGroup": "GroupA", "ResultVar": "GroupA_passed", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "AddProductFeatures": { "Type": "AddProductFeatures", "Next": "Report", "Features": [ { "Feature": "FeatureThatDependsOnGroupA", "Groups": [ "GroupA" ], "IsRequired": true } ] }, "Report": { "Type": "Report", "Next": "Succeed", "Catch": [ { "ErrorEquals": [ "ReportError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }

Máquina de estado de ejemplo: Ejecutar dos grupos de prueba en parallel

Esta máquina de estado de:

  • Ejecute laGroupAyGroupBgrupos de prueba en parallel. LaResultVarvariables almacenadas en el contexto por elRunTaskestados de las máquinas de estado de sucursal por están disponibles para elAddProductFeaturesestado.

  • Comprueba si hay errores de ejecución y transiciones aFailsi se encuentra alguno. Este equipo de estado no utiliza unCatchbloque porque ese método no detecta errores de ejecución en máquinas de estado de sucursal.

  • Añade funciones a laawsiotdevicetester_report.xmlarchivo basado en los grupos que pasan

    • SiGroupApases, la característica está establecida ensupported.

    • La función no está marcada como opcional en el informe.

  • Genera un informe y hace transiciones aSucceedsi no hay errores, yFailde lo contrario

Si hay dos dispositivos configurados en el grupo de dispositivos, ambosGroupAyGroupBpuede ejecutarse al mismo tiempo. Sin embargo, si alguno de ellosGroupAoGroupBtiene varias pruebas y, a continuación, ambos dispositivos pueden asignarse a esas pruebas. Si solo se configura un dispositivo, los grupos de prueba se ejecutarán secuencialmente.

{ "Comment": "Runs GroupA and GroupB in parallel", "StartAt": "RunGroupAAndB", "States": { "RunGroupAAndB": { "Type": "Parallel", "Next": "CheckForErrors", "Branches": [ { "Comment": "Run GroupA state machine", "StartAt": "RunGroupA", "States": { "RunGroupA": { "Type": "RunTask", "Next": "Succeed", "TestGroup": "GroupA", "ResultVar": "GroupA_passed", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }, { "Comment": "Run GroupB state machine", "StartAt": "RunGroupB", "States": { "RunGroupA": { "Type": "RunTask", "Next": "Succeed", "TestGroup": "GroupB", "ResultVar": "GroupB_passed", "Catch": [ { "ErrorEquals": [ "RunTaskError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } } ] }, "CheckForErrors": { "Type": "Choice", "Default": "AddProductFeatures", "FallthroughOnError": true, "Choices": [ { "Expression": "{{$.hasExecutionErrors}} == true", "Next": "Fail" } ] }, "AddProductFeatures": { "Type": "AddProductFeatures", "Next": "Report", "Features": [ { "Feature": "FeatureThatDependsOnGroupA", "Groups": [ "GroupA" ], "IsRequired": true }, { "Feature": "FeatureThatDependsOnGroupB", "Groups": [ "GroupB" ], "IsRequired": true } ] }, "Report": { "Type": "Report", "Next": "Succeed", "Catch": [ { "ErrorEquals": [ "ReportError" ], "Next": "Fail" } ] }, "Succeed": { "Type": "Succeed" }, "Fail": { "Type": "Fail" } } }