Criar Teste De Regressão Baseado Em Comparação Com JSON Esperado

by ADMIN 65 views

Criar teste de regressão baseado em comparação com JSON esperado

Introdução

A manutenção de sistemas de extração de dados é um processo contínuo que exige atenção aos detalhes para garantir a consistência e a validação dos resultados ao longo do tempo. Nesse contexto, é fundamental implementar testes de regressão para detectar automaticamente mudanças no comportamento do extrator de laudos, evitando assim a introdução de bugs ou alterações indesejadas. Neste artigo, vamos explorar a criação de um teste de regressão baseado em comparação com JSON esperado, utilizando o exemplo do extrator SiscanReportMammographyExtract.

Escopo da implementação

O objetivo do teste é garantir que o extrator continue produzindo resultados consistentes e validados ao longo do tempo, por meio da comparação direta entre a saída extraída de um laudo real e um arquivo JSON com os dados esperados. Para alcançar esse objetivo, foi criada a classe TestExtratorComparacaoJSON dentro do diretório src/extrator_laudo/tests/.

Implementação do método test_comparar_saida_com_json_esperado

O método test_comparar_saida_com_json_esperado foi implementado com a seguinte lógica:

  • Processamento do PDF real: O método processa o PDF example.pdf real, que contém laudos do SISCAN.
  • Carregamento do arquivo JSON: O método carrega o arquivo expected.json com os dados previamente validados.
  • Comparação linha a linha: O método compara, linha a linha, cada campo do DataFrame resultante com o conteúdo do JSON.
  • Normalização de nulos e strings: O método aplica normalização de nulos e strings antes da comparação.
  • Failsafe: O método falha se qualquer valor divergente for encontrado.

Pré-requisitos para execução do teste

Para executar o teste, é necessário ter os seguintes arquivos na pasta tests/files:

  • example.pdf: PDF real contendo os laudos.
  • expected.json: JSON com os dados de referência esperados.

Ambos os arquivos estão disponíveis mediante solicitação, com links públicos:

example.pdf: https://drive.google.com/file/d/1VYTMBLIbiDTcj6W7mUKeqStlpSW5dZdZ/view
expected.json: https://drive.google.com/file/d/1JXKsMbAELVGI6SZVz8kdjryUoqN5UH2y/view

Benefícios

A implementação de um teste de regressão baseado em comparação com JSON esperado oferece vários benefícios:

  • Detecção automática de regressões: Permite detectar automaticamente mudanças no parser de laudos, evitando a introdução de bugs ou alterações indesejadas.
  • Garantia de integridade de extrações: Garante a integridade de extrações para documentos já validados.
  • Facilitação da auditoria futura: Facilita aia futura do comportamento do extrator.

Conclusão

A criação de um teste de regressão baseado em comparação com JSON esperado é uma prática importante para garantir a consistência e a validação dos resultados do extrator de laudos. Ao implementar esse teste, é possível detectar automaticamente mudanças no parser de laudos, garantir a integridade de extrações e facilitar a auditoria futura do comportamento do extrator.

Implementação do teste

A implementação do teste pode ser realizada utilizando a seguinte estrutura de código:

import pandas as pd
import json

class TestExtratorComparacaoJSON:
    def test_comparar_saida_com_json_esperado(self):
        # Processamento do PDF real
        pdf_real = pd.read_pdf('example.pdf')

        # Carregamento do arquivo JSON
        with open('expected.json') as f:
            json_esperado = json.load(f)

        # Comparação linha a linha
        for i, row in pdf_real.iterrows():
            for j, col in json_esperado.items():
                if row[col] != json_esperado[j]:
                    self.fail(f"Valor divergente encontrado em {col}")

        # Normalização de nulos e strings
        pdf_real = pdf_real.applymap(lambda x: x if pd.notnull(x) else '')
        pdf_real = pdf_real.applymap(lambda x: str(x) if isinstance(x, float) else x)

        # Comparação linha a linha (após normalização)
        for i, row in pdf_real.iterrows():
            for j, col in json_esperado.items():
                if row[col] != json_esperado[j]:
                    self.fail(f"Valor divergente encontrado em {col}")

Execução do teste

Para executar o teste, é necessário ter os seguintes arquivos na pasta tests/files:

  • example.pdf: PDF real contendo os laudos.
  • expected.json: JSON com os dados de referência esperados.

Ambos os arquivos estão disponíveis mediante solicitação, com links públicos:

example.pdf: https://drive.google.com/file/d/1VYTMBLIbiDTcj6W7mUKeqStlpSW5dZdZ/view
expected.json: https://drive.google.com/file/d/1JXKsMbAELVGI6SZVz8kdjryUoqN5UH2y/view

Para executar o teste, basta executar o seguinte comando:

python -m unittest test_extrator_comparacao_json.py

Se o teste for executado com sucesso, não haverá saída. Se o teste falhar, será exibida a mensagem de erro correspondente.
Perguntas e Respostas sobre Criar Teste de Regressão Baseado em Comparação com JSON Esperado

Q: O que é um teste de regressão?

A: Um teste de regressão é um tipo de teste que verifica se um sistema ou aplicação continua a funcionar corretamente após uma mudança ou atualização. O objetivo é garantir que as alterações não tenham afetado a funcionalidade ou a consistência do sistema.

Q: Por que é importante criar um teste de regressão?

A: Criar um teste de regressão é importante porque permite detectar automaticamente mudanças no comportamento do sistema, evitando a introdução de bugs ou alterações indesejadas. Além disso, garante a integridade de extrações para documentos já validados e facilita a auditoria futura do comportamento do extrator.

Q: Como criar um teste de regressão baseado em comparação com JSON esperado?

A: Para criar um teste de regressão baseado em comparação com JSON esperado, é necessário seguir os seguintes passos:

  1. Criar a classe TestExtratorComparacaoJSON dentro do diretório src/extrator_laudo/tests/.
  2. Implementar o método test_comparar_saida_com_json_esperado com a lógica de comparação entre a saída extraída de um laudo real e um arquivo JSON com os dados esperados.
  3. Processar o PDF real e carregar o arquivo JSON com os dados previamente validados.
  4. Comparar linha a linha cada campo do DataFrame resultante com o conteúdo do JSON.
  5. Aplicar normalização de nulos e strings antes da comparação.
  6. Failsafe: o teste falha se qualquer valor divergente for encontrado.

Q: Quais são os benefícios de criar um teste de regressão baseado em comparação com JSON esperado?

A: Os benefícios de criar um teste de regressão baseado em comparação com JSON esperado incluem:

  • Detecção automática de regressões
  • Garantia de integridade de extrações
  • Facilitação da auditoria futura do comportamento do extrator

Q: Como executar o teste de regressão?

A: Para executar o teste de regressão, é necessário ter os seguintes arquivos na pasta tests/files:

  • example.pdf: PDF real contendo os laudos.
  • expected.json: JSON com os dados de referência esperados.

Ambos os arquivos estão disponíveis mediante solicitação, com links públicos:

example.pdf: https://drive.google.com/file/d/1VYTMBLIbiDTcj6W7mUKeqStlpSW5dZdZ/view
expected.json: https://drive.google.com/file/d/1JXKsMbAELVGI6SZVz8kdjryUoqN5UH2y/view

Para executar o teste, basta executar o seguinte comando:

python -m unittest test_extrator_comparacao_json.py

Se o teste for executado com sucesso, não haverá saída. Se o teste falhar, será exibida a mensagem erro correspondente.

Q: O que fazer se o teste de regressão falhar?

A: Se o teste de regressão falhar, é necessário investigar a causa do erro e corrigir o problema. Isso pode incluir revisar a lógica do teste, verificar a consistência dos dados e garantir que o sistema esteja funcionando corretamente.

Q: Como manter o teste de regressão atualizado?

A: Para manter o teste de regressão atualizado, é necessário:

  • Revisar regularmente a lógica do teste para garantir que esteja funcionando corretamente.
  • Verificar a consistência dos dados e garantir que o sistema esteja funcionando corretamente.
  • Atualizar o teste para refletir as mudanças no sistema ou nos dados.

Q: O que é o failsafe no teste de regressão?

A: O failsafe no teste de regressão é uma medida de segurança que garante que o teste falhe se qualquer valor divergente for encontrado. Isso é importante para evitar que o teste continue a executar-se com resultados incorretos.