Tentando reduzir o tempo que os testes no Django (a framework Python mais usada) consomem pra rodar, descobri um truque que fez um simples TestCase cair de 1:49 min pra 6 segundos: transfira a base de teste onde os testes rodam do mysql (ou posgresql) para o sqlite3.
Dica simples, que aceleram muito as coisas:
if 'test' in sys.argv:
DATABASES = {
'default': {
'ENGINE': 'sqlite3',
'NAME': 'NOME_DA_BASE', # Ou o caminho do arquivo físico a ser usado pelo Sqlite
}
}
else:
# Aqui vão as configurações da sua base de desenvolvimento/produção
Pode ser necessário algumas mudanças nas migrations existentes para manter a compatibilidade entre os bancos, pois comigo foi necessario algumas alterações. Mas nada que não compensasse a economia de tempo.
Como escrever bons testes no Django
Para escrever bons testes no Django, existem algumas coisas que você deve levar em consideração. Por exemplo:
- Certifique-se de que seus testes testem apenas uma coisa de cada vez. Certamente isso ajuda a garantir que, se um teste falhar, você saberá exatamente qual parte do seu código está causando o problema.
- Faça testes unitários para testar pequenas partes do seu código, como funções individuais.
- Faça testes de integração para testar como várias partes do seu código funcionam juntas.
- Utilize a ferramenta de teste do Django, o
TestCase
, para criar seus testes. Ele fornece várias funcionalidades úteis para ajudar a tornar os testes mais fáceis de escrever e gerenciar.
- Certifique-se de que seus testes estejam cobertos com dados de teste suficientes. Isso significa que você deve criar entradas de teste para todas as combinações de entradas e saídas possíveis.
- Execute os testes com frequência durante o desenvolvimento para garantir que eles estejam sempre passando. Isso ajudará a identificar problemas o mais cedo possível.
Não deixe de conferir o guia oficial de testes no Django!
Qual é a importância dos testes unitários?
Os testes unitários são importantes porque ajudam a garantir que o código individual de uma aplicação esteja funcionando corretamente.
Eles testam pequenas partes do código, geralmente uma função ou método de uma classe, para garantir que estejam retornando os resultados corretos para entradas específicas.
Há várias vantagens em escrever testes unitários:
Primeiro
Eles ajudam a encontrar erros no código mais rapidamente, pois você pode executar os testes assim que um pedaço de código é escrito ou alterado. Isso significa que os erros são encontrados e corrigidos mais cedo no processo de desenvolvimento, o que pode economizar tempo e esforço no longo prazo.
Segundo
Eles ajudam a garantir que o código esteja funcionando corretamente mesmo quando outras partes do código são alteradas. Isso é importante porque, à medida que uma aplicação é desenvolvida e mantida, é comum que o código seja alterado e adicionado. Os testes unitários ajudam a garantir que essas alterações não afetem o funcionamento correto do código existente.
Terceiro
Eles facilitam a manutenção do código. Quando você tem testes unitários que cobrem o código, fica mais fácil alterar e manter o código com confiança, pois você pode executar os testes para garantir que as alterações não tenham causado quaisquer problemas inesperados.
Quarto
Eles tornam o desenvolvimento mais ágil. Com testes unitários automatizados, é possível verificar rapidamente se o código está funcionando corretamente, o que então permite que os desenvolvedores prosseguem com mais confiança e agilidade.
Quais testes no Django você pode fazer?
Existem vários tipos diferentes de testes no Django que você pode fazer, incluindo:
- Testes unitários: testam pequenas partes do código, geralmente uma função ou método de uma classe, com o fim de garantir que estejam retornando os resultados corretos para entradas específicas.
- Testes de integração: testam como várias partes do código funcionam juntas. Eles podem incluir testes que verificam se os módulos de um sistema podem se comunicar corretamente, ou se os dados são armazenados e recuperados corretamente em um banco de dados.
- Testes de sistema: testam o sistema como um todo, incluindo hardware, software e todas as outras partes do sistema. Eles podem por exemplo incluir testes de desempenho, testes de recuperação de falhas e outros tipos de testes.
- Testes de aceitação: realizados pelo cliente ou usuário final para verificar se o sistema atende às suas necessidades.
- Testes de regressão: executados para garantir que alterações ou correções em um sistema não tenham causado problemas em outras partes do sistema.
- Testes de stress: executados para verificar como o sistema se comporta sob cargas elevadas ou condições de uso intensivo.
Esses são alguns dos principais tipos de testes de software. Certamente existem muitos outros tipos também, e a escolha do tipo adequado de teste depende do tipo de sistema sendo desenvolvido e dos objetivos do teste.