Comment puis-je tester un site de formulaires Web?


26

Comment puis-je tester un site de formulaires Web? Il me semble que cela dépend en grande partie de l'état et de la contribution de l'utilisateur, ce ne serait pas faisable.

Si ce n'est pas possible, existe-t-il une alternative automatisée valide?


2
Si vous souhaitez tester automatiquement l'interface utilisateur, vous aurez besoin de quelque chose comme Selenium. Mais, si vous voulez des tests unitaires automatisés , vous n'avez pas besoin de sélénium. Vous avez juste besoin des bons modèles en place. Voir ma réponse.
Matthew Rodatus,

Réponses:


22

Oui, vous pouvez. Vous devez juste faire attention à bien séparer vos préoccupations. En bref, vous devez supprimer toute votre logique du code-behind et la mettre dans d'autres classes.

Il existe deux façons courantes de procéder.

Le moyen le plus simple est de repenser tous vos gestionnaires d'événements en termes de "Quelles informations le système me donne-t-il? De quelles informations ai-je besoin pour remplir la page?" puis fournir une classe de service qui effectue cette conversion.

Dans ce cas, la couche de service doit en savoir très peu sur la nature de votre couche de présentation. Vous devez toujours prendre les données renvoyées par le service et remplir les composants corrects du WebForm dans votre code-behind et cela reste non testé (au moins par des tests unitaires, vous pouvez toujours utiliser des tests d'intégration). Mais c'est rarement là où le code va mal, il est beaucoup plus susceptible d'échouer dans la logique.

Une manière plus compliquée mais plus efficace consiste à utiliser le modèle Model View Presenter . Lorsque nous avons essayé cela, nous avons constaté que les Presenters étaient rapidement devenus très couplés au framework et, plus nous développions MVP, plus il était clair que MVP voulait vraiment être MVC mais ne pouvait pas l'être.

Cela dit, d'autres l'ont fait avec beaucoup de succès - il y a même un framework webformsmvp disponible pour supprimer les charges lourdes - donc votre kilométrage peut varier.


1
@jmoreno: Belle prise! J'ai oublié que WebForms et MVP existent même depuis 5 ans.
pdr

16

De toute évidence, une page entière de formulaires Web n'est pas une unité et ne peut donc pas être testée à l'unité. Cependant, vous pouvez faire certaines choses pour les tests automatisés:

  • test unitaire des composants individuels de la page (toutes les méthodes qui exécutent la logique réelle)
  • composants de test unitaire utilisés par la page (contrôles personnalisés, logique métier sous-jacente, etc.)
  • test de fonctionnalité automatisé (en contrôlant à distance un navigateur ou en envoyant des requêtes HTTP via quelque chose comme cURL)
  • tests de pénétration automatisés (il existe des outils qui tenteront de trouver des points d'injection possibles et exécuteront automatiquement des attaques par injection inoffensives mais détectables sur votre page)
  • test de charge
  • vérifier la mise en page par rapport à une liste de puces de convivialité et de style maison (bien que cela soit très difficile à automatiser; il est généralement plus possible de le faire manuellement de temps en temps)

-1 Désolé mais les tests de charge, les tests de pénétration et la vérification de la disposition n'ont rien à voir avec les tests unitaires
Tom Squires

2
@TomSquires: bien sûr qu'ils ne le sont pas, et si vous lisez attentivement ma réponse, vous remarquerez que je n'ai jamais dit qu'ils l'étaient. Mais la question semble confondre les concepts de tests unitaires et de tests automatisés en général, c'est pourquoi j'ai énuméré divers tests automatisés significatifs que vous pouvez lancer sur un formulaire Web.
tdammers

d'accord, tester une page Web est plus susceptible d'être une forme de test d'intégration qu'un test unitaire par des définitions strictes, bien qu'il soit toujours bon d'automatiser tout ce que vous pouvez
jk.

6
@TomSquires: downvote totalement injustifié. Votre propre question commence par tester un site entier, ce qui n'a rien à voir avec les tests unitaires. Tdammers a identifié différentes façons de tester l'ensemble et les pièces et a identifié la place des tests unitaires. +1
azheglov

3
C'est suffisant. Je le reprends
Tom Squires

9

Je suis désolé d'avoir raté la partie "unité" de la question ...

SeleniumHQ est votre ami pour les tests du front-end. Ce n'est pas un test unitaire, plutôt un test de boîte noire. Vous devez toujours penser à des cas de test valides ...


1
+1 Votre réponse est apparue alors que j'appuyais sur "poster votre réponse" pour dire exactement la même chose.
yannis

2
De plus, comme op pose des questions sur les tests unitaires, ajoutons simplement que la question est en fait un test fonctionnel (ity) , ce qui est plus approprié (raisonnable, faisable) lors du test des éléments d'entrée utilisateur.
yannis

+1 parce que je continue à vouloir l'utiliser, mais je n'y suis jamais parvenu. Quelqu'un l'a-t-il utilisé, est-il bon et mérite-t-il d'être mis en œuvre?
NimChimpsky

6
Le sélénium est un outil fantastique mais il n'a rien à voir avec les tests unitaires.
pdr

Certes, il semble que j'ai ignoré ces informations dans la question: /
WarrenFaith

6

Parlant d'expérience: seulement si c'est bien fait. Par «droit», j'entends un code-back minimal et quelque chose comme le Model-View-Presenter susmentionné pour rendre le formulaire Web «stupide». Cela s'avère généralement très difficile avec les applications de friches industrielles, car elles n'ont pas été conçues dans cet esprit et c'est un effort presque herculéen de refactoriser / réécrire des pages pour l'utiliser.


1

watin

Je trouve que les tests unitaires Web sont extrêmement utiles, même si c'est juste pour donner une idée générale d'un bug de régression ou pour de nouveaux projets.

En ce qui concerne l'état, vous créez vos tests unitaires comme vous le feriez avec des tests non-UI - ils effacent la base de données au début du test et reconstruisent la base de données pour ne contenir que l'état de démarrage. Chaque test unitaire encapsule ensuite une seule page, ou généralement une tâche distincte sur une page.

http://watin.org/ est un autre outil de test Web mais pour C # /. NET. Vous écrivez les tests sous forme de tests unitaires:

[Test] 
public void SearchForWatiNOnGoogle()
{
  using (var browser = new IE("http://www.google.com"))
  {
    browser.TextField(Find.ByName("q")).TypeText("WatiN");
    browser.Button(Find.ByName("btnG")).Click();

    Assert.IsTrue(browser.ContainsText("WatiN"));
  }
}

Il est actuellement basé sur IE mais a un support expérimental pour Firefox et Chrome. Vous pouvez à peu près automatiser tout ce que vous feriez dans les tests manuels, y compris l'interaction Javascript.


Ack que c'est 2016. La visite d'aujourd'hui sur le site de WatiN m'indique que WatiN est peut-être mort. Les documents sont clairsemés, pas à jour et les vidéos ne sont pas lues. Je ne me plains pas - j'ai une énorme gratitude pour les outils volontaires open source - ce commentaire est pour aider d'autres personnes comme moi. La réponse est bonne, soulignant simplement que le démarrage peut nécessiter un apprentissage pratique autonome.
qxotk

1
Aide supplémentaire pour quiconque pense à la voie WatiN, confirmation qu'elle stagne + où chercher aujourd'hui: stackoverflow.com/questions/118531/…
qxotk

0

Vous ne pouvez pas vraiment tester de manière unitaire un site Web, simplement parce que les demandes Web se produisent sur un câble (ou via une pile TCP). Ainsi, les tests ne correspondent pas à la définition de "test unitaire", ils seraient, vraisemblablement, des tests de bout en bout.

Pour ces types de tests, vous pouvez utiliser une suite comme Selenium qui exécute un navigateur Web dans les coulisses. Un mot d'avertissement cependant: généralement ce type de test est très difficile et imprévisible, car il y a beaucoup de pièces mobiles!

Plus intéressant cependant, cela m'inquiète un peu pourquoi vous auriez besoin de tester des formulaires Web. N'insérez-vous pas trop de logique dans le code et avez-vous une logique commerciale anémique par hasard?


-1

Jasmin

Au cours des 5 dernières années, Jasmine est devenu un outil clé pour les tests unitaires frontaux. Il est souvent intégré dans les tests de construction automatiques avec Node et npm

Par https://en.wikipedia.org/wiki/Jasmine_(JavaScript_testing_framework) :

Jasmine est un framework de test open source pour JavaScript. [2] Il vise à fonctionner sur n'importe quelle plate-forme compatible JavaScript, à ne pas empiéter sur l'application ni sur l'IDE, et à avoir une syntaxe facile à lire. Il est fortement influencé par d'autres cadres de tests unitaires, tels que ScrewUnit, JSSpec, JSpec et RSpec. [3]

Malgré toutes les mentions de javascript, il peut également être utilisé pour les tests unitaires d'un formulaire Web simple.


Bien que javascript soit utilisé dans les formulaires Web, ce n'est pas la méthode principale de mise à jour de l'interface utilisateur
Tom Squires

Vrai. Cependant, l'alternative est ...? C'est pourquoi, même s'il n'est pas destiné à cet effet, Jasmine fonctionne très bien. De plus, la syntaxe est presque identique à RSpec que les programmeurs Ruby adorent.
Michael Durrant

-2

ASP.NET

Lors du développement d'un site ASP.NET, nous avons pu exécuter des tests unitaires sur:

  • Le domaine
  • Contrôleurs / présentateurs BL
  • le code derrière les pages Web Forms

Il est possible de TDD tout cela, selon votre architecture. La seule chose que vous ne pouvez pas tester est la disposition du fichier de balisage.


3
Cette réponse dit "oui c'est possible" à la question de "comment". Pas vraiment utile.
RubberDuck
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.