Testar um trabalhador de Asset compute
O projeto Asset Compute define um padrão para criar e executar facilmente testes de trabalhadores do Asset compute.
Anatomia de um teste do trabalhador
Os testes dos trabalhadores assets compute são divididos em conjuntos de testes e, em cada conjunto de testes, um ou mais casos de teste afirmam uma condição a ser testada.
A estrutura dos testes em um projeto do Asset Compute é a seguinte:
/actions/<worker-name>/index.js
...
/test/
asset-compute/
<worker-name>/ <--- Test suite for the worker, must match the yaml key for this worker in manifest.yml
<test-case-1>/ <--- Specific test case
file.jpg <--- Input file (ie. `source.path` or `source.url`)
params.json <--- Parameters (ie. `rendition.instructions`)
rendition.png <--- Expected output file (ie. `rendition.path`)
<test-case-2>/ <--- Another specific test case for this worker
...
Cada conversão de teste pode ter os seguintes arquivos:
-
file.<extension>
- Arquivo Source a ser testado (a extensão pode ser qualquer coisa, exceto
.link
) - Obrigatório
- Arquivo Source a ser testado (a extensão pode ser qualquer coisa, exceto
-
rendition.<extension>
- Representação esperada
- Obrigatório, exceto para testes de erros
-
params.json
- As instruções do JSON de representação única
- Opcional
-
validate
- Um script que obtém os caminhos de arquivo de representação esperados e reais como argumentos e deve retornar o código de saída 0 se o resultado for ok, ou um código de saída diferente de zero se a validação ou comparação falhar.
- Opcional, o padrão é o comando
diff
- Use um script de shell que envolva um comando de execução do docker para usar ferramentas de validação diferentes
-
mock-<host-name>.json
- Respostas HTTP formatadas em JSON para chamadas de serviço externo de zombaria.
- Opcional, usado somente se o código do trabalhador fizer solicitações HTTP próprias
Escrever um caso de teste
Este caso de teste declara que a entrada parametrizada (params.json
) para o arquivo de entrada (file.jpg
) gera a representação PNG esperada (rendition.png
).
-
Primeiro exclua o caso de testes
simple-worker
gerado automaticamente em/test/asset-compute/simple-worker
, pois ele é inválido, já que nosso trabalhador não copia mais simplesmente a origem para a representação. -
Crie uma nova pasta de casos de teste em
/test/asset-compute/worker/success-parameterized
para testar uma execução bem-sucedida do operador que gera uma representação PNG. -
Na pasta
success-parameterized
, adicione o arquivo de entrada de teste para este caso de teste e nomeie-o comofile.jpg
. -
Na pasta
success-parameterized
, adicione um novo arquivo chamadoparams.json
que defina os parâmetros de entrada do trabalhador:code language-json { "size": "400", "contrast": "0.25", "brightness": "-0.50" }
Esses são os mesmos valores/chaves passados para a definição de perfil de Asset compute da Ferramenta de Desenvolvimento, menos a chave
worker
. -
Adicione o arquivo de representação esperado a este caso de teste e nomeie-o
rendition.png
. Este arquivo representa a saída esperada do trabalhador para a entrada especificadafile.jpg
. -
Na linha de comando, execute os testes na raiz do projeto executando
aio app test
- Verifique se o Docker Desktop e as imagens do Docker de suporte estão instalados e iniciados
- Encerrar todas as instâncias da Ferramenta de desenvolvimento em execução
Gravação de um caso de teste de verificação de erro
Este caso de teste testa para garantir que o trabalhador lança o erro apropriado quando o parâmetro contrast
é definido para um valor inválido.
-
Crie uma nova pasta de casos de teste em
/test/asset-compute/worker/error-contrast
para testar uma execução de erro do operador devido a um valor de parâmetrocontrast
inválido. -
Na pasta
error-contrast
, adicione o arquivo de entrada de teste para este caso de teste e nomeie-o comofile.jpg
. O conteúdo deste arquivo é irrelevante para este teste, ele só precisa existir para passar pela verificação de "Origem corrompida", para alcançar as verificações de validaderendition.instructions
, que este caso de teste valida. -
Na pasta
error-contrast
, adicione um novo arquivo chamadoparams.json
que define os parâmetros de entrada do trabalhador com o conteúdo:code language-json { "contrast": "10", "errorReason": "rendition_instructions_error" }
- Defina
contrast
parâmetros como10
, um valor inválido, já que o contraste deve estar entre -1 e 1, para gerar umRenditionInstructionsError
. - Declarar que o erro apropriado é lançado nos testes, definindo a chave
errorReason
para o "motivo" associado ao erro esperado. Este parâmetro de contraste inválido gera o erro personalizado,RenditionInstructionsError
, portanto, defina oerrorReason
como o motivo deste erro, ourendition_instructions_error
para confirmar que ele foi lançado.
- Defina
-
Como nenhuma representação deve ser gerada durante uma execução com erro, nenhum arquivo
rendition.<extension>
é necessário. -
Execute o conjunto de testes na raiz do projeto executando o comando
aio app test
- Verifique se o Docker Desktop e as imagens do Docker de suporte estão instalados e iniciados
- Encerrar todas as instâncias da Ferramenta de desenvolvimento em execução
Casos de teste no Github
Os casos de teste finais estão disponíveis no Github em: