
Ant-Script konfigurieren
Ein Ant-Script wird verwendet, um verschiedene Tasks in der Stapelverarbeitung von Komponententestprojekten, z. B. das Erstellen, Implementieren und Testen der Projekte, zu initialisieren. Sie können Ihr eigenes Ant-Script erstellen oder das in diesem Thema angezeigte Script ändern. Üblicherweise heißt das Ant-Script 'build.xml'.
Informationen zu diesem Vorgang
Vorgehensweise
- Definieren Sie die Eigenschaften für Ihre Umgebung.
- Prüfen Sie die Komponententestprojekte in CVS.
- Komprimieren Sie die Projekte in eine Projektaustauschdatei.
- Erstellen Sie die Projekte.
- Starten Sie den Server.
- Implementieren Sie die Projekte auf dem Server.
- Geben Sie eine GET-Operation an, um die Tests mithilfe von Servlet-Tasks auszuführen.
- Entfernen Sie die Projekte vom Server.
- Stoppen Sie den Server.
Beispiel
Das Codefragment unten gibt die Inhalte eines Ant-Beispielscripts namens 'build.xml' wieder, das verwendet wird, um das Beispiel 'Hello World - Teil 1' von IBM® Integration Designer automatisch zu testen. Das Script ruft Extraktions- und Buildoperationen für die getesteten Projekte auf. Daher weist das Script eine Abhängigkeit von einer der folgenden Bedingungen auf:
- Das Vorhandensein eines Arbeitsbereichs, der IBM Integration Designer-Module enthält.
- Die Verwendung von CVS als Quellcode-Repository.
Überdies hängt das Script von der abgeschlossenen Importaktion des Beispiels 'Hello World - Teil 1' und der Erstellung eines Komponententestprojekts und einer Testsuite ab.
<!-- Beispielkomponententestscript für die Verwendung mit IBM Business
Process Manager --> <project name="Automated Test Case Run" basedir="." default="run"> 1 <!-- Getestete Module, Bibliotheken und Testprojekte -->
<property name="module1" value="HelloWorldMediation" />
<property name="module2" value="HelloService" />
<property name="library1" value="HelloWorldLibrary" />
<property name="testproject1" value="HelloWorldTest" />
2 <!-- Die folgenden Abschnitte enthalten Eigenschafteneinstellungen -->
<!-- Servereigenschaften -->
<property name="wps.home" value="C:/WID75_WTE/runtimes/bi_v75" />
<property name="wps.username" value="admin" />
<!-- Serverkennwort muss in Klartext vorliegen. Wenn Sie das Serverkennwort nicht -->
<!-- in einem Script speichern möchten, kann es stattdessen in -->
<!-- soap.client.props gespeichert werden. Siehe die Kennwortoption -->
<!-- in der Befehlsreferenz von wsadmin: -->
<!-- http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.nd.multiplatform.doc/info/ae/ae/rxml_commandline.html -->
<property name="wps.password" value="admin" />
<property name="wps.node" value="qnode" />
<property name="wps.server" value="server1" />
<!-- Eigenschaften des Quellcode-Repositorys -->
<!-- Dieses Beispiel verwendet CVS. -->
<property name="cvs.username" value="cvsuser" />
<property name="cvs.password" value="cvspassword" />
<property name="cvs.root" value=":pserver:${cvs.username}:${cvs.password}@cvs:/cvs/repository" />
<property name="cvs.packageroot" value="testProjects" />
<property name="cvs.stream" value="HEAD" />
<!-- Build- und Testeigenschaften -->
<property name="test.servlet.url" value="http://localhost:9080/HelloWorldTestWeb/TestServlet?username=${wps.username}&password=${wps.password.encoded}" />
<property name="test.output.file" value="${build.output.dir}/TestOutput.xml" />
<property name="build.output.dir" value="C:/BuildOutputDir" />
<property name="build.working.dir" value="C:/BuildWorkingDir" />
<!-- Die Arbeitsbereichsposition kann bereits vorhanden sein oder sie kann das -->
<!-- Ziel einer Extraktion des Quellcode-Repositorys sein -->
<property name="workspace.dir" value="D:\Workspaces\20100625cvs2/" />
<!-- Serverkennwort für die URL des Test-Servlets. Kann im Klartext oder -->
<!-- verschlüsselt vorliegen. Zum Verschlüsseln des Kennworts siehe -->
<!-- http://publib.boulder.ibm.com/infocenter/wasinfo/v7r0/index.jsp?topic=/com.ibm.websphere.nd.doc/info/ae/ae/rsec_propfilepwdencoder.html -->
<property name="wps.password.encoded" value="{xor}PjsyNjE=" />
<!-- Definitionen der Ant-Tasks -->
<taskdef name="wsStartApplication"
classname="com.ibm.websphere.ant.tasks.StartApplication" />
<taskdef name="wsStartServer"
classname="com.ibm.websphere.ant.tasks.StartServer" />
<taskdef name="wsStopServer"
classname="com.ibm.websphere.ant.tasks.StopServer" />
<taskdef name="wsInstallApp"
classname="com.ibm.websphere.ant.tasks.InstallApplication" />
<taskdef name="servicedeploy"
classname="com.ibm.websphere.ant.tasks.ServiceDeployTask" />
<taskdef name="wsUninstallApp"
classname="com.ibm.websphere.ant.tasks.UninstallApplication" />
3 <target name="checkout">
<cvs command="export -r ${cvs.stream} -d ${module1}"
package="${cvs.packageroot}/${module1}"
dest="${workspace.dir}"
cvsroot="${cvs.root}"
cvsrsh="ssh"
output="${build.output.dir}/${module1}.extract.log"
quiet="true" />
<cvs command="export -r ${cvs.stream} -d ${module2}"
package="${cvs.packageroot}/${module2}"
dest="${workspace.dir}"
cvsroot="${cvs.root}"
cvsrsh="ssh"
output="${build.output.dir}/${module2}.extract.log"
quiet="true" />
<cvs command="export -r ${cvs.stream} -d ${library1}"
package="${cvs.packageroot}/${library1}"
dest="${workspace.dir}"
cvsroot="${cvs.root}"
cvsrsh="ssh"
output="${build.output.dir}/${library1}.extract.log"
quiet="true" />
<cvs command="export -r ${cvs.stream} -d ${testproject1}"
package="${cvs.packageroot}/${testproject1}"
dest="${workspace.dir}"
cvsroot="${cvs.root}"
cvsrsh="ssh"
output="${build.output.dir}/${testproject1}.extract.log"
quiet="true" />
</target>
4 <target name="createPI">
<!-- Dieses Beispielziel ist gültig, wenn CVS als -->
<!-- Quellcode-Repository eingesetzt wird. Der Ausschluss von **/CVS/** bedeutet, dass keine CVS-Metadaten -->
<!-- in der PI enthalten sind. Wenn Sie ein anderes Quellcode-Repository verwenden, -->
<!-- ändern oder entfernen Sie das Attribut 'exclude'. -->
<zip basedir="${workspace.dir}"
destfile="${build.output.dir}/${module1}.zip"
includes="${module1}/**/**/*, ${library1}/**/**/*"
excludes="**/CVS/**" />
<zip basedir="${workspace.dir}"
destfile="${build.output.dir}/${module2}.zip"
includes="${module2}/**/**/*, ${library1}/**/**/*"
excludes="**/CVS/**" />
<zip basedir="${workspace.dir}"
destfile="${build.output.dir}/${testproject1}.zip"
includes="${testproject1}/**/**/*"
excludes="**/CVS/**" />
</target>
5 <target name="generateEAR" depends="createPI">
<!-- Der nachfolgende Link stellt eine ausführliche Beschreibung der -->
<!-- Task 'serviceDeploy' bereit: -->
<!-- http://publib.boulder.ibm.com/infocenter/dmndhelp/v7r0mx/index.jsp?topic=/com.ibm.websphere.wps.doc/doc/tdep_usingant.html -->
<servicedeploy scaModule="${build.output.dir}/${module1}.zip"
workingDirectory="${build.working.dir}"
outputApplication="${build.output.dir}/${module1}.ear"
wasHome="${wps.home}"
cleanStagingModules="true"
keep="true" />
<servicedeploy scaModule="${build.output.dir}/${module2}.zip"
workingDirectory="${build.working.dir}"
outputApplication="${build.output.dir}/${module2}.ear"
wasHome="${wps.home}"
cleanStagingModules="true"
keep="true" />
<servicedeploy scaModule="${build.output.dir}/${testproject1}.zip"
workingDirectory="${build.working.dir}"
outputApplication="${build.output.dir}/${testproject1}.ear"
wasHome="${wps.home}"
cleanStagingModules="true"
keep="true"
ignoreErrors="true" />
</target>
6 <!-- Die folgenden Abschnitte starten und stoppen den Server -->
<target name="startServer">
<wsStartServer server="${wps.server}"
logFile="${build.output.dir}/start.log"
trace="false"
failonerror="false" />
</target>
<target name="stopServer">
<wsStopServer server="${wps.server}"
logFile="${build.output.dir}/stop.log"
trace="false"
username="${wps.username}"
password="${wps.password}"
failonerror="false" />
</target>
7 <target name="deploy" depends="generateEAR">
<!-- Apps auf dem Server installieren -->
<wsInstallApp ear="${build.output.dir}/${module1}.ear"
user="${wps.username}"
password="${wps.password}"
failonerror="false" />
<wsInstallApp ear="${build.output.dir}/${module2}.ear"
user="${wps.username}"
password="${wps.password}"
failonerror="false" />
<wsInstallApp ear="${build.output.dir}/${testproject1}.ear"
user="${wps.username}"
password="${wps.password}"
failonerror="false" />
<!-- Nach der Installation der Apps müssen sie explizit gestartet werden -->
<wsStartApplication application="${module1}App"
server="server1"
node="${wps.node}"
user="${wps.username}"
password="${wps.password}" />
<wsStartApplication application="${module2}App"
server="server1"
node="${wps.node}"
user="${wps.username}"
password="${wps.password}" />
<wsStartApplication application="${testproject1}App"
server="server1"
node="${wps.node}"
user="${wps.username}"
password="${wps.password}" />
</target>
8 <target name="undeploy">
<wsUninstallApp application="${module1}App"
user="${wps.username}"
password="${wps.password}"
failonerror="false" />
<wsUninstallApp application="${module2}App"
user="${wps.username}"
password="${wps.password}"
failonerror="false" />
<wsUninstallApp application="${testproject1}App"
user="${wps.username}"
password="${wps.password}"
failonerror="false" />
</target>
9 <target name="runTest">
<!-- Den Test mithilfe des Testprojekt-Servlets ausführen -->
<get src="${test.servlet.url}" dest="${test.output.file}" />
</target>
<target name="run"
depends="checkout, startServer, deploy, runTest, undeploy, stopServer">
<!-- Die Ergebnisse der Ausführung anzeigen -->
<loadfile srcFile="${test.output.file}"
property="testoutput" />
<echo message="${testoutput}" />
</target>
</project>
In der folgenden Tabelle sind die wichtigsten Abschnitte des Ant-Scripts mit Beschreibungen aufgeführt.| Abschnitt des Ant-Scripts | Beschreibung |
|---|---|
| 1 Projekte definieren | Die folgenden Projekte aus dem Beispiel 'Hello World - Teil 1' werden im Ant-Script referenziert:
|
| 2 Eigenschaften festlegen | In diesem Abschnitt des Codes sind mehrere Eigenschaften definiert. Wenn das Ant-Script ausgeführt wird, werden die Variablennamen für Module und Projekte als Projekte im Arbeitsbereich angezeigt. Die Eigenschaft test.output.file hat den Wert 'OrderTest.xml'. Dies ist der Name der XML-Ausgabedatei, die die Ergebnisse des Tests enthält. Beachten Sie die Eigenschaft test.servlet.url. Die URL ist für ein Servlet, das im Webprojekt des Komponententestprojekts generiert wird. Die Servletschnittstelle ermöglicht es Ihnen, Testsuites und Testfälle abzurufen sowie vollständige, partielle und bestimmte Testfälle auszuführen. Das Servlet wird im Webprojekt des Komponententestprojekts generiert. Die Servlet-APIs können in das Script eingebunden oder auf eigenständiger Basis verwendet werden. Bei Verwendung auf eigenständiger Basis muss die Anwendung bereits implementiert und der Server aktiv sein. Wenn Sie Anwendungen in einem CVS-System testen, müssen Sie Werte in die Eigenschaftsfelder übergeben, darunter die folgenden:
|
| 3 Projekte prüfen | Komponententestprojekte werden aus CVS ausgecheckt. Ihr Script checkt die Projekte aus, die Sie mithilfe der oben im Script angegebenen CVS-Variablen angegeben haben. Es gibt auch CVS-Befehle, die Sie kennen sollten, wenn Ihr Script Daten aus einem CVS-Repository extrahiert. |
| 4 Projektaustauschdatei erstellen | In diesem Codeabschnitt werden die Komponententestprojekte in eine Projektaustauschdatei komprimiert. Weitere Informationen zu den Komponenten, die in der Projektaustauschdatei enthalten sein müssen, finden Sie im Thema 'CVS mit erforderlichen Artefakten füllen'. |
| 5 EAR-Datei generieren | In diesem Codeabschnitt werden Komponententestprojekte mithilfe der Funktion 'serviceDeploy' in einer Anwendung erstellt. Das Script zieht beim Build der Projekte die Namen in der Projektaustauschdatei heran. Beachten Sie die Abhängigkeit vom vorherigen Abschnitt. Diese Abhängigkeit gibt an, dass die Projektaustauschdatei zuerst erstellt werden muss. |
| 6 Server starten oder stoppen | In diesem Codeabschnitt wird der Server gestartet oder gestoppt. |
| 7 Anwendung auf dem Server implementieren | In diesem Codeabschnitt wird die Anwendung mithilfe der Funktion 'wsadmin' auf dem Server implementiert und gestartet. Voraussetzung ist, dass die Anwendung zunächst erstellt wurde. |
| 8 Anwendung vom Server entfernen | In diesem Codeabschnitt wird die Anwendung vom Server entfernt. |
| 9 Test ausführen | In diesem Codeabschnitt wird eine GET-Operation in Verbindung mit einer URL verwendet, um eine Servlet-Task zum Ausführen der Tests aufzurufen.
Die folgende URL verwendet die integrierten Testfunktionen des Produkts: http://localhost:9080/${test}Web/TestServlet Weitere Informationen zu anderen Servlet-Tasks, die Sie mithilfe einer URL aufrufen können, finden Sie im Thema 'Zusätzliche Servlet-Tasks'. |