Question

Je voudrais faire des tests de haut niveau de mon application mochiweb, comme il est possible de le faire en Python avec WebTest, dans Django avec le client de test et Ruby on Rails avec des tests fonctionnels ou d'intégration. Je ne suis pas trop pointilleux sur la façon de le faire. En fait, je voudrais juste d'envoyer ou simulent des requêtes HTTP et faire des affirmations sur le résultat.

Je refactorisé mon code pour que mes demandes gestionnaire ne remettrait pas Req:respond() eux-mêmes, mais un retour {Code, Headers, Body} tuple. Cela me permet de construire des demandes fictives avec mochiweb_request:new(), les transmettre à mon répartiteur de demande et de faire des affirmations sur le résultat en utilisant EUnit:

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.

Maintenant, mon problème est de savoir comment tester les requêtes POST. Je ne trouve rien dans mochiweb qui me permettrait de le faire. De la lecture de code mochiweb, il semble que lorsque Req:parse_post() est appelé, il déclenche une lecture sur une prise. J'ai trouvé un code de test intéressant dans src / mochiweb.erl . Apparemment, cela implique la construction de messages HTTP, les écrire sur une prise et la lecture de l'arrière de réponse. J'ai essayé de le faire dans mon propre code de test, mais je ne l'ai pas réussi à obtenir nulle part après quelques heures. Je commence à me demander si je vais dans la bonne direction. Peut-être que je dois découpler encore plus ma fonctionnalité de la plomberie HTTP, par exemple. pas appeler Req:parse_post() à partir de mes gestionnaires de requêtes. Une autre solution je pense serait d'utiliser une bibliothèque de tests Web tiers, pas nécessaire écrit en Erlang. Peut-être quelque chose dans Ruby ou Python ou peut-être même Sélénium.

Alors, quelle solution préconisez-vous pour faire des tests fonctionnels ou l'intégration d'une application mochiweb?

Était-ce utile?

La solution

i utiliser le serveur de test commun et pour tester i utiliser IBrowse. Voici un exemple:

post_cap_query_no_caps(_Config) ->
A="<?xml version=\"1.0\" encoding=\"utf-8\"?><query><capabilities/></query>",
{ok, "200", _C, Body}=ibrowse:send_req("http://localhost:8000/devices",  XML_CONTENT_TYPE, post, A),
"<devices/>" == Body.

Autres conseils

Nous découpler la plupart de nos tests de la plomberie HTTP. En général, la bonne chose à faire dans un environnement fonctionnel de toute façon.

Il y a un code de eunit dans src / mochiweb_multipart.erl qui est probablement plus pertinent pour votre cas d'utilisation particulière.

Pourquoi ne pas utiliser tout simplement un client HTTP pour faire les appels? J'utilise IBrowse pour le test du système mon serveur webmachine, y compris les données de afficherons au besoin.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top