문제

django.test.client.client를 사용하는 대신 http 요청을 직접 수행하는 단위 테스트를 작성하고 싶습니다.

궁금한 이유가 있다면 Django 애플리케이션에서 노출 된 중고품 -HTTP API를 테스트하고 싶기 때문입니다. 단위 테스트에서 중고품 클라이언트를 사용하고 싶습니다.

문제는 테스트 중에 서버가 실제로 실행되지 않는다는 것입니다. django.test.client.client를 사용하는 경우 실제로 HTTP 요청을하는 대신보기 기능을 호출합니다. (내가 틀렸다면 나를 바로 잡아주세요.)

그렇다면 테스트 프레임 워크가 HTTP 서버를 시작하도록 강요하는 가장 좋은 방법은 무엇입니까?

나는 다음과 같은 일을하는 bash 스크립트를 작성하려고했습니다.

./manage.py testserver --addrport 7000 &
PID=$!
sleep 5
./manage.py test --no-input
kill $PID

그러나 1) 수면이 필요하기 때문에 지저분하고 (실제로는 작동하지 않음) (그렇지 않으면 테스트가 테스트 서버에 의해 DB가 초기화되기 전에 테스트가 시작됩니다), 2) 테스트는 데이터베이스를 다시 초기화하려고 시도합니다 (이후에는 데이터베이스가 다시 초기화됩니다. TestServer는 이미 초기화되었습니다).

이것에 대한 다른 해결책이 있습니까?

고맙습니다.

도움이 되었습니까?

해결책

예, 당신 말이 맞아요 - 문제이며 버그가 있습니다. http://code.djangoproject.com/ticket/2879

그냥, 당신은 의도적으로 다음과 같은 멀티 스레드 문제를 겪을 수 있습니다. http://code.djangoproject.com/ticket/10117 http://code.djangoproject.com/ticket/4513 http://code.djangoproject.com/ticket/3357

좌절감을 느끼기 때문에 라이브 서버를 별도의 스레드로 시작하고 나중에 청소하는 라이브러리를 썼습니다. http://devel.almad.net/trac/django-sane-testing/ . 또한 런타임 MonkeyPatching으로 Django의 서버 멀티 스레드를 시작하고 대신 Cherrypy HTTP를 사용할 수 있습니다 (어쨌든 더 좋습니다).

유일한 문제는 코를 테스트 프레임 워크로 사용해야한다는 것입니다 (표준 유닛 테스트와 100% 뒤로 호환되지만 이미 다른 것을 사용하는 경우). 그런 다음-with-django 및-with-djangoliveserver/-with-Cherrypyliveserver를 사용할 수 있습니다. 그것이 Thrift와 어떻게 작동하는지 모르겠습니다.

조심하십시오 :

  • 버그를 버그로 버그하지 마십시오.
  • Windmill은 동일한 솔루션을 제공하므로 Windmill을 사용하는 경우 항만 충돌이 발생할 수 있습니다.
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top