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 o
Succeed
oFail
.
Formato de la máquina de estado
Puede utilizar la siguiente plantilla para configurar la suya propia
file: <custom-test-suite-folder>
/suite/state_machine.json
{ "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 de
StartAt
debe establecerse en uno de los estados que figuran en laStates
objeto. States
-
Objeto que asigna nombres de estados definidos por el usuario a estados IDT válidos. Cada uno de los Estados.
state-name
contiene la definición de un estado válido asignado alstate-name
.La
States
objeto debe incluir elSucceed
yFail
estados. 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.
Definiciones de estado
RunTask
LaRunTask
state 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 en
TestGroup
. Sobre la base de los valores deTestGroup
yTestCases
, IDT determina el comportamiento de ejecución de la prueba de la siguiente manera:-
Cuando ambos
TestGroup
yTestCases
se especifican, IDT ejecuta los casos de prueba especificados del grupo de prueba. -
Cuando
TestCases
se especifican peroTestGroup
no se especifica, IDT ejecuta los casos de prueba especificados. -
Cuando
TestGroup
se especifica, peroTestCases
no se especifica, IDT ejecuta todos los casos de prueba del grupo de prueba especificado. -
Cuando ninguno
TestGroup
oTestCases
, 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 ambosRunTask
yChoice
estados en tustate_machine.json
file. 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 para
TestGroup
. IDT establece el valor de la variable que define enResultVar
atrue
ofalse
basado en lo siguiente:-
Si el nombre de la variable pertenece al formulario
, el valor se establece en si todas las pruebas del primer grupo de pruebas han pasado o se han omitido.text
_text
_passed -
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áRunTask
estado 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 laRunTaskError
error de ejecución de. Si el estado encuentra un error de ejecución, también establece elhasExecutionError
variable en el contexto de la máquina de estado paratrue
.
Opción
LaChoice
state 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 en
Choices
se puede evaluar paratrue
. FallthroughOnError
-
Opcional. Especifica el comportamiento cuando el estado encuentra un error en la evaluación de expresiones. Establezca en
true
si 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 aDefault
estado. Si el archivo deFallthroughOnError
no 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 como
true
, 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 en
Choices.Expression
evalúa paratrue
.
Error handling (Control de errores)
LaChoice
state 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 unCatch
bloque para tratar los errores de este estado. Si desea dejar de ejecutar la máquina de estado cuando se produce un error, debe configurarFallthroughOnError
afalse
. Sin embargo, le recomendamos que establezcaFallthroughOnError
atrue
y, 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 de
Default
y adicionalesChoices
bloques para especificar el siguiente estado. -
Si siempre debe existir una variable a la que está accediendo, establezca la
Default
estado aFail
.
Parallel
LaParallel
state 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 propia
StartAt
,Succeed
, yFail
estados. 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.
LaParallel
state 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 alFail
estado 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 unCatch
bloque para gestionar errores de ejecución en máquinas de estado de sucursal. En su lugar, utilice lahasExecutionErrors
valor 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
LaAddProductFeatures
state le permite añadir características del producto a laawsiotdevicetester_report.xml
archivo 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, laMQTT
la 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
LaAddProductFeatures
state 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 el
awsiotdevicetester_report.xml
file.Feature
-
El nombre de la característica
FeatureValue
-
Opcional. El valor personalizado que se utilizará en el informe en lugar de
supported
. Si no se especifica este valor, en función de los resultados de la prueba, el valor de la entidad se establece ensupported
onot-supported
.Si utiliza un valor personalizado para
FeatureValue
, 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 laMyFeature
entidad 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 en
first-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.
-
Groups
Debe contener un único ID de grupo de prueba. -
OneOfGroups
no debe especificarse.
-
IsRequired
-
Opcional. Establezca en
false
para marcar esta función como elemento opcional en el informe. El valor predeterminado estrue
. ExecutionMethods
-
Opcional. Matriz de métodos de ejecución que coinciden con el
protocol
valor especificado en ladevice.json
file. Si se especifica este valor, los ejecutores de prueba deben especificar unprotocol
valor 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 elAddProductFeatures
state, debes establecer el valor deResultVar
en laRunTask
estado de uno de los siguientes valores:
-
Si ha especificado identificadores de casos de prueba individuales, establezca
ResultVar
a
.group-id_test-id
_passed -
Si no especificó ID de caso de prueba individuales, establezca
ResultVar
a
.group-id
_passed
LaAddProductFeatures
Comprobaciones 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 del
variable en el contexto de la máquina de estado.group-id
_passed -
Si especificó ID de caso de prueba, el resultado de cada una de las pruebas se determina a partir del valor de la
variable en el contexto de la máquina de estado.group-id_test-id
_passed
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 elAddProductFeaturesError
error de ejecución de. Si el estado encuentra un error de ejecución, también establece elhasExecutionErrors
variable en el contexto de la máquina de estado paratrue
.
Informar
LaReport
state genera el
ysuite-name
_Report.xmlawsiotdevicetester_report.xml
archivos. 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 laReport
estado 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 elReportError
error de ejecución de.
Mensaje de registro
LaLogMessage
state genera eltest_manager.log
y 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
LaSelectGroup
state 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 subsiguienteChoice
estados.
{ "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, el
variable se establece engroup-id
_selectedtrue
en el contexto. Asegúrese de proporcionar ID de grupo de pruebas válidos porque IDT no valida si existen los grupos especificados.
Fail
LaFail
state 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
LaSucceed
state 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.json
para 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 el
device.json
file. userData
-
Información de la sección de
userdata.json
file. config
-
Información de anclar el
config.json
file. suiteFailed
-
El valor se establece en
false
cuando se inicia la máquina de estado. Si un grupo de prueba falla en unRunTask
state, a continuación, este valor se establece entrue
durante 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 en
true
durante 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{{$.
. 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:query
}}
-
La
TestCases
valor de enRunTask
estados. -
La
Expression
valueChoice
estado.
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.log
y transmite el mensaje de registro a la consola.
Puede utilizar los siguientes métodos para tratar los errores de ejecución:
-
Adición de unCatchbloqueen la definición de estado.
-
Compruebe el valor de lahasExecutionErrorsvalueen el contexto de la máquina de estados.
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 en
Catch.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 en
Catch.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 elhasExecutionError
valor de atrue
en 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 unChoice
state para pasar la máquina de estado a laFail
estado.
Este método tiene las siguientes características:
-
El equipo de estado no se inicia con ningún valor asignado a
hasExecutionError
, y este valor no está disponible hasta que un estado determinado lo establezca. Esto significa que debe establecer explícitamente laFallthroughOnError
afalse
para laChoice
indica 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 en
true
,hasExecutionError
nunca 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. -
La
hasExecutionError
valor se comparte con todos los equipos de estado de rama delParallel
state, 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.
Ejemplos
- Máquina de estado de ejemplo: Ejecutar un único grupo de pruebas
- Máquina de estado de ejemplo: Ejecutar grupos de prueba seleccionados por el usuario
- Máquina de estado de ejemplo: Ejecutar un único grupo de pruebas con características de producto
- Máquina de estado de ejemplo: Ejecutar dos grupos de prueba en parallel
Máquina de estado de ejemplo: Ejecutar un único grupo de pruebas
Esta máquina de estado de:
-
Ejecuta el grupo de prueba con id
GroupA
, que debe estar presente en la suite de ungroup.json
file. -
Comprueba si hay errores de ejecución y transiciones a
Fail
si se encuentra alguno. -
Genera un informe y hace transiciones a
Succeed
si no hay errores, yFail
De 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 el
RunTask
estado. -
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 pruebas
GroupA
. -
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 pruebas
GroupA
. -
Comprueba si hay errores de ejecución y transiciones a
Fail
si se encuentra alguno. -
Adición de la
FeatureThatDependsOnGroupA
característica de laawsiotdevicetester_report.xml
file:-
Si
GroupA
pases, la característica está establecida ensupported
. -
La función no está marcada como opcional en el informe.
-
-
Genera un informe y hace transiciones a
Succeed
si no hay errores, yFail
de 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 la
GroupA
yGroupB
grupos de prueba en parallel. LaResultVar
variables almacenadas en el contexto por elRunTask
estados de las máquinas de estado de sucursal por están disponibles para elAddProductFeatures
estado. -
Comprueba si hay errores de ejecución y transiciones a
Fail
si se encuentra alguno. Este equipo de estado no utiliza unCatch
bloque porque ese método no detecta errores de ejecución en máquinas de estado de sucursal. -
Añade funciones a la
awsiotdevicetester_report.xml
archivo basado en los grupos que pasan-
Si
GroupA
pases, la característica está establecida ensupported
. -
La función no está marcada como opcional en el informe.
-
-
Genera un informe y hace transiciones a
Succeed
si no hay errores, yFail
de lo contrario
Si hay dos dispositivos configurados en el grupo de dispositivos, ambosGroupA
yGroupB
puede ejecutarse al mismo tiempo. Sin embargo, si alguno de ellosGroupA
oGroupB
tiene 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" } } }