Introdução
FIELDNOTES é um pequeno museu de demonstração. Os visitantes exploram uma exposição, encontram a entrada e baixam um guia para ler sem conexão. Antes de alterar o site, você precisa de verificações que reconheçam uma visita completa, além de uma resposta bem-sucedida da página inicial.
Você completará um pequeno teste Python, demonstrará que ele aceita um pacote funcional e rejeitará downloads ausentes ou enganosos. Basta familiaridade básica com o terminal; os detalhes de Python e HTTP são explicados aqui. Não é necessário desenvolver o site, instalar programas ou criar contas externas. O museu e o endereço são fictícios.
Live Website é o site atual na porta 8081. Candidate Preview é uma prévia independente na porta 8082. Workstation é o terminal preparado em /home/labex/project/release-gate. Cada unidade começa de forma independente; as prévias nunca alteram o site publicado.
Verificar o percurso completo do visitante
Nesta etapa, você transformará uma necessidade real do visitante em uma verificação automática e demonstrará que ela distingue pacotes corretos e defeituosos. Comece em Live Website.
Entender o serviço normal
Abra Explore the exhibition ↗, leia Close to home e escolha Plan your visit ↗. A página indica Entrance: East gate. Selecione Download visitor guide ↓ e abra o texto baixado: ele também deve conter Entrance: East gate. Um download é um arquivo salvo pelo navegador; sua localização depende das configurações de download. Volte ao início por FIELDNOTES. Abra também Visit e Step-free route ↗; a página de acesso e seu download descrevem Garden ramp. Essas funções devem permanecer disponíveis.
Mude para Workstation. ls lista os nomes de um diretório; cat mostra um arquivo:
ls
Você deve encontrar packages, drafts, live, preview, tests.py, pipeline.sh e tools.py. Um pacote é uma coleção salva de arquivos; .tar.gz é seu formato de arquivo compactado. drafts/ é uma cópia de trabalho editável. tools.py é o executor local fornecido, não um serviço de CI hospedado.
cat tests.py
HTTP é o protocolo de requisição e resposta usado pelo navegador. 200 indica uma resposta bem-sucedida; 404, que o recurso solicitado não foi encontrado. Um 200 com a entrada errada continua sendo uma falha para o visitante. Um erro de conexão significa que nenhuma resposta utilizável chegou.
Completar a verificação do conteúdo
python3 executa código Python. A função fornecida read(base, path) solicita o caminho e devolve seu texto. base é o endereço do servidor temporário escolhido pelo executor. def define uma função; as linhas recuadas pertencem a ela. with fecha a resposta depois da leitura. assert condition, 'message' interrompe com falha quando a condição é falsa. in verifica se o texto esperado aparece na resposta. O texto entre aspas é literal. = atribui um valor; + junta textos. Só falta adicionar a asserção do guia, mas o pequeno arquivo completo está abaixo para uma edição confiável.
cat > tests.py substitui o arquivo. <<'PYTHON' inicia um here-document: cole o bloco inteiro até o último PYTHON, sozinho em sua linha. As aspas preservam o código literalmente. Mantenha exatamente o recuo mostrado:
cat > tests.py <<'PYTHON'
from urllib.request import urlopen
def read(base, path):
with urlopen(base + path, timeout=3) as response:
assert response.status == 200, 'Expected HTTP 200: ' + path
return response.read().decode('utf-8')
def check(base):
home = read(base, '/')
assert 'FIELDNOTES' in home, 'Missing museum homepage'
assert 'href="/visit.html"' in home, 'Missing visit link'
visit = read(base, '/visit.html')
assert 'Entrance: East gate' in visit, 'Wrong entrance on visit page'
assert 'href="downloads/guide.txt"' in visit, 'Missing visitor download link'
guide = read(base, '/downloads/guide.txt')
assert 'Entrance: East gate' in guide, 'Wrong visitor guide content'
PYTHON
A página usa href="downloads/guide.txt", um link relativo. A partir de /visit.html, ele resulta em /downloads/guide.txt. Um link iniciado por / parte da raiz do site. Verifique tanto o link real quanto o conteúdo de destino; testar outra URL não utilizada pode deixar passar a falha enfrentada pelo visitante.
Validar o teste antes de confiar nele
A ação check extrai um pacote em um diretório temporário, inicia um servidor HTTP real e chama check(base). Os bytes aprovados ficam preservados para uso posterior. Ela não publica nem corrige o pacote:
python3 tools.py check packages/reference.tar.gz
Espere PASS: visitor checks. Frozen package .... O identificador final varia. Se Python mostrar SyntaxError ou IndentationError, o próprio teste está errado. Reescreva o bloco e tente primeiro a referência sabidamente correta antes de julgar um candidato.
Execute duas falhas intencionais:
python3 tools.py check packages/missing.tar.gz
Espere FAIL: HTTP Error 404: File not found: falta o download. Continue no mesmo terminal; a falha não o fecha.
python3 tools.py check packages/wrong.tar.gz
Espere FAIL: Wrong visitor guide content. Esse candidato retorna 200, mas leva os visitantes à entrada errada. Não remova a asserção para fazê-lo passar. Um teste que rejeita a referência ou aceita esse candidato não é útil.
Comparar a evidência do navegador
preview seleciona arquivos apenas para Candidate Preview:
python3 tools.py preview packages/wrong.tar.gz
Mude para Candidate Preview e recarregue. Abra a exposição e depois Plan your visit. A página ainda indica East gate, mas o guia baixado diz West gate. Essa diferença explica a importância da asserção de conteúdo.
Volte para Workstation e selecione a prévia do candidato correto:
python3 tools.py preview packages/candidate.tar.gz
Em Candidate Preview, volte ao início, recarregue e repita a visita e o download; agora ambos indicam East gate. Em Live Website, o site original continua funcionando. Você testou o comportamento sem publicar nenhum candidato defeituoso. Um download no navegador não executa a verificação automática; as duas observações fornecem evidências diferentes.
Resumo
Você verificou o percurso do visitante, completou uma asserção de conteúdo e distinguiu um download ausente de uma resposta bem-sucedida com texto errado. O site publicado permaneceu inalterado.



