Teste de aplicativo Beeware
Você está desenvolvendo um aplicativo Beeware e quer garantir sua qualidade e funcionalidade? O teste do aplicativo Beeware é essencial para garantir que ele atenda às expectativas de seus usuários. Neste artigo, exploraremos as práticas recomendadas para testar aplicativos Beeware.
O que é o teste de aplicativo Beeware?
O teste de aplicativo Beeware é o processo de testar aplicativos desenvolvidos usando a estrutura Beeware. Envolve testar a funcionalidade do aplicativo, garantindo que funcione perfeitamente em diferentes plataformas e dispositivos e verificando se o aplicativo atende a todos os requisitos dos usuários finais. O teste de aplicativos Beeware ajuda os desenvolvedores a identificar e corrigir bugs e outros problemas antes que o aplicativo seja lançado no mercado.
Executando a suíte de testes
Você pode ficar satisfeito em saber que seu projeto já possui um conjunto de testes! Ao gerar o projeto, foram criados dois diretórios principais: src e tests. O diretório de origem contém o código do aplicativo, enquanto o diretório de testes inclui o conjunto de testes. Dentro da pasta de testes existe um arquivo chamado test_app.py que contém o seguinte conteúdo:
def test_first(): "An initial test for the app" assert 1 + 1 == 2
Você tem um caso de teste Pytest, que é um conjunto de códigos que podem ser executados para verificar um comportamento específico do seu aplicativo. Nesse caso, o teste é apenas um substituto e não examina nenhum aspecto do seu aplicativo. No entanto, este teste pode ser realizado.
Você pode executar este conjunto de testes usando a opção –test ao executar o briefcase dev. Como esta é sua primeira vez realizando testes, você precisará passar na opção -r para garantir que os requisitos de teste necessários sejam instalados.
Mac OS
(beeware-mrxenv) $ briefcase dev --test -r [helloworld] Installing requirements... ... Installing dev requirements... done [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================== platform darwin -- Python 3.11.0, pytest-7.2.0, pluggy-1.0.0 -- /Users/brutus/beeware-tutorial/beeware-venv/bin/python3.11 cachedir: /var/folders/b_/khqk71xd45d049kxc_59ltp80000gn/T/.pytest_cache rootdir: /Users/brutus plugins: anyio-3.6.2 collecting ... collected 1 item tests/test_app.py::test_first PASSED [100%] ============================== 1 passed in 0.01s ===============================
Linux
(beeware-mrxenv) $ briefcase dev --test -r [helloworld] Installing requirements... ... Installing dev requirements... done [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================== platform linux -- Python 3.11.0 pytest==7.2.0 py==1.11.0 pluggy==1.0.0 cachedir: /tmp/.pytest_cache rootdir: /home/brutus plugins: anyio-3.6.2 collecting ... collected 1 item tests/test_app.py::test_first PASSED [100%] ============================== 1 passed in 0.01s ===============================
janelas
(beeware-mrxenv) C:\...>briefcase dev --test -r [helloworld] Installing requirements... ... Installing dev requirements... done [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================== platform win32 -- Python 3.11.0 pytest==7.2.0 py==1.11.0 pluggy==1.0.0 cachedir: C:\Users\brutus\AppData\Local\Temp\.pytest_cache rootdir: C:\Users\brutus plugins: anyio-3.6.2 collecting ... collected 1 item tests/test_app.py::test_first PASSED [100%] ============================== 1 passed in 0.01s ===============================
Parabéns! Você realizou com sucesso um único teste que confirma que a matemática do Python opera da maneira esperada (que alívio!).
Agora, vamos substituir o teste de espaço reservado atual por um novo que verifica o desempenho do método generate() conforme previsto. Você pode substituir o conteúdo de test_app.py pelo seguinte código:
def add(a,b): return a+b def subtract(a,b): return a-b def test_1(): """Performs subtraction between two numbers""" assert add(1,2) == 3 def test_2(): """Performs addition between two numbers""" assert subtract(10,7) == 3
Você pode definir dois novos testes para confirmar os dois comportamentos esperados: o resultado da adição de dois números e o resultado da subtração de dois números. Depois de definir esses testes, você pode executar o conjunto de testes novamente sem a opção -r, pois os requisitos de teste já foram instalados. Em vez disso, você só precisa usar a opção –test.
Mac OS
(beeware-mrxenv) $ briefcase dev --test [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================== ... collecting ... collected 2 items tests/test_app.py::test_name PASSED [ 50%] tests/test_app.py::test_empty PASSED [100%] ============================== 2 passed in 0.11s ===============================
Linux
(beeware-mrxenv) $ briefcase dev --test [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================== ... collecting ... collected 2 items tests/test_app.py::test_name PASSED [ 50%] tests/test_app.py::test_empty PASSED [100%] ============================== 2 passed in 0.11s ===============================
janelas
(beeware-mrxenv) C:\...>briefcase dev --test [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================== ... collecting ... collected 2 items tests/test_app.py::test_name PASSED [ 50%] tests/test_app.py::test_empty PASSED [100%] ============================== 2 passed in 0.11s ===============================
Desenvolvimento Orientado a Testes
Com o conjunto de testes instalado, você pode utilizá-lo para orientar o desenvolvimento de novas funcionalidades.
Para começar, vamos adicionar uma saudação personalizada para um usuário específico em nosso aplicativo. Podemos começar anexando um caso de teste para o comportamento desejado no final de test_app.py .
def test_3(): """If the name is BeeWare, a particular content is provided""" assert response("BeeWare") == "BeeWare is the latest Python framework!"
Em seguida, execute o conjunto de testes usando este teste recém-adicionado.
Mac OS
(beeware-mrxenv) $ briefcase dev --test [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================= platform win32 -- Python 3.11.1, pytest-7.3.1, pluggy-1.0.0 -- C:\Users\sexy inayat\Desktop\Beeware\beeware-mrx_tutorial\beeware-mrxenv\Scripts\python.exe cachedir: C:\Users\harry\AppData\Local\Temp\.pytest_cache rootdir: C:\Users\harry\Desktop\Beeware\beeware-mrx_tutorial\helloworld plugins: anyio-3.6.2 collecting ... collected 3 items tests/test_app.py::test_1 PASSED [ 33%] tests/test_app.py::test_2 PASSED [ 66%] tests/test_app.py::test_3 FAILED [100%] ================================== FAILURES =================================== ___________________________________ test_3 ____________________________________ def test_3(): """If the name is BeeWare, a particular content is provided""" > assert response("BeeWare") == "BeeWare is the latest Python framework!" E AssertionError: assert 'BeeWare, welcome to BeeWare app development' == 'BeeWare is the latest Python framework!' E - BeeWare is the latest Python framework! E + BeeWare, welcome to BeeWare app development tests\test_app.py:24: AssertionError =========================== short test summary info =========================== FAILED tests/test_app.py::test_3 - AssertionError: assert 'BeeWare, welcome t... ========================= 1 failed, 2 passed in 0.97s =========================
Linux
(beeware-mrxenv) $ briefcase dev --test [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================= platform win32 -- Python 3.11.1, pytest-7.3.1, pluggy-1.0.0 -- C:\Users\sexy inayat\Desktop\Beeware\beeware-mrx_tutorial\beeware-mrxenv\Scripts\python.exe cachedir: C:\Users\harry\AppData\Local\Temp\.pytest_cache rootdir: C:\Users\harry\Desktop\Beeware\beeware-mrx_tutorial\helloworld plugins: anyio-3.6.2 collecting ... collected 3 items tests/test_app.py::test_1 PASSED [ 33%] tests/test_app.py::test_2 PASSED [ 66%] tests/test_app.py::test_3 FAILED [100%] ================================== FAILURES =================================== ___________________________________ test_3 ____________________________________ def test_3(): """If the name is BeeWare, a particular content is provided""" > assert response("BeeWare") == "BeeWare is the latest Python framework!" E AssertionError: assert 'BeeWare, welcome to BeeWare app development' == 'BeeWare is the latest Python framework!' E - BeeWare is the latest Python framework! E + BeeWare, welcome to BeeWare app development tests\test_app.py:24: AssertionError =========================== short test summary info =========================== FAILED tests/test_app.py::test_3 - AssertionError: assert 'BeeWare, welcome t... ========================= 1 failed, 2 passed in 0.97s =========================
janelas
(beeware-mrxenv) C:\...>briefcase dev --test [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================= platform win32 -- Python 3.11.1, pytest-7.3.1, pluggy-1.0.0 -- C:\Users\sexy inayat\Desktop\Beeware\beeware-mrx_tutorial\beeware-mrxenv\Scripts\python.exe cachedir: C:\Users\harry\AppData\Local\Temp\.pytest_cache rootdir: C:\Users\harry\Desktop\Beeware\beeware-mrx_tutorial\helloworld plugins: anyio-3.6.2 collecting ... collected 3 items tests/test_app.py::test_1 PASSED [ 33%] tests/test_app.py::test_2 PASSED [ 66%] tests/test_app.py::test_3 FAILED [100%] ================================== FAILURES =================================== ___________________________________ test_3 ____________________________________ def test_3(): """If the name is BeeWare, a particular content is provided""" > assert response("BeeWare") == "BeeWare is the latest Python framework!" E AssertionError: assert 'BeeWare, welcome to BeeWare app development' == 'BeeWare is the latest Python framework!' E - BeeWare is the latest Python framework! E + BeeWare, welcome to BeeWare app development tests\test_app.py:24: AssertionError =========================== short test summary info =========================== FAILED tests/test_app.py::test_3 - AssertionError: assert 'BeeWare, welcome t... ========================= 1 failed, 2 passed in 0.97s =========================
Você encontrou uma falha de teste e o motivo por trás disso foi fornecido na saída. O teste está antecipando a saída “BeeWare é o framework Python mais recente!”, mas sua implementação response() está produzindo “BeeWare, bem-vindo ao desenvolvimento de aplicativo BeeWare”. Para resolver isso, você precisa fazer alterações na função response() no arquivo src/helloworld/app.py, para atualizar seu comportamento de acordo:
def response(name): if name: if name == "BeeWare": return "BeeWare is the latest Python framework!" else: return f"{name}, welcome to BeeWare app development" else: return "Hey, Anonymous"
Ao executar novamente os testes, observaremos que nossos testes agora são bem-sucedidos e passam sem erros.
Mac OS
(beeware-mrxenv) $ briefcase dev --test [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================= platform win32 -- Python 3.11.1, pytest-7.3.1, pluggy-1.0.0 -- C:\Users\sexy inayat\Desktop\Beeware\beeware-mrx_tutorial\beeware-mrxenv\Scripts\python.exe cachedir: C:\Users\harry\AppData\Local\Temp\.pytest_cache rootdir: C:\Users\harry\Desktop\Beeware\beeware-mrx_tutorial\helloworld plugins: anyio-3.6.2 collecting ... collected 3 items tests/test_app.py::test_1 PASSED [ 33%] tests/test_app.py::test_2 PASSED [ 66%] tests/test_app.py::test_3 PASSED [100%] ============================== 3 passed in 0.32s ==============================
Linux
(beeware-mrxenv) $ briefcase dev --test [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================= platform win32 -- Python 3.11.1, pytest-7.3.1, pluggy-1.0.0 -- C:\Users\sexy inayat\Desktop\Beeware\beeware-mrx_tutorial\beeware-mrxenv\Scripts\python.exe cachedir: C:\Users\harry\AppData\Local\Temp\.pytest_cache rootdir: C:\Users\harry\Desktop\Beeware\beeware-mrx_tutorial\helloworld plugins: anyio-3.6.2 collecting ... collected 3 items tests/test_app.py::test_1 PASSED [ 33%] tests/test_app.py::test_2 PASSED [ 66%] tests/test_app.py::test_3 PASSED [100%] ============================== 3 passed in 0.32s ==============================
janelas
(beeware-mrxenv) C:\...>briefcase dev --test [helloworld] Running test suite in dev environment... =========================================================================== ============================= test session starts ============================= platform win32 -- Python 3.11.1, pytest-7.3.1, pluggy-1.0.0 -- C:\Users\sexy inayat\Desktop\Beeware\beeware-mrx_tutorial\beeware-mrxenv\Scripts\python.exe cachedir: C:\Users\harry\AppData\Local\Temp\.pytest_cache rootdir: C:\Users\harry\Desktop\Beeware\beeware-mrx_tutorial\helloworld plugins: anyio-3.6.2 collecting ... collected 3 items tests/test_app.py::test_1 PASSED [ 33%] tests/test_app.py::test_2 PASSED [ 66%] tests/test_app.py::test_3 PASSED [100%] ============================== 3 passed in 0.32s ==============================
Testes de tempo de execução
Até agora, você executou os testes no modo de desenvolvimento, o que é particularmente vantajoso enquanto você está trabalhando em novos recursos. Ele permite que você adicione testes rapidamente e o código correspondente para passá-los. No entanto, chegará um momento em que você gostaria de garantir que seu código funcione corretamente também no ambiente de aplicativo integrado.
Você pode passar as opções –test e -r para o comando run. Ao executar o briefcase run –test -r, o conjunto de testes idêntico será executado no pacote de aplicativos empacotados, e não no ambiente de desenvolvimento.
Mac OS
(beeware-mrxenv) $ briefcase run --test -r [helloworld] Updating application code... Installing src/helloworld... done Installing tests... done [helloworld] Updating requirements... ... [helloworld] Built build/helloworld/macos/app/Hello World.app (test mode) [helloworld] Starting test suite... =========================================================================== Configuring isolated Python... Pre-initializing Python runtime... PythonHome: /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python-stdlib PYTHONPATH: - /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python311.zip - /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python-stdlib - /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/support/python-stdlib/lib-dynload - /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/app_packages - /Users/brutus/beeware-tutorial/helloworld/macOS/app/Hello World/Hello World.app/Contents/Resources/app Configure argc/argv... Initializing Python runtime... Installing Python NSLog handler... Running app module: tests.helloworld --------------------------------------------------------------------------- ============================= test session starts ============================== ... collecting ... collected 3 items tests/test_app.py::test_1 PASSED [ 33%] tests/test_app.py::test_2 PASSED [ 66%] tests/test_app.py::test_3 PASSED [100%] ============================== 3 passed in 0.21s =============================== [helloworld] Test suite passed!
Linux
(beeware-mrxenv) $ briefcase run --test -r [helloworld] Finalizing application configuration... Targeting ubuntu:jammy (Vendor base debian) Determining glibc version... done Targeting glibc 2.35 Targeting Python3.10 [helloworld] Updating application code... Installing src/helloworld... done Installing tests... done [helloworld] Updating requirements... ... [helloworld] Built build/helloworld/linux/ubuntu/jammy/helloworld-0.0.1/usr/bin/helloworld (test mode) [helloworld] Starting test suite... =========================================================================== ============================= test session starts ============================== ... collecting ... collected 3 items tests/test_app.py::test_1 PASSED [ 33%] tests/test_app.py::test_2 PASSED [ 66%] tests/test_app.py::test_3PASSED [100%] ============================== 3 passed in 0.21s ===============================
janelas
(beeware-mrxenv) C:\...>briefcase run --test -r [helloworld] Updating application code... Installing src/helloworld... done Installing tests... done [helloworld] Updating requirements... ... [helloworld] Built build\helloworld\windows\app\src\Hello World.exe (test mode) =========================================================================== Log started: 2022-12-02 10:57:34Z PreInitializing Python runtime... PythonHome: C:\Users\brutus\beeware-tutorial\helloworld\windows\app\Hello World\src PYTHONPATH: - C:\Users\brutus\beeware-tutorial\helloworld\windows\app\Hello World\src\python311.zip - C:\Users\brutus\beeware-tutorial\helloworld\windows\app\Hello World\src - C:\Users\brutus\beeware-tutorial\helloworld\windows\app\Hello World\src\app_packages - C:\Users\brutus\beeware-tutorial\helloworld\windows\app\Hello World\src\app Configure argc/argv... Initializing Python runtime... Running app module: tests.helloworld --------------------------------------------------------------------------- ============================= test session starts ============================== ... collecting ... collected 3 items tests/test_app.py::test_1 PASSED [ 33%] tests/test_app.py::test_2 PASSED [ 66%] tests/test_app.py::test_3 PASSED [100%] ============================== 3 passed in 0.21s ===============================
Semelhante ao briefcase dev –test, você só precisa da opção -r para a execução inicial do conjunto de testes para garantir que as dependências de teste sejam instaladas. Você pode excluir essa opção para todas as execuções de teste subsequentes.
Além disso, você também pode empregar a opção –test em back-ends móveis. Portanto, executar o briefcase run iOS –test ou o briefcase run android –test funcionará corretamente, permitindo que você execute o conjunto de testes no dispositivo móvel selecionado.
Práticas recomendadas para teste de aplicativos Beeware
Para garantir que o processo de teste do aplicativo Beeware seja eficaz, existem várias práticas recomendadas que os desenvolvedores devem seguir. Esses incluem:
- Criar um plano de teste que descreva a estratégia e a abordagem de teste.
- Escrever casos de teste que cobrem todos os recursos do aplicativo.
- Usando ferramentas de teste automatizadas para economizar tempo e esforço.
- Testando o aplicativo em diferentes plataformas e dispositivos para garantir a compatibilidade.
- Priorizando o teste com base no risco do recurso ou função.
Benefícios
- O Beeware permite que os desenvolvedores criem aplicativos compatíveis com várias plataformas, como iOS, Android, Windows e Linux. Isso significa que você pode testar facilmente seu aplicativo em diferentes plataformas sem a necessidade de ferramentas ou recursos adicionais.
- As ferramentas da Beeware, como Toga e Briefcase, permitem que os desenvolvedores escrevam código uma vez e o usem em várias plataformas, o que reduz significativamente o tempo de desenvolvimento. Isso significa que os desenvolvedores podem criar e testar seus aplicativos mais rapidamente, o que pode economizar tempo e dinheiro.
- O conjunto de ferramentas da Beeware inclui ferramentas como Batavia e BeeWare Test, que simplificam o processo de teste para desenvolvedores. Essas ferramentas ajudam a identificar e corrigir bugs rapidamente, o que pode economizar muito tempo e esforço dos desenvolvedores.
- Beeware é um projeto de código aberto com uma comunidade ativa de desenvolvedores que contribuem para seu desenvolvimento. Isso significa que os desenvolvedores podem obter ajuda e suporte da comunidade, bem como acessar uma variedade de recursos e ferramentas que podem ajudá-los a criar aplicativos melhores.
- As ferramentas da Beeware são amigáveis e fáceis de usar, mesmo para desenvolvedores que são novos na plataforma. A plataforma fornece uma variedade de documentação, tutoriais e exemplos que podem ajudar os desenvolvedores a começar rapidamente.
- O Beeware integra-se com os populares Ambientes de Desenvolvimento Integrado (IDEs), como Visual Studio Code e PyCharm, o que torna mais fácil para os desenvolvedores usarem suas ferramentas preferidas.
Conclusão
O conjunto de testes Beeware é uma ferramenta valiosa que pode ajudá-lo a garantir a qualidade, confiabilidade e funcionalidade do seu código. Com recursos como testes automatizados, compatibilidade entre plataformas, integração com outras ferramentas, uma interface amigável e análise de cobertura de código, o conjunto de testes Beeware pode ajudá-lo a identificar problemas com antecedência, simplificar seu fluxo de trabalho de desenvolvimento e, por fim, criar soluções de alta qualidade Aplicativos Python. No geral, o conjunto de testes Beeware é uma ferramenta essencial para qualquer desenvolvedor que deseja desenvolver aplicativos Python confiáveis e funcionais com facilidade.