소개
FIELDNOTES는 작은 실습용 박물관입니다. 방문객은 전시를 살펴보고 입구를 찾으며 오프라인으로 읽을 안내서를 다운로드합니다. 사이트를 변경하기 전에는 홈페이지 응답 성공뿐 아니라 완전한 방문 경험을 판단하는 검사가 필요합니다.
짧은 Python 테스트를 완성하고 정상 패키지는 통과시키며 누락되거나 잘못된 안내를 제공하는 다운로드는 거부하는지 확인합니다. 기본 터미널 사용 경험이면 충분합니다. 필요한 Python과 HTTP 내용은 여기서 설명합니다. 웹사이트 개발, 외부 계정, 프로그램 설치는 필요하지 않습니다. 박물관과 주소는 가상입니다.
Live Website는 포트 8081의 현재 사이트입니다. Candidate Preview는 포트 8082의 독립 미리보기입니다. Workstation은 /home/labex/project/release-gate에 준비된 터미널입니다. 각 단원은 독립적으로 시작하며 미리보기는 공개 사이트를 변경하지 않습니다.
방문객의 전체 이용 경로 검사하기
이 단계에서는 실제 방문객 요구 사항을 자동 검사로 바꾸고 정상 패키지와 결함 있는 패키지를 구별하는지 확인합니다. Live Website에서 시작하세요.
정상 서비스 이해하기
Explore the exhibition ↗를 열어 Close to home을 읽고 Plan your visit ↗를 선택하세요. 방문 페이지에는 Entrance: East gate가 표시됩니다. Download visitor guide ↓를 선택하고 다운로드한 텍스트를 여세요. 여기에도 Entrance: East gate가 있어야 합니다. 다운로드는 브라우저가 저장한 파일이며 저장 위치는 브라우저 다운로드 설정에 따라 다릅니다. FIELDNOTES로 홈에 돌아가세요. Visit과 Step-free route ↗도 여세요. 접근성 페이지와 다운로드에는 Garden ramp가 안내되어 있습니다. 이 기능들을 유지해야 합니다.
Workstation으로 전환하세요. ls는 디렉터리의 이름을 나열하고 cat은 파일을 출력합니다.
ls
packages, drafts, live, preview, tests.py, pipeline.sh, tools.py가 보여야 합니다. 패키지는 저장된 파일 묶음이며 .tar.gz는 압축 아카이브 형식입니다. drafts/는 편집 가능한 작업 사본입니다. tools.py는 제공된 로컬 실행 도구이며 호스팅된 CI 서비스가 아닙니다.
cat tests.py
HTTP는 브라우저의 요청과 응답 프로토콜입니다. 200은 성공 응답을, 404는 요청한 리소스가 없음을 뜻합니다. 잘못된 입구를 담은 200도 방문객에게는 서비스 실패입니다. 연결 오류는 사용할 수 있는 응답이 오지 않았다는 뜻입니다.
내용 검사 완성하기
python3는 Python 코드를 실행합니다. 제공된 read(base, path) 함수는 해당 경로를 요청하고 텍스트를 반환합니다. base는 실행 도구가 선택하는 임시 서버 주소입니다. def는 함수를 정의하며 들여쓴 줄은 그 함수에 속합니다. with는 읽기가 끝난 응답을 닫습니다. assert condition, 'message'는 조건이 거짓이면 실패하게 합니다. in은 응답에 기대한 텍스트가 있는지 확인합니다. 따옴표 안 텍스트는 리터럴입니다. =는 값을 대입하고 +는 텍스트를 연결합니다. 방문 안내서 단언문만 추가하면 되지만 안정적으로 편집하도록 짧은 전체 파일을 제공합니다.
cat > tests.py는 파일을 교체합니다. <<'PYTHON'은 here-document를 시작합니다. 마지막 PYTHON을 한 줄에 단독으로 넣는 부분까지 전체 블록을 붙여 넣으세요. 따옴표는 코드를 그대로 유지합니다. 표시된 들여쓰기를 정확히 지키세요.
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
페이지의 href="downloads/guide.txt"는 상대 링크입니다. /visit.html에서 시작하면 /downloads/guide.txt가 됩니다. /로 시작하는 링크는 사이트 루트에서 출발합니다. 실제 링크와 대상 내용을 모두 검사하세요. 아무도 사용하지 않는 다른 URL만 검사하면 방문객이 겪는 오류를 놓칠 수 있습니다.
테스트를 신뢰하기 전에 검증하기
실행 도구의 check는 패키지 하나를 임시 디렉터리에 풀고 실제 HTTP 서버를 시작한 뒤 check(base)를 호출합니다. 통과한 바이트를 나중에 사용할 수 있도록 보존합니다. 패키지를 공개하거나 수정하지는 않습니다.
python3 tools.py check packages/reference.tar.gz
PASS: visitor checks. Frozen package ...가 나와야 합니다. 마지막 식별자는 달라집니다. Python이 SyntaxError나 IndentationError를 표시하면 테스트 자체가 잘못된 것입니다. 블록을 다시 작성하고 후보를 판단하기 전에 정상 참조 패키지부터 재검사하세요.
다음 두 검사는 의도적으로 실패합니다.
python3 tools.py check packages/missing.tar.gz
다운로드가 없으므로 FAIL: HTTP Error 404: File not found가 예상됩니다. 같은 터미널에서 계속하세요. 실패해도 터미널은 닫히지 않습니다.
python3 tools.py check packages/wrong.tar.gz
FAIL: Wrong visitor guide content가 예상됩니다. 이 후보는 200을 반환하지만 방문객을 잘못된 입구로 안내합니다. 통과시키려고 단언문을 삭제하지 마세요. 참조를 거부하거나 이 후보를 받아들이는 테스트는 유용하지 않습니다.
브라우저 증거와 비교하기
preview는 Candidate Preview의 파일만 선택합니다.
python3 tools.py preview packages/wrong.tar.gz
Candidate Preview로 전환해 새로 고치세요. 전시를 열고 Plan your visit으로 이동하세요. 페이지는 여전히 East gate라고 하지만 다운로드한 방문 안내서는 West gate라고 합니다. 이 차이가 내용 단언문이 필요한 이유입니다.
Workstation으로 돌아가 정상 후보 미리보기를 선택하세요.
python3 tools.py preview packages/candidate.tar.gz
Candidate Preview에서 홈으로 돌아가 새로 고친 뒤 방문과 다운로드를 반복하세요. 이제 둘 다 East gate입니다. Live Website의 원래 사이트도 정상입니다. 결함 있는 후보를 공개하지 않고 업무 동작을 검사했습니다. 브라우저 다운로드 자체는 자동 검사를 실행하지 않습니다. 두 관찰은 서로 다른 증거를 제공합니다.
요약
방문객 경로를 검사하고 내용 단언문을 완성했으며 다운로드 누락과 응답은 성공했지만 내용이 잘못된 경우를 구별했습니다. 공개 사이트는 변경되지 않았습니다.



