2011-11-25 3 views
4

장고에있는 내 응용 프로그램은 다른 응용 프로그램의 HTML에서 데이터를 스크랩하고 가져옵니다. 필자는 각 구문 분석 기능을 테스트했으며 다른 응용 프로그램을 통과 할 크롤러를 테스트하려고합니다. 이 후, 나는 통합 테스트를하고 싶다. 가능한 한 쉽게 테스트를 수행하기 위해 하드 코딩 된 HTML을 제공하는 작은 웹 앱을 만들어 가져온 웹 애플리케이션을 조롱하고 내가 통과 할 모든 경로를 갖고 싶습니다.어떻게 파이썬에서 웹 응용 프로그램을 조롱 하시겠습니까? (장고 프로젝트 테스트 용)

EDIT : 또한 내 모의은 약간의 동적 동작 (예 : 실패한 로그인과 성공적인 로그인 모두 테스트)이 있어야합니다. 따라서 정적 파일 만 제공 할 수는 없습니다.

어떻게 이런 모의 애플리케이션을 만들겠습니까? BaseHTTPServer을 서브 클래 싱하겠습니까? CGI? 일부 프레임 워크를 사용하십시오 (능 직물은 Quixote를 사용함)? 아니면 장고를 사용하는 것이 합리적일까요? 그것이 내가 사용하기 위해 원했던 해결책이지만, 장고는 그러한 문제에 너무 복잡해 보인다. OTOH, 또 다른 프레임 워크는 이러한 작은 필요성에 너무 많은 의존성이 있으며 BaseHTTPServer은 사용하기에 너무 원시입니다.

2 번째 EDIT : 수업이나 요청 등을 조롱하는 데 관심이 없습니다. 사용하려는 접근 방식이 아니므로 그러한 접근 방식을 사용하기위한 제안은 내 답변이 아닙니다. (감사하지만 나를 친절하게 제안한 좋은 사람들에게 까지 지금). 내 질문에 대해 생각하기가 너무 어렵다면, 테스트에 관해 이야기했음을 잊어 버리십시오. 파이썬을 사용하여 웹 응용 프로그램을 어떻게 시뮬레이션 하시겠습니까? 일반적으로?

+0

http://seleniumhq.org/을 참조하십시오. 셀렌은 다양한 기관에서 최신 브라우저 앱 테스트에 사용됩니다. –

+0

@GagandeepSingh 그건 내가 찾고있는 것이 아닙니다. 브라우저를 시뮬레이트 할 필요는 없지만 대신 서버 측 응용 프로그램을 시뮬레이트해야합니다. – brandizzi

+0

나는 그걸 알았지 만 그 방향으로 생각하지 않으면 쓸만한 선택권을주고 싶다. 그럼에도 불구하고 웹 앱 테스트를위한 솔루션을 기억하는 것이 좋습니다. –

답변

0

@Gagandeep Singh 솔루션을 따라했습니다. 이것은 가장 좋은 것으로 보였고 아마도 다른 상황에서는 좋은 해결책 이었지만 나에게는 효과가 없었습니다.

문제는 다른 장고 앱의 테스트 디렉토리에 장고 앱이 있다는 것입니다. manage.py test myapp으로 앱 테스트를 실행했을 때 settings.py은 전체 프로젝트의 파일 이었지만 내 조롱 앱의 파일은 아니 었습니다. 나는 starting Django through the management API이었고 multiprocessing을 사용했다. 그래서 나는 내 문제의 일부가 그러한 복잡한 상호 작용에서 왔다고 확신한다. 어쩌면 해결할 수도 있지만 방금 다른 전략을 결정했습니다.

나는 BaseHTTPServer을 무시하고 허용 가능한 결과를 얻었습니다. 이것은 쉬운 일이 아니지만 나는 조롱 앱을 시작하는 데 성공했습니다.

1

wget -r (재귀 적 다운로드)으로 참조 페이지를 다운로드 한 다음 다운로드 한 페이지를 Apache, Nginx 또는 웹 서버로 사용하는 정적 페이지로 사용할 수있게했습니다.

당신이 당신의 웹 응용 프로그램에서 역동적 인 변화를 볼 필요로하지 않는

...

+0

아파치 또는 Nginx를 사용하는 서버는 너무 많아서 프로젝트를 체크 아웃하고 테스트를 즉시 실행하고 싶습니다. OTOH, Python의 ['SimpleHTTPServer'] (http://docs.python.org/library/simplehttpserver.html)를 통해 정적 HTML을 서버 할 수 있습니다. 문제는 내 모의에서 (예를 들어, 실패한 로그인과 성공적인 로그인을 테스트하기 위해) 매우 작은 동적 동작이 필요한 경우가 거의 없다는 것입니다. 그런 경우가 없다면 기꺼이 당신의 방법을 사용할 것입니다 ... 어쨌든 당신의 대답은 제 질문이 분명하지 않다는 것을 보여 줬습니다. 고맙습니다! – brandizzi

+2

wget -r을 사용하여 페이지를 가져온 다음 다운로드 한 모든 파일을 정적 파일로 제공하는 다른 Django 프로젝트를 설정하십시오 (Django에서는 쉽게 사용할 수 있으며 Django에서도 경험이 있습니다). –

2

난 당신이 잘못된 수준에서 조롱하고 생각합니다. 단위 테스트는 테스트를 위해 특별히 실행하는 경우에도 외부 웹 서버에 의존해서는 안됩니다. urllib2.Request 개체 (또는 실제 HTTP 호출을 사용하는 모든 개체)를 잘못된 로그인에 대한 관련 응답을 포함하여 미리 미리 설정된 데이터를 반환하는 개체로 바꿔야합니다.

+0

"통합 테스트"라고 불러도 무방합니다 :) – brandizzi

0

python mock과 같은 소리가납니다. 예를 들어, patch (외부 URL을 호출 할 수 있음) 기존 명령을 사용하고 자체 테스트 데이터를 추가 할 수 있습니다.

테스트의 경우 외부 서비스를 사용해서는 안됩니다. 대신 자신의 설비 내에서 해당 서비스에서 기대하는 데이터를 제공하고 응답 핸들러가 작업을 수행하는지 테스트해야합니다.