As traduções são geradas por tradução automática. Em caso de conflito entre o conteúdo da tradução e da versão original em inglês, a versão em inglês prevalecerá.
Configurar a máquina de estado IDT
Importante
A partir do IDT v4.5.1, esta máquina de estado está obsoleta. Recomendamos que você utilize o novo orquestrador de teste. Para obter mais informações, consulteConfigurar o orquestrador de teste IDT
Uma máquina de estado é uma construção que controla o fluxo de execução do conjunto de testes. Ele determina o estado inicial de um conjunto de testes, gerencia transições de estado com base em regras definidas pelo usuário e continua a fazer a transição por esses estados até atingir o estado final.
Se o conjunto de testes não incluir uma máquina de estado definida pelo usuário, o IDT gerará uma máquina de estado para você. A máquina de estado padrão executa as seguintes funções:
-
Fornece aos corredores de teste a capacidade de selecionar e executar grupos de teste específicos, em vez de todo o conjunto de testes.
-
Se grupos de teste específicos não forem selecionados, executa todos os grupos de teste na suíte de testes em uma ordem aleatória.
-
Gera relatórios e imprime um resumo do console que mostra os resultados do teste para cada grupo de teste e caso de teste.
A máquina de estado para um conjunto de testes IDT deve atender aos seguintes critérios:
-
Cada estado corresponde a uma ação para o IDT executar, como executar um grupo de teste ou produto um arquivo de relatório.
-
A transição para um estado executa a ação associada ao estado.
-
Cada estado define a regra de transição para o próximo estado.
-
O estado final deve ser
Succeed
ouFail
.
Formato de máquina de estado
Você pode usar o seguinte modelo para configurar o seu próprio
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 os campos que contêm valores são necessários, conforme descrito aqui:
Comment
-
Uma descrição da máquina de estado.
StartAt
-
Nome do estado no qual o IDT começa a executar o conjunto de testes. O valor de
StartAt
Deve ser definido como um dos estados listados noStates
objeto. States
-
Um objeto que mapeia nomes de estados definidos pelo usuário para estados IDT válidos. Cada estado.
Nome do estado
objeto contém a definição de um estado válido mapeado para oNome do estado
.O
States
objeto deve incluir oSucceed
eFail
Estados. Para obter informações sobre estados válidos, consulteDefinições de estados e estados válidos.
Definições de estados e estados válidos
Esta seção descreve as definições de estado de todos os estados válidos que podem ser usados na máquina de estado IDT. Alguns dos seguintes estados oferecem suporte a configurações no nível do caso de teste. No entanto, recomendamos que você configure regras de transição de estado no nível do grupo de teste em vez do nível do caso de teste, a menos que seja absolutamente necessário.
Definições de estado
RunTask
ORunTask
O state executa casos de teste de um grupo de teste definido no conjunto de testes.
{ "Type": "RunTask", "Next": "
<state-name>
", "TestGroup": "<group-id>
", "TestCases": [ "<test-id>
" ], "ResultVar": "<result-name>
" }
Todos os campos que contêm valores são necessários, conforme descrito aqui:
Next
-
Nome do estado para o qual deve mudar após a execução das ações no estado atual.
TestGroup
-
Opcional. O ID do grupo de teste a ser executado. Se esse valor não for especificado, o IDT executará o grupo de teste selecionado pelo executor de teste.
TestCases
-
Opcional. Uma matriz de IDs de caso de teste do grupo especificado em
TestGroup
. Com base nos valores deTestGroup
eTestCases
, IDT determina o comportamento de execução do teste da seguinte forma:-
Quando ambos
TestGroup
eTestCases
são especificados, o IDT executa os casos de teste especificados do grupo de teste. -
Quando
TestCases
são especificados, masTestGroup
não é especificado, o IDT executa os casos de teste especificados. -
Quando
TestGroup
é especificado, masTestCases
Não é especificado, o IDT executa todos os casos de teste no grupo de teste especificado. -
Quando nenhum dos dois
TestGroup
ouTestCases
é especificado, o IDT executa todos os casos de teste do grupo de teste que o executor de teste seleciona da IDT CLI. Para habilitar a seleção de grupo para corredores de teste, você deve incluir ambosRunTask
eChoice
estados em seustate_machine.json
file. Para obter um exemplo de como isso funciona, consulteExemplo de máquina de estado do: Execute grupos de teste selecionados pelo usuário.Para obter mais informações sobre como habilitar comandos IDT CLI para executores de teste, consulteHabilitar comandos da IDT CLI CLI CLI.
-
ResultVar
-
O nome da variável de contexto a ser definida com os resultados da execução do teste. Não especifique esse valor se você não especificou um valor para
TestGroup
. IDT define o valor da variável que você define emResultVar
paratrue
oufalse
Com base no seguinte:-
Se o nome da variável for do formulário
, então o valor é definido para se todos os testes no primeiro grupo de teste passaram ou foram ignorados.text
_text
_passed -
Em todos os outros casos, o valor é definido para se todos os testes em todos os grupos de teste passaram ou foram ignorados.
-
Normalmente, você vai usarRunTask
state para especificar um ID de grupo de teste sem especificar IDs de caso de teste individuais, para que o IDT execute todos os casos de teste no grupo de teste especificado. Todos os casos de teste executados por esse estado são executados em parallel, em uma ordem aleatória. No entanto, se todos os casos de teste exigirem que um dispositivo seja executado e apenas um único dispositivo estiver disponível, os casos de teste serão executados sequencialmente.
Como tratar erros
Se algum dos grupos de teste ou IDs de caso de teste especificados não for válido, esse estado emitirá oRunTaskError
Erro de execução do. Se o estado encontrar um erro de execução, ele também definirá ohasExecutionError
variável no contexto da máquina de estado paratrue
.
Choice
OChoice
state permite definir dinamicamente o próximo estado para a transição com base nas condições definidas pelo usuário.
{ "Type": "Choice", "Default": "
<state-name>
", "FallthroughOnError": true | false, "Choices": [ { "Expression": "<expression>
", "Next": "<state-name>
" } ] }
Todos os campos que contêm valores são necessários, conforme descrito aqui:
Default
-
O estado padrão para o qual deve mudar se nenhuma das expressões definidas no
Choices
pode ser avaliado paratrue
. FallthroughOnError
-
Opcional. Especifica o comportamento quando o estado encontra um erro na avaliação de expressões. Definido como
true
se você quiser pular uma expressão se a avaliação resultar em um erro. Se nenhuma expressão corresponder, a máquina de estado muda para oDefault
Estado. Se oFallthroughOnError
O valor não é especificado, o padrão éfalse
. Choices
-
Uma matriz de expressões e estados para determinar para qual estado fazer a transição após a execução das ações no estado atual.
Choices.Expression
-
Uma string de expressão que avalia como um valor booleano. Se a expressão for avaliada como
true
, depois a máquina de estado muda para o estado definido noChoices.Next
. As strings de expressão recuperam valores do contexto da máquina de estado e, em seguida, executam operações nelas para chegar a um valor booleano. Para obter informações sobre como acessar o contexto da máquina de estado, consulteContexto de máquina de estado. Choices.Next
-
Nome do estado para o qual deve mudar se a expressão definida no
Choices.Expression
avalia paratrue
.
Como tratar erros
OChoice
state pode exigir tratamento de erros nos seguintes casos:
-
Algumas variáveis nas expressões de escolha não existem no contexto da máquina de estado.
-
O resultado de uma expressão não é um valor booleano.
-
O resultado de uma pesquisa JSON não é uma string, número ou booleano.
Não é possível usar umCatch
Bloquear para lidar com erros nesse estado. Se você quiser parar de executar a máquina de estado quando ela encontrar um erro, você deve definirFallthroughOnError
parafalse
. No entanto, recomendamos que você definaFallthroughOnError
paratrue
E, dependendo do seu caso de uso, siga um destes procedimentos:
-
Se uma variável que você está acessando não exista em alguns casos, use o valor de
Default
e adicionalChoices
Blocos para especificar o próximo estado. -
Se uma variável que você está acessando sempre existir, defina a
Default
Estado paraFail
.
Parallel
OParallel
state permite definir e executar novas máquinas de estado em parallel entre si.
{ "Type": "Parallel", "Next": "
<state-name>
", "Branches": [<state-machine-definition>
] }
Todos os campos que contêm valores são necessários, conforme descrito aqui:
Next
-
Nome do estado para o qual deve mudar após a execução das ações no estado atual.
Branches
-
Uma matriz de definições de máquina de estado a ser executada. Cada definição de máquina de estado deve conter a sua própria
StartAt
,Succeed
, eFail
Estados. As definições de máquina de estado nesta matriz não podem fazer referência a estados fora de sua própria definição.nota
Como cada máquina de estado de ramificação compartilha o mesmo contexto de máquina de estado, definir variáveis em uma ramificação e depois ler essas variáveis de outra ramificação pode resultar em comportamento inesperado.
OParallel
state se move para o próximo estado somente depois que ele executa todas as máquinas de estado de ramificação. Cada estado que requer um dispositivo aguardará a execução até que o dispositivo esteja disponível. Se vários dispositivos estiverem disponíveis, esse estado executará casos de teste de vários grupos em parallel. Se dispositivos suficientes não estiverem disponíveis, os casos de teste serão executados sequencialmente. Como os casos de teste são executados em uma ordem aleatória quando são executados em parallel, dispositivos diferentes podem ser usados para executar testes do mesmo grupo de teste.
Como tratar erros
Certifique-se de que tanto a máquina de estado de ramificação quanto a máquina de estado pai façam a transição para oFail
state para lidar com erros de execução.
Como as máquinas de estado de ramificação não transmitem erros de execução para a máquina de estado pai, você não pode usar umCatch
bloco para lidar com erros de execução em máquinas de estado de ramificação. Em vez disso, use ohasExecutionErrors
valor no contexto da máquina de estado compartilhado. Para obter um exemplo de como isso funciona, consulteExemplo de máquina de estado do: Execute dois grupos de teste em parallel.
AddProductFeatures
OAddProductFeatures
state permite adicionar recursos do produto aoawsiotdevicetester_report.xml
arquivo gerado pelo IDT.
Um recurso do produto são informações definidas pelo usuário sobre critérios específicos que um dispositivo pode atender. Por exemplo, as receitasMQTT
recurso do produto pode designar que o dispositivo publica mensagens MQTT corretamente. No relatório, os recursos do produto são definidos comosupported
,not-supported
ou um valor personalizado, com base na aprovação dos testes especificados.
nota
OAddProductFeatures
state não gera relatórios por si só. Esse estado deve fazer a transição para oReportestadopara gerar relatórios.
{ "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 os campos que contêm valores são necessários, conforme descrito aqui:
Next
-
Nome do estado para o qual deve mudar após a execução das ações no estado atual.
Features
-
Uma variedade de recursos do produto para mostrar na
awsiotdevicetester_report.xml
file.Feature
-
O nome do recurso
FeatureValue
-
Opcional. O valor personalizado a ser usado no relatório em vez de
supported
. Se esse valor não for especificado, com base nos resultados do teste, o valor do recurso será definido comosupported
ounot-supported
.Se você usar um valor personalizado para
FeatureValue
, você pode testar o mesmo recurso com condições diferentes, e o IDT concatena os valores de feição para as condições suportadas. Por exemplo, o trecho a seguir mostra oMyFeature
recurso com dois valores de feição separados:... { "Feature": "MyFeature", "FeatureValue": "first-feature-supported", "Groups": ["first-feature-group"] }, { "Feature": "MyFeature", "FeatureValue": "second-feature-supported", "Groups": ["second-feature-group"] }, ...
Se ambos os grupos de teste passarem, o valor do recurso será definido como
first-feature-supported, second-feature-supported
. Groups
-
Opcional. Uma matriz de IDs de grupos de testes. Todos os testes dentro de cada grupo de teste especificado devem ser aprovados para que o recurso seja suportado.
OneOfGroups
-
Opcional. Uma matriz de IDs de grupos de testes. Todos os testes em pelo menos um dos grupos de teste especificados devem passar para que o recurso seja suportado.
TestCases
-
Opcional. Uma matriz de IDs de casos de teste. Se você especificar esse valor, então o seguinte se aplicará:
-
Todos os casos de teste especificados devem ser aprovados para que o recurso seja suportado.
-
Groups
Deve conter apenas um ID do grupo de teste. -
OneOfGroups
Não deve ser especificado.
-
IsRequired
-
Opcional. Definido como
false
para marcar esse recurso como um recurso opcional no relatório. O valor padrão étrue
. ExecutionMethods
-
Opcional. Uma matriz de métodos de execução que correspondem ao
protocol
valor especificado nodevice.json
file. Se esse valor for especificado, os corredores de teste deverão especificar umprotocol
valor que corresponde a um dos valores dessa matriz para incluir o recurso no relatório. Se esse valor não for especificado, o recurso sempre será incluído no relatório.
Para usar aAddProductFeatures
state, você deve definir o valor deResultVar
noRunTask
State para um dos seguintes valores:
-
Se você especificou IDs de caso de teste individuais, defina
ResultVar
para
.group-id_test-id
_passed -
Se você não especificou IDs de caso de teste individuais, defina
ResultVar
para
.group-id
_passed
OAddProductFeatures
Verificações de estado para os resultados do teste da seguinte maneira:
-
Se você não especificou nenhuma IDs de caso de teste, o resultado de cada grupo de teste será determinado a partir do valor do
variável no contexto da máquina de estado.group-id
_passed -
Se você especificou IDs de caso de teste, o resultado de cada um dos testes será determinado a partir do valor do
variável no contexto da máquina de estado.group-id_test-id
_passed
Como tratar erros
Se uma ID de grupo fornecida nesse estado não for uma ID de grupo válida, esse estado resultará naAddProductFeaturesError
Erro de execução do. Se o estado encontrar um erro de execução, ele também definirá ohasExecutionErrors
variável no contexto da máquina de estado paratrue
.
Relatório
OReport
O estado gera o
esuite-name
_Report.xmlawsiotdevicetester_report.xml
arquivos. Esse estado também transmite o relatório para o console.
{ "Type": "Report", "Next": "
<state-name>
" }
Todos os campos que contêm valores são necessários, conforme descrito aqui:
Next
-
Nome do estado para o qual deve mudar após a execução das ações no estado atual.
Você sempre deve fazer a transição para oReport
estado no final do fluxo de execução do teste para que os corredores de teste possam visualizar os resultados do teste. Normalmente, o próximo estado após esse estado éSucceed
.
Como tratar erros
Se esse estado encontrar problemas com a geração dos relatórios, ele emite oReportError
Erro de execução do.
LogMessage
OLogMessage
O estado gera otest_manager.log
Arquivo e transmite a mensagem de log para o console.
{ "Type": "LogMessage", "Next": "
<state-name>
" "Level": "info | warn | error" "Message": "<message>
" }
Todos os campos que contêm valores são necessários, conforme descrito aqui:
Next
-
Nome do estado para o qual deve mudar após a execução das ações no estado atual.
Level
-
O nível de erro no qual criar a mensagem de registro. Se você especificar um nível que não é válido, esse estado gerará uma mensagem de erro e a descarta.
Message
-
A mensagem para registrar.
SelectGroup
OSelectGroup
state atualiza o contexto da máquina de estado para indicar quais grupos estão selecionados. Os valores definidos por esse estado são usados por qualquer subseqüenteChoice
Estados.
{ "Type": "SelectGroup", "Next": "
<state-name>
" "TestGroups": [<group-id>
" ] }
Todos os campos que contêm valores são necessários, conforme descrito aqui:
Next
-
Nome do estado para o qual deve mudar após a execução das ações no estado atual.
TestGroups
-
Uma matriz de grupos de teste que serão marcados como selecionados. Para cada ID de grupo de teste nesta matriz, o
variável está definida comogroup-id
_selectedtrue
no contexto. Certifique-se de fornecer IDs de grupo de teste válidos porque o IDT não valida se os grupos especificados existem.
Fail
OFail
state indica que a máquina de estado não foi executada corretamente. Este é um estado final para a máquina de estado, e cada definição de máquina de estado deve incluir esse estado.
{ "Type": "Fail" }
Succeed
OSucceed
state indica que a máquina de estado foi executada corretamente. Este é um estado final para a máquina de estado, e cada definição de máquina de estado deve incluir esse estado.
{ "Type": "Succeed" }
Contexto de máquina de estado
O contexto da máquina de estado é um documento JSON somente leitura que contém dados disponíveis para a máquina de estado durante a execução. O contexto da máquina de estado só é acessível a partir da máquina de estado e contém informações que determinam o fluxo de teste. Por exemplo, você pode usar informações configuradas por corredores de teste nauserdata.json
arquivo para determinar se um teste específico é necessário para ser executado.
O contexto da máquina de estado usa o seguinte 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
-
Informações sobre o pool de dispositivos selecionado para a execução de teste. Para um pool de dispositivos selecionado, essas informações são recuperadas do elemento de matriz de pool de dispositivos de nível superior correspondente definido na
device.json
file. userData
-
Informações no
userdata.json
file. config
-
Informações do fixar o
config.json
file. suiteFailed
-
O valor é definido como
false
Quando a máquina de estado for iniciada. Se um grupo de teste falhar em umRunTask
state, então esse valor é definido comotrue
Para a duração restante da execução da máquina de estado. specificTestGroups
-
Se o executor de teste selecionar grupos de teste específicos a serem executados em vez de todo o conjunto de testes, essa chave será criada e contém a lista de IDs de grupos de teste específicos.
specificTestCases
-
Se o executor de teste selecionar casos de teste específicos a serem executados em vez de todo o conjunto de testes, essa chave será criada e contém a lista de IDs de casos de teste específicos.
hasExecutionErrors
-
Não sai quando a máquina de estado é iniciada. Se algum estado encontrar erros de execução, essa variável será criada e definida como
true
Para a duração restante da execução da máquina de estado.
Você pode consultar o contexto usando a notação JSONPath. A sintaxe para consultas JSONPath em definições de estado é{{$.
. Você pode usar consultas JSONPath como cadeias de espaço reservado em alguns estados. O IDT substitui as strings de espaço reservado pelo valor da consulta JSONPath avaliada a partir do contexto. É possível usar espaços reservados para os seguintes valores:query
}}
-
O
TestCases
valor emRunTask
Estados. -
O
Expression
valorChoice
Estado.
Quando você acessar dados do contexto da máquina de estado, verifique se as seguintes condições são atendidas:
-
Seus caminhos JSON devem começar com
$.
-
Cada valor deve ser avaliado para uma string, um número ou um booleano.
Para obter mais informações sobre como usar a notação JSONPath para acessar dados do contexto, consulteUsar o contexto IDT.
Erros de execução
Erros de execução são erros na definição da máquina de estado que a máquina de estado encontra ao executar um estado. O IDT registra informações sobre cada erro notest_manager.log
Arquivo e transmite a mensagem de log para o console.
É possível usar os seguintes métodos para lidar com erros de execução:
-
Adicionar umCatchblocona definição de estado.
-
Verifique o valor dohasExecutionErrorsvalorNo contexto da máquina de estado.
Captura
Para usarCatch
, adicione o seguinte à definição de estado:
"Catch": [ { "ErrorEquals": [ "
<error-type>
" ] "Next": "<state-name>
" } ]
Todos os campos que contêm valores são necessários, conforme descrito aqui:
Catch.ErrorEquals
-
Uma matriz dos tipos de erro a serem capturados. Se um erro de execução corresponder a um dos valores especificados, a máquina de estado muda para o estado especificado no
Catch.Next
. Consulte cada definição de estado para obter informações sobre o tipo de erro que ele produz. Catch.Next
-
O próximo estado para a transição para se o estado atual encontrar um erro de execução que corresponda a um dos valores especificados em
Catch.ErrorEquals
.
Blocos de captura são manipulados sequencialmente até que um corresponda. Se os erros não corresponderem aos listados nos blocos Catch, as máquinas de estado continuarão sendo executadas. Como os erros de execução são resultado de definições de estado incorretas, recomendamos que você faça a transição para o estado Falha quando um estado encontrar um erro de execução.
HasExecutionError
Quando alguns estados encontram erros de execução, além de emitir o erro, eles também definem ohasExecutionError
valor paratrue
no contexto da máquina de estado. Você pode usar esse valor para detectar quando ocorre um erro e, em seguida, usar umChoice
state para fazer a transição da máquina de estado para oFail
Estado.
Esse método tem as seguintes características.
-
A máquina de estado não inicia com nenhum valor atribuído a
hasExecutionError
, e esse valor não estará disponível até que um determinado estado o defina. Isso significa que você deve definir explicitamente oFallthroughOnError
parafalse
para aChoice
afirma que acessam esse valor para impedir que a máquina de estado pare se não ocorrerem erros de execução. -
Uma vez definido como
true
,hasExecutionError
nunca é definido como falso ou removido do contexto. Isso significa que esse valor é útil somente na primeira vez que é definido comotrue
, e para todos os estados subsequentes, ele não fornece um valor significativo. -
O
hasExecutionError
valor é compartilhado com todas as máquinas de estado de ramificação naParallel
state, que pode resultar em resultados inesperados dependendo da ordem em que ele é acessado.
Devido a essas características, não recomendamos que você use esse método se puder usar um bloco Catch.
Exemplo de máquinas de estado
Esta seção fornece algumas configurações de máquina de estado de exemplo.
Exemplos
- Exemplo de máquina de estado do: Execute um único grupo de teste
- Exemplo de máquina de estado do: Execute grupos de teste selecionados pelo usuário
- Exemplo de máquina de estado do: Execute um único grupo de teste com recursos do produto
- Exemplo de máquina de estado do: Execute dois grupos de teste em parallel
Exemplo de máquina de estado do: Execute um único grupo de teste
Esta máquina de estado do:
-
Executa o grupo de teste com id
GroupA
, que deve estar presente na suíte em umgroup.json
file. -
Verifica se há erros de execução e transições para
Fail
se algum for encontrado. -
Gera um relatório e faz a transição para
Succeed
se não houver erros, eFail
Caso contrário, .
{ "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" } } }
Exemplo de máquina de estado do: Execute grupos de teste selecionados pelo usuário
Esta máquina de estado do:
-
Verifica se o executor de teste selecionou grupos de teste específicos. A máquina de estado não verifica casos de teste específicos porque os corredores de teste não podem selecionar casos de teste sem também selecionar um grupo de teste.
-
Se os grupos de testes forem selecionados:
-
Executa os casos de teste dentro dos grupos de teste selecionados. Para fazer isso, a máquina de estado não especifica explicitamente nenhum grupo de teste ou casos de teste no
RunTask
Estado. -
Gera um relatório depois de executar todos os testes e saídas.
-
-
Se os grupos de teste não forem selecionados:
-
Executa testes no grupo de teste
GroupA
. -
Gera relatórios e saídas.
-
{ "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" } } }
Exemplo de máquina de estado do: Execute um único grupo de teste com recursos do produto
Esta máquina de estado do:
-
Executa o grupo de testes
GroupA
. -
Verifica se há erros de execução e transições para
Fail
se algum for encontrado. -
Adiciona o
FeatureThatDependsOnGroupA
recurso para oawsiotdevicetester_report.xml
file:-
Se
GroupA
passa, o recurso está definido comosupported
. -
O recurso não está marcado como opcional no relatório.
-
-
Gera um relatório e faz a transição para
Succeed
se não houver erros, eFail
de outra forma
{ "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" } } }
Exemplo de máquina de estado do: Execute dois grupos de teste em parallel
Esta máquina de estado do:
-
Executa o
GroupA
eGroupB
grupos de teste em parallel. OResultVar
variáveis armazenadas no contexto peloRunTask
estados nas máquinas de estado de ramificação por estão disponíveis para oAddProductFeatures
Estado. -
Verifica se há erros de execução e transições para
Fail
se algum for encontrado. Esta máquina de estado não usa umCatch
bloco porque esse método não detecta erros de execução em máquinas de estado de ramificação. -
Adiciona recursos ao
awsiotdevicetester_report.xml
arquivo com base nos grupos que passam-
Se
GroupA
passa, o recurso está definido comosupported
. -
O recurso não está marcado como opcional no relatório.
-
-
Gera um relatório e faz a transição para
Succeed
se não houver erros, eFail
de outra forma
Se dois dispositivos estiverem configurados no pool de dispositivos, ambosGroupA
eGroupB
Pode ser executado ao mesmo tempo. No entanto, se um dos doisGroupA
ouGroupB
tem vários testes nele, então ambos os dispositivos podem ser alocados para esses testes. Se apenas um dispositivo estiver configurado, os grupos de teste serão executados sequencialmente.
{ "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" } } }