<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Luanna</title>
    <description>The latest articles on DEV Community by Luanna (@luanna_0c6e04a3fa54a77de1).</description>
    <link>https://dev.to/luanna_0c6e04a3fa54a77de1</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F2838987%2Fc5fc61d4-9c64-48de-a3ad-4c24cb4980fd.png</url>
      <title>DEV Community: Luanna</title>
      <link>https://dev.to/luanna_0c6e04a3fa54a77de1</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/luanna_0c6e04a3fa54a77de1"/>
    <language>en</language>
    <item>
      <title>"[PT-BR] Testes Unitários Eficientes no Django"-Torne a saída mais legível usando o plugin pytest-sugar</title>
      <dc:creator>Luanna</dc:creator>
      <pubDate>Sun, 09 Feb 2025 22:46:11 +0000</pubDate>
      <link>https://dev.to/luanna_0c6e04a3fa54a77de1/pt-br-testes-unitarios-eficientes-no-django-torne-a-saida-mais-legivel-usando-o-plugin-41ap</link>
      <guid>https://dev.to/luanna_0c6e04a3fa54a77de1/pt-br-testes-unitarios-eficientes-no-django-torne-a-saida-mais-legivel-usando-o-plugin-41ap</guid>
      <description>&lt;p&gt;1️⃣ &lt;strong&gt;Introdução&lt;/strong&gt; &lt;br&gt;
      ✅ &lt;strong&gt;O que são testes unitários e por que são importantes?&lt;/strong&gt;&lt;br&gt;
Testes unitários são testes automatizados que verificam se pequenas partes do código &lt;strong&gt;(funções, classes ou métodos)&lt;/strong&gt; funcionam corretamente de forma isolada. Eles são essenciais porque ajudam a:&lt;br&gt;
        ◦ Identificar erros rapidamente durante o desenvolvimento. &lt;br&gt;
        ◦ Garantir que mudanças no código não quebrem funcionalidades existentes. &lt;br&gt;
        ◦ Melhorar a qualidade e a manutenção do código. &lt;/p&gt;

&lt;p&gt;✅ &lt;strong&gt;Django já vem com suporte nativo para testes&lt;/strong&gt;&lt;br&gt;
O Django possui um &lt;strong&gt;framework de testes embutido&lt;/strong&gt; baseado no módulo &lt;em&gt;unittest&lt;/em&gt; do Python. Isso permite que os desenvolvedores escrevam e executem testes facilmente, garantindo que suas aplicações funcionem corretamente. Para rodar os testes, basta usar o comando:&lt;br&gt;
&lt;code&gt;python manage.py test&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Isso facilita a detecção de erros e a manutenção do código no desenvolvimento de aplicações Django. 🚀&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Os testes unitários garantem que cada parte do código funcione corretamente. Em Django, podemos usar o módulo unittest para escrever testes eficientes e evitar erros inesperados no código.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;2️⃣ &lt;strong&gt;Conceitos Básicos&lt;/strong&gt;&lt;br&gt;
✅ O que é um teste unitário?**&lt;br&gt;
Um teste unitário é um tipo de teste automatizado que verifica o funcionamento de uma unidade específica do código, como uma função, um método ou uma classe. O objetivo é garantir que cada parte do código funcione de forma isolada, sem depender de outras partes do sistema.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ Diferença entre testes unitários e testes de integração&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa1g6277ffxf1cmbcau0e.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fa1g6277ffxf1cmbcau0e.png" alt="Image description" width="800" height="299"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;✅ O que é o unittest e como usá-lo no Django?&lt;/strong&gt;&lt;br&gt;
O &lt;em&gt;unittest&lt;/em&gt; é um framework de testes padrão do Python usado para escrever testes automatizados. O Django já vem com suporte embutido para &lt;em&gt;unittest&lt;/em&gt;, permitindo que você escreva e execute testes de forma simples.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Como usá-lo no Django?&lt;/strong&gt;&lt;br&gt;
• Criar um arquivo de teste no app, normalmente chamado tests.py.&lt;/p&gt;

&lt;p&gt;• Importar unittest e TestCase do Django:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbeui73xdfsrqbv33lgaf.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fbeui73xdfsrqbv33lgaf.jpeg" alt="Image description" width="800" height="336"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;• Executar os testes com o comando:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;python manage.py test&lt;br&gt;
&lt;/code&gt;&lt;br&gt;
Isso verifica se a funcionalidade do código está correta e evita erros inesperados no desenvolvimento. 🚀&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;&lt;strong&gt;QUIZ! Por que se fala em Automação na Execução dos Testes ?&lt;/strong&gt;&lt;br&gt;
Os testes são executados automaticamente por meio do comando python manage.py test ou pytest, sem intervenção manual. Essa execução automática garante que, a cada mudança no código, os testes sejam rodados e o comportamento do sistema seja verificado.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;3️⃣  &lt;strong&gt;Testando a Views&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;• Como testar uma View. &lt;br&gt;
Utilize o Django Test Client para simular requisições HTTP (GET/POST) à view e verifique se a resposta está de acordo com o comportamento esperado (status code, redirecionamento, template renderizado, contexto, mensagens, etc.).&lt;br&gt;
• Exemplo prático:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9zmvwd6dom9z73hmobu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fq9zmvwd6dom9z73hmobu.png" alt="Image description" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Nesse exemplo, o teste simula um acesso à view sem autenticação e verifica se o usuário é redirecionado para a página de login, conforme esperado.&lt;/p&gt;

&lt;p&gt;4️⃣ &lt;strong&gt;Dicas Extras&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Para acompanhar as saídas dos testes:&lt;/strong&gt;&lt;br&gt;
Para acompanhar mais detalhes da execução dos testes pelo prompt, você pode aumentar o nível de verbosidade ao rodar o comando do Django. Isso é feito utilizando a flag --verbosity (ou sua forma abreviada -v).&lt;br&gt;
Por exemplo, se você quiser uma saída mais detalhada, execute:&lt;br&gt;
&lt;code&gt;python manage.py test funcionarios --verbosity=2&lt;/code&gt;&lt;br&gt;
ou&lt;br&gt;
&lt;code&gt;python manage.py test funcionarios -v2&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Os níveis de verbosidade funcionam da seguinte forma:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;0: saída mínima (quiet). &lt;/li&gt;
&lt;li&gt;1: saída padrão. &lt;/li&gt;
&lt;li&gt;2: saída detalhada (mostra quais testes estão sendo executados e mais informações). &lt;/li&gt;
&lt;li&gt;3: saída muito detalhada.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Assim, ajustando o nível de verbosidade você poderá ver mais informações sobre a execução dos testes, quais testes foram executados e outras mensagens de debug que você eventualmente adicionar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2.Configurando o Logging para Mensagens de Debug&lt;/strong&gt;&lt;br&gt;
Em vez de usar apenas print(), é recomendável utilizar o módulo logging do Python. Assim, você pode configurar o nível de log para DEBUG e garantir que as mensagens sejam exibidas no console durante a execução dos testes.&lt;br&gt;
No início do seu arquivo de teste (ou num arquivo de configuração específico para testes), adicione:&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import logging&lt;br&gt;
logging.basicConfig(level=logging.DEBUG)&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Em seguida, insira chamadas ao método &lt;em&gt;logging.debug()&lt;/em&gt; nos pontos do código ou dos testes onde deseja obter informações de depuração. Por exemplo:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwi3g1l0vvk1h03eodd6p.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fwi3g1l0vvk1h03eodd6p.png" alt="Image description" width="800" height="184"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;5️⃣ &lt;strong&gt;Usando o plugin pytest-sugar&lt;/strong&gt;&lt;br&gt;
Para configurar seu projeto Django para utilizar o pytest com o plugin pytest-sugar (que fornece uma barra de progresso e uma saída de relatório mais bonita), você pode seguir estes passos:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1.Instale as dependências&lt;/strong&gt;&lt;br&gt;
No ambiente virtual do seu projeto, instale os pacotes necessários:&lt;br&gt;
&lt;em&gt;pip install pytest pytest-django pytest-sugar&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Esses pacotes permitem rodar os testes do Django usando o pytest e melhoram a exibição dos resultados com o pytest-sugar.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;2. Configure o arquivo pytest.ini&lt;/strong&gt; &lt;br&gt;
Na raiz do seu projeto (onde está localizado o arquivo manage.py), crie um arquivo         chamado pytest.ini com o seguinte conteúdo:&lt;br&gt;
&lt;code&gt;[pytest]&lt;br&gt;
    DJANGO_SETTINGS_MODULE = seu_projeto.settings&lt;br&gt;
    python_files = tests.py test_*.py *_tests.py&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Observação: Substitua seu_projeto pelo nome do seu diretório de configurações (geralmente o diretório     que contém o settings.py).&lt;br&gt;
Esse arquivo informa ao pytest onde estão as configurações do Django e quais arquivos    devem ser considerados como testes.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;3. Organize Seus Testes em Diretórios&lt;/strong&gt;&lt;br&gt;
Certifique-se de que seus testes estão organizados conforme o padrão, por exemplo:&lt;br&gt;
meu_app/&lt;br&gt;
├── models.py&lt;br&gt;
├── views.py&lt;br&gt;
└── tests/&lt;br&gt;
       ├── &lt;strong&gt;init&lt;/strong&gt;.py&lt;br&gt;&lt;br&gt;
       └── test_views.py&lt;/p&gt;

&lt;p&gt;O arquivo init.py vazio garante que a pasta tests seja tratada como um pacote e que o pytest possa encontrar os arquivos de teste.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;4. Executando os Testes com Pytest&lt;/strong&gt;&lt;br&gt;
Com as dependências instaladas e o arquivo pytest.ini configurado, você pode executar os testes a partir da raiz do projeto usando o comando:&lt;br&gt;
&lt;code&gt;pytest&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;O pytest-sugar será carregado automaticamente (uma vez instalado) e você verá uma barra de progresso e um relatório mais detalhado e estilizado à medida que os testes forem executados.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fji1s6vyo259q08lzsvre.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fji1s6vyo259q08lzsvre.png" alt="Image description" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyx2e79yro6f8agwnjdl9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fyx2e79yro6f8agwnjdl9.png" alt="Image description" width="800" height="352"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk45aum1xl516z6d1jux3.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fk45aum1xl516z6d1jux3.png" alt="Image description" width="800" height="245"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;5. Personalizando a Execução (Opcional)&lt;/strong&gt;&lt;br&gt;
Se desejar ajustar ainda mais a saída ou filtrar os testes, você pode utilizar opções adicionais do pytest, como:&lt;br&gt;
    • --maxfail=1: para interromper a execução ao encontrar o primeiro erro. &lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;• --disable-warnings: para suprimir avisos. 
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;Exemplo:&lt;br&gt;
&lt;code&gt;pytest --maxfail=1 --disable-warnings&lt;/code&gt;&lt;/p&gt;

&lt;p&gt;Com esses passos, seu projeto Django estará configurado para utilizar o pytest com o plugin pytest-sugar, proporcionando uma execução de testes mais agradável e informativa. &lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmbl5zsowxwnktt2pri5.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Fmmbl5zsowxwnktt2pri5.png" alt="Image description" width="800" height="461"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;6️⃣ &lt;strong&gt;Conclusão&lt;/strong&gt;&lt;br&gt;
   Ao longo deste artigo, exploramos como escrever testes unitários eficientes em projetos Django, destacando a importância da automação na execução dos testes para garantir a qualidade e a manutenção do código. &lt;br&gt;
Aprendemos a utilizar o Django Test Client para simular requisições, integrar ferramentas como Pytest e o plugin Pytest-Sugar para melhorar a visibilidade dos testes, além de configurar técnicas de debugging e logging para facilitar a identificação e correção de erros.&lt;/p&gt;

&lt;p&gt;Essas práticas, combinadas com a organização estruturada do código e o uso de testes automatizados, demonstram como a implementação de testes pode tornar o desenvolvimento backend mais robusto, escalável e confiável.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;"O que achou? Tem dúvidas? Comente aqui!".&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;"Se você gostou, compartilhe com quem está aprendendo Django!"&lt;/em&gt;&lt;/strong&gt; &lt;/p&gt;

&lt;p&gt;Contato:&lt;br&gt;
&lt;a href="//curso.siqueira@gmail.com"&gt;E-mail&lt;/a&gt;&lt;br&gt;
&lt;a href="https://www.linkedin.com/in/luanna-holanda/" rel="noopener noreferrer"&gt;Linkedin&lt;/a&gt;&lt;br&gt;
&lt;a href="https://github.com/holandalhs" rel="noopener noreferrer"&gt;GitHub&lt;/a&gt;&lt;/p&gt;

</description>
      <category>pytest</category>
      <category>python</category>
      <category>django</category>
      <category>testesunitarios</category>
    </item>
  </channel>
</rss>
