Python에서 WebTest, Django에서 테스트 클라이언트, Ruby on Rails에서 기능 테스트 또는 통합 테스트를 할 수있는 것처럼 mochiweb 앱에 대한 높은 수준의 테스트를하고 싶습니다. 나는 그것을하는 방법에 관하여 너무 까다 롭지 않다. 기본적으로 나는 단지 HTTP 요청을 보내거나 시뮬레이션하고 결과에 대한 단언을하고 싶습니다.mochiweb 응용 프로그램을 테스트하는 방법은 무엇입니까?
내 요청 처리기가 Req:respond()
을 호출하지 않지만 {Code, Headers, Body}
튜플을 반환하도록 코드를 리팩터링했습니다. 이 날 EUNIT을 사용하여 결과에 대한 주장을, mochiweb_request:new()
와 더미 요청을 만들 내 요청 디스패처에게 전달하고 만들 수 있습니다 :
make_request(Method, Path) ->
Request = mochiweb_request:new(nil, Method, Path, {1, 1},
mochiweb_headers:make([{"Accept", "text/html"}])),
Response = myapp:dispatch(Request),
Response.
signin_test() ->
{Code, _, _} = make_request('GET', "/signin"),
?assertEqual(Code, 200),
ok.
지금 내 문제는 POST 요청을 테스트하는 방법입니다. 나는 그것을 할 수있게 해주는 떡치기에서 아무것도 찾지 못했습니다. mochiweb 코드를 읽는 것으로부터
Req:parse_post()
이 호출되면 소켓에 대한 읽기가 트리거됩니다.
src/mochiweb.erl에 흥미로운 테스트 코드가 있습니다. 분명히 이것은 HTTP 메시지를 작성하고 소켓에 쓰고 응답을 다시 읽는 것을 포함합니다. 내 자신의 테스트 코드에서이 작업을 시도했지만 몇 시간이 지나면 어디든 갈 수 없었습니다. 나는 올바른 방향으로 가고 있는지 궁금해지기 시작했습니다. 어쩌면 HTTP 배관에서 더 많은 기능을 분리해야 할 수도 있습니다. 내 요청 처리기 내에서
Req:parse_post()
으로 전화하지 마십시오. 내가 생각하고있는 또 다른 해결책은 Erlang에 쓰여진 서드 파티 웹 테스트 라이브러리를 사용하는 것입니다. 아마도 Ruby 나 Python 또는 심지어 Selenium에있는 것일 수도 있습니다.
그래서 mochiweb 앱의 기능적 테스트 또는 통합 테스트를 수행 할 때 어떤 솔루션을 권하고 싶습니까?
ibrowse를 가리켜 주셔서 감사합니다. 당신은 그것을 eunit와 잘 작동하도록 만들었습니까? eunit fixtures facility를 사용하여 서버를 시작/중지하고 테스트 환경을 설정합니까? –