<?xml version="1.0" encoding="UTF-8"?> <rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:sy="http://purl.org/rss/1.0/modules/syndication/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" ><channel><title>Christoph Bünte&nbsp;&raquo; Software Entwicklung Berlin</title> <atom:link href="http://www.christophbuente.de/?s=Softwareentwicklung%20anleitung&#038;feed=rss2" rel="self" type="application/rss+xml" /><link>http://www.christophbuente.de</link> <description>Software Entwicklung</description> <lastBuildDate>Tue, 03 Aug 2010 15:37:30 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <generator>http://wordpress.org/?v=3.0.1</generator> <item><title>canoo webtest &#8211; Web-Anwendungen automatisch testen</title><link>http://www.christophbuente.de/2007-11-17-canoo-webtest-web-anwendungen-automatisch-testen/</link> <comments>http://www.christophbuente.de/2007-11-17-canoo-webtest-web-anwendungen-automatisch-testen/#comments</comments> <pubDate>Sat, 17 Nov 2007 19:53:56 +0000</pubDate> <dc:creator>Christoph Bünte</dc:creator> <category><![CDATA[Java JEE]]></category> <category><![CDATA[Software Entwicklung]]></category> <category><![CDATA[Testing]]></category> <category><![CDATA[ant]]></category> <category><![CDATA[automatisches testen]]></category> <category><![CDATA[canoo webtest]]></category> <category><![CDATA[databases]]></category> <category><![CDATA[deployment]]></category> <category><![CDATA[howto]]></category> <category><![CDATA[J2EE]]></category> <category><![CDATA[Java]]></category> <category><![CDATA[JEE]]></category> <category><![CDATA[junit]]></category> <category><![CDATA[unit test]]></category> <category><![CDATA[user acceptance test]]></category><guid isPermaLink="false">http://www.christophbuente.de/2007-11-17-canoo-webtest-web-anwendungen-automatisch-testen/</guid> <description><![CDATA[In der Softwareentwicklung haben sich in den letzten Jahren diverse Praktiken des automatisierten Testens etabliert. Die bekannteste Methode dürfte der Unit Test sein. Dabei wird jede Komponente einer Anwendung in einer wohldefinierten Umgebung einzeln abgetestet. In Java lässt sich diese Art Tests sehr einfach mit JUnit und Ant bewerkstelligen. Sollen aber sogenannte Usecases einer Web-Anwendung [...]]]></description> <content:encoded><![CDATA[<p>In der Softwareentwicklung haben sich in den letzten Jahren diverse Praktiken des automatisierten Testens etabliert. Die bekannteste Methode dürfte der <a href="http://de.wikipedia.org/wiki/Modultest">Unit Test</a> sein. Dabei wird jede Komponente einer Anwendung in einer wohldefinierten Umgebung einzeln abgetestet. In Java lässt sich diese Art Tests sehr einfach mit <a href="http://www.junit.org/">JUnit</a> und <a href="http://ant.apache.org/">Ant</a> bewerkstelligen. Sollen aber sogenannte Usecases einer Web-Anwendung überprüft werden, stößt man schnell an die Grenzen des machbaren. Schließlich werden Dienste vorausgesetzt, die nur der <acronym title="Java Enterprise Edition" lang="en">JEE</acronym>-Container ( <a href="http://tomcat.apache.org/">Tomcat</a>, <a href="http://www.jboss.org/">JBoss</a>) zur Verfügung stellt. Diese Dienste sind beim Testen einer Einheit ausserhalb des Containers nicht zwangsläufig vorhanden. Oft wird aus diesen Gründen das Testen mit echten Personen durchgeführt. Doch steigt mit der Anzahl der Usecases der Testaufwand exponentiell, was dazu führt, dass nicht alle Tests auf jede neue Version angewendet werden. In diesem Artikel werde ich zeigen, wie eine Web-Anwendung mit Hilfe von <a href="http://webtest.canoo.com">Canoo Webtest</a> automatisch abgetestet werden kann.</p><p><span id="more-19"></span></p><p>Canoo Webtest bietet dem Benutzer die Möglichkeit, eine Web-Anwendung automatisch zu testen. Basierend auf der <a href="http://ant.apache.org/">Ant</a> Technologie können Tests in einem menschenlesbaren <acronym title="Extensible Markup Language"><a href="http://de.wikipedia.org/wiki/Extensible_Markup_Language">XML</a></acronym>-Dialekt deklariert werden. Ein simples Beispiel könnte so aussehen:</p><pre escaped="true" lang="xml">&lt;steps&gt;
  &lt;invoke
    description="Loginseite aufrufen"
    url="/login" /&gt;
  &lt;verifyTitle
    description="Seitentitel sollte folgender sein: "
    text="Anmeldung" /&gt;
  &lt;setInputField
    description="Setze Benutzernamen"
    name="username"
    value="max.mustermann" /&gt;
  &lt;setInputField
    description="Setze Passwort"
    name="password"
    value="mypassword" /&gt;
  &lt;clickButton
    description="Klick den login Knopf"
    name="login" /&gt;
  &lt;verifyTitle
    description="Seitentitel sollte folgender sein:"
    text="Willkommen"  /&gt;
&lt;/steps&gt;</pre><p>Doch als erstes muss Canoo Webtest <a href="http://webtest.canoo.com/webtest/manual/Downloads.html">heruntergeladen</a> und installiert werden. Keine Angst, das geht schnell und unkompliziert. Für den produktiven Einsatz empfehle ich die neueste, stabile Version. Von den Snapshots muss ich leider abraten, da beim erzeugen eines Projektes wichtige Dateien fehlten. Nach dem herunterladen der <code>build.zip</code> Datei kann das Archiv in ein beliebiges Verzeichnis entpackt werden. In diesem Verzeichnis muss sich danach ein <code>bin</code> Verzeichnis befinden, welches die Ausführungsskripte für Windows und Unix beinhaltet.</p><p>Dieses Verzeichnis muss dem Ausführungspfad bekannt gemacht werden, sodass Canoo Webtest einwandfrei verwendet werden kann.</p><ul><li>Unter Windows geht das wie folgt:<ul><li>In den Systemeinstellungen (Windows-Taste + Pause) wählt man den Reiter &#8220;Erweitert&#8221;.</li><li>Dort drückt man den Knopf &#8220;Umgebungsvariablen&#8221; und fügt eine neue Variable WEBTEST_HOME mit der entsprechenden Pfadangabe hinzu: &#8220;C:\Programme\Webtest&#8221; hinzu.</li><li>Anschließend bearbeitet man die Variable &#8220;Path&#8221; und fügt am Ende folgendes an: &#8220;;%WEBTEST_HOME%\bin&#8221;.</li></ul></li><li>Unter Linux/Unix:<ul><li> <code>setenv WEBTEST_HOME /usr/local/webtest</code><br /> <code>setenv PATH $PATH:$WEBTEST_HOME/bin</code> in der <code>~/.login (tcsh)</code></li><li> <code>export WEBTEST_HOME=/usr/local/webtest</code><br /> <code>export PATH=$PATH:$WEBTEST_HOME/bin</code> in der <code>~/.bashrc</code> oder <code>~/.bash_login (bash)</code></li></ul></li></ul><p>Canoo Webtest generiert auf Wunsch ein Beispielprojekt, mit dem man sofort loslegen kann. Auf der Kommandozeile führt man folgenden Befehl aus:</p><p><code>webtest.sh -f pfad/zur/webtest/installation/webtest.xml wt.createProject</code></p><p>Während der Ausführung wird man nach einem Projektnamen gefragt. Ein gleichnamiges Verzeichnis wird nach der Eingabe im aktuellen Verzeichnis angelegt. Das neu angelegte Projekt enthält ein paar Beispieltests und Vorlagen. Um die Tests auszuprobieren ruft man lediglich <kbd>webtest.sh</kbd> im Verzeichnis des neu erstellten Projektes auf. Nach Abschluß aller Tests wird im Verzeichnis <code>results</code> ein HTML Report erzeugt, der automatisch angezeigt wird.</p><p>Um eigene Tests zu verwenden, löscht man im Verzeichnis <code>tests</code> am besten alle Dateien bis auf <code>allTests.xml</code> und eine weitere beliebige Datei. In der Datei <code>allTests.xml</code> werden alle vorhandenen Testdateien aufgerufen. Sie stellt das Verzeichnis aller auszuführenden Tests dar.</p><pre lang="xml">&lt;?xml version="1.0"?&gt;
&lt;project name="allTests" default="test"&gt;
  &lt;target name="test" description="führt alle tests aus"&gt;
    &lt;ant antfile="loginTest.xml"/&gt;
  &lt;/target&gt;
&lt;/project&gt;</pre><p>Der anderen Datei gibt man einen sprechenden Namen, in diesem Fall <code>loginTest.xml</code>. In dieser Datei wird ein Testfall deklariert, welcher so aussehen könnte:</p><pre escaped="true" lang="xml">&lt;?xml version="1.0"?&gt;
&lt;!DOCTYPE project SYSTEM "../dtd/Project.dtd"&gt;
&lt;project name="loginTest" default="test"&gt;
  &lt;target name="test"&gt;
    &lt;webtest name="loginTest"&gt;
      &amp;config;
      &lt;steps&gt;
        &lt;invoke
          description="Loginseite aufrufen"
          url="/login" /&gt;
        &lt;verifyTitle
          description="Seitentitel sollte folgender sein: "
          text="Anmeldung" /&gt;
        &lt;setInputField
          description="Setze Benutzernamen"
          name="username"
          value="max.mustermann" /&gt;
        &lt;setInputField
          description="Setze Passwort"
          name="password"
          value="mypassword" /&gt;
        &lt;clickButton
          description="Klick den login Knopf"
          name="login" /&gt;
        &lt;verifyTitle
          description="Seitentitel sollte folgender sein:"
          text="Willkommen"  /&gt;
      &lt;/steps&gt;
    &lt;/webtest&gt;
  &lt;/target&gt;
&lt;/project&gt;</pre><p>Sicher ist aufgefallen, dass in dieser Datei kein Server deklariert ist, der getestet werden soll. Jedoch steht als erstes Element im &lt;webtest&gt; Element folgender Text: <code>&amp;config;</code><br /> Dieser verweist auf die Datei <code>includes/config.xml</code>, welche alle Einstellungen enthält. Hier können nun der Name, Port und Protokoll des zu testenden Server eingetragen werden:</p><pre lang="xml">&lt;!--
Wie alle Dateien dieses Ordners, ist dieser Inhalt als DTD Entität verfügbar (in diesem Fall &amp;config;)
--&gt;;
&lt;config
  host="www.meinserver.de"
  port="8080"
  protocol="http"
  basepath=""
  summary="true"
  saveresponse="true"
  resultfile="${wt.resultfile}"
  resultpath="${wt.resultpath}"
  haltonfailure="false"
  haltonerror="false" /&gt;</pre><p>Um eine möglichst vollständige Testabdeckung zu erreichen, fügt man in separaten Dateien für alle erdenklichen Anwendungsfälle Tests hinzu und trägt Sie in die Datei <code>allTests.xml</code> ein. Eine Dokumentation der zur Verfügung stehenden Schritte (Steps) findet man in der Anleitung für die <a href="http://webtest.canoo.com/webtest/manual/syntaxCore.html">Canoo Webtest Core Steps</a>. Über mehr oder weniger generische Anwendungsfälle und deren sinnvolle Abtestung kann gerne in den Kommentaren berichtet werden.</p><div id="crp_related"><h3>Ähnliche Beiträge:</h3><ul><li><a href="http://www.christophbuente.de/2008-01-24-stripes-framework-tests-fur-actionbeans-im-wizard-modus/" rel="bookmark" class="crp_title">Stripes Framework &#8211; Tests für ActionBeans im Wizard Modus</a></li><li><a href="http://www.christophbuente.de/2007-12-21-voiceglue-konfiguration-server-fur-sprachanwendungen-einrichten/" rel="bookmark" class="crp_title">VoiceGlue Konfiguration &#8211; Server für Sprachanwendungen einrichten</a></li><li><a href="http://www.christophbuente.de/2007-11-25-ruby-on-rails-auf-mac-os-x-5-minuten-kurzanleitung/" rel="bookmark" class="crp_title">Ruby on Rails auf Mac OS X &#8211; 5 Minuten Kurzanleitung</a></li><li><a href="http://www.christophbuente.de/2007-11-24-advancing-rails-ein-workshop-mit-david-a-black/" rel="bookmark" class="crp_title">Advancing Rails &#8211; Ein Workshop mit David A. Black</a></li><li><a href="http://www.christophbuente.de/2010-07-20-rails-hosting-bei-rocket-rentals-auch-mit-staging-umgebung/" rel="bookmark" class="crp_title">Rails Hosting bei Rocket Rentals &#8211; auch mit Staging Umgebung</a></li></ul></div>]]></content:encoded> <wfw:commentRss>http://www.christophbuente.de/2007-11-17-canoo-webtest-web-anwendungen-automatisch-testen/feed/</wfw:commentRss> <slash:comments>10</slash:comments> </item> </channel> </rss>
<!-- Performance optimized by W3 Total Cache. Learn more: http://www.w3-edge.com/wordpress-plugins/

Minified using memcached
Page Caching using memcached
Database Caching 5/18 queries in 0.016 seconds using memcached
Object Caching 436/468 objects using memcached

Served from: www.christophbuente.de @ 2010-09-08 10:30:38 -->