Escrever testes¶
Os testes no MicroPython estão localizados no caminho tests/. A seguir encontra-se uma listagem dos principais diretórios e o script executor run-tests.py:
.
├── basics
├── extmod
├── float
├── micropython
├── run-tests.py
...
Existem subpastas mantidas para categorizar os testes. Adicione um teste criando um novo ficheiro numa das pastas existentes ou numa nova pasta. Também é possível criar testes personalizados fora desta pasta de testes, o que seria recomendado para um port personalizado.
Por exemplo, adicione o seguinte código num ficheiro print.py no subdiretório tests/unix/:
def print_one():
print(1)
print_one()
Se executar os seus testes, este teste deverá aparecer na saída do teste:
$ cd ports/unix
$ make tests
skip unix/extra_coverage.py
pass unix/ffi_callback.py
pass unix/ffi_float.py
pass unix/ffi_float2.py
pass unix/print.py
pass unix/time.py
pass unix/time2.py
Os testes são executados comparando a saída do destino do teste com a saída do CPython. Portanto, qualquer teste deve usar instruções print para indicar resultados do teste.
Para testes que não podem ser comparados com CPython (ou seja, funcionalidade específica do micropython), pode fornecer um ficheiro .py.exp que será usado como verdade para comparação.
A outra forma de executar testes, que é útil quando se executa em alvos diferentes do port Unix, é:
$ cd tests
$ ./run-tests.py
Depois para executar numa placa:
$ ./run-tests.py -t /dev/ttyACM0
E para executar apenas um determinado conjunto de testes (por exemplo, um diretório):
$ ./run-tests.py -d basics
$ ./run-tests.py float/builtin*.py
Utilizar run-tests.py¶
O script run-tests.py suporta vários parâmetros para personalizar a execução de testes:
Seleção de Alvo e Dispositivo:
-t, --test-instance
A opção -t aceita o seguinte para a instância de teste:
unix - usar o port unix do MicroPython, especificado pela variável de ambiente MICROPY_MICROPYTHON (que assume por defeito a variante padrão dos ports unix ou windows, dependendo da plataforma anfitriã)
webassembly - usar o port webassembly do MicroPython, especificado pela variável de ambiente MICROPY_MICROPYTHON_MJS (que assume por defeito a variante padrão do port webassembly)
port:<device> - ligar e usar o dispositivo de porta série indicado
a<n> - ligar e usar /dev/ttyACM<n>
u<n> - ligar e usar /dev/ttyUSB<n>
c<n> - ligar e usar COM<n>
exec:<command> - executar um comando e ligar ao seu stdin/stdout
execpty:<command> - executar um comando e ligar ao dispositivo /dev/pts/<n> impresso
<a>.<b>.<c>.<d> - ligar ao endereço IPv4 indicado
qualquer outra coisa especifica uma porta série
Seleção de Testes:
-d, --test-dirs- Especificar um ou mais diretórios de testes a executar-i, --include REGEX- Incluir testes que correspondam ao padrão regex-e, --exclude REGEX- Excluir testes que correspondam ao padrão regexfiles- Ficheiros de testes específicos a executar
Opções de Execução:
--emit <EMITTER>- Emissor do MicroPython, EMITTER pode ser bytecode ou native. Padrão: bytecode--via-mpy- Compilar ficheiros .py para .mpy primeiro--heapsize- Definir tamanho do heap para os testes-j, --jobs N- Número de testes a executar em simultâneo
Defina a variável de ambiente MICROPY_MPYCROSS para usar uma versão específica de mpy-cross ao usar --via-mpy.
Gestão de Resultados:
-r, --result-dir- Diretório para resultados dos testes. Padrão: results/--print-failures- Mostrar diff dos testes falhados e sair--clean-failures- Eliminar ficheiros .exp e .out de testes falhados anteriormente--run-failures- Executar novamente apenas os testes previamente falhados
Exemplos:
# Run only basic tests with native emitter
$ ./run-tests.py --emit native -d basics extmod
# Run tests excluding async functionality
$ ./run-tests.py -e async
# Run tests matching *_pep_*
$ ./run-tests.py -i *_pep_*
# Run specific test files in parallel
$ ./run-tests.py -j 4 basics/list*.py
# Test on a connected OpenMV Cam
$ ./run-tests.py -t /dev/ttyACM0
# or
$ ./run-tests.py -t a0
# Re-run only failed tests from previous run
$ ./run-tests.py --run-failures