Criar Teste De Regressão Baseado Em Comparação Com JSON Esperado
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:
- Criar a classe
TestExtratorComparacaoJSON
dentro do diretóriosrc/extrator_laudo/tests/
. - 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. - Processar o PDF real e carregar o arquivo JSON com os dados previamente validados.
- Comparar linha a linha cada campo do
DataFrame
resultante com o conteúdo do JSON. - Aplicar normalização de nulos e strings antes da comparação.
- 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.