크롤러 테스트는 어떻게 해야하오...
암만 찾아도 크롤러를 어떻게 테스트 하는지 찾을수가 없다.
검색 결과에 두번째 글은 내가 원하는 TDD의 방법이 아니라 파이썬으로 크롤러 만드는 방법에 관한 글이다.
별로 어려운 방법이 아닌데 난 2달만에 어떻게 해야할지 생각해낼 수 있었다.
브라우저로 들어가면 자바스크립트가 실행되어 DOM이 바뀔 가능성이 농후하다.
그래서 순수하게 처음 전송해주는 document만을 받아야 한다.
그래서 나는 postman을 이용해서 해당 사이트에 GET 요청을 보낸 뒤 돌아온 document를 복사한다.
특정 셀렉터가 나올 때 까지 기다려야 하는 상황이 존재한다면...
만약 아래와 같은 이슈로 그걸 재현하기 쉽지 않다면 테스트가 어려워진다.
일단, 1의 방식처럼 가져오는게 기본이긴 한데 그렇게 했을 때 CORS 에러 등으로 인해 자동화된 브라우저가 동작하지 못한다면
브라우저를 통해 DOM 변경이 완료된 상태의 document를 가져올 수 밖에 없다.
개발자 도구에서 html태그를 클릭하고 복사하면 document 전체가 복사된다.
어디든 좋으니 fixture로 저장해둬야 한다.
나의 경우엔 이렇게 처리했다.
그럼 이제 테스트를 작성 할 차례다.
실제 코드는 아무것도 작성이 안되어 있어서 돌리면 당연히 실패한다.
일단 테스트가 성공하도록 내용을 채워넣는다.
테스트가 잘 되는걸 확인했으니 이제 리펙토링을 한다.
자동화된 브라우저의 경우에도 비슷하게 진행하면 된다.
예제에는 더 길어질까봐 쓰지 않았지만,
이런 케이스에 대해서도 준비를 해둬야 한다.
크롤링은 아무리 자동화라도 무슨 일이 일어날지 모르기 때문에
자동화를 시키기 전에 해당 사이트에 대해 어느정도 파악해 둘 필요가 있다.
https://github.com/juunini/crawler-test
그렇다. 사실 별거 없다.
그런데 나는 이 간단한걸 생각 못해서 두달 동안이나 크롤러 코드를 그냥 갖다 박으면서 짰다.
혹자는
라고 할 수 있는데 나는 그렇게 생각하지 않는다.
회사에서 크롤러를 추가하고나서 시동을 걸어놓으면 하루 이틀은 에러에 미친듯이 시달려야 했다.
하지만 테스트 코드를 작성하고 나서는 한 두번의 예외적인 케이스만 겪거나 깔끔하게 끝나거나 했다.