From: Udo Spallek Date: Wed, 29 Nov 2006 18:38:57 +0000 (+0000) Subject: Erste Version der Lx-Office Testumgebung. X-Git-Tag: release-2.4.0^2~139 X-Git-Url: http://wagnertech.de/git?a=commitdiff_plain;h=4c2d836d17061a19020dd8fc0ae3d42b3e1b010a;p=kivitendo-erp.git Erste Version der Lx-Office Testumgebung. Weitere Selenium Testskripte folgen. Bitte alle READMES lesen, und die Tests selbst testen. Freue mich über Feedbacks. --- diff --git a/t/README.de b/t/README.de new file mode 100644 index 000000000..84b65dcaa --- /dev/null +++ b/t/README.de @@ -0,0 +1,142 @@ +Lx-Office Testumgebung + +Mit der hier beschriebenen Testumgebung ist es möglich, Lx Office +automatisiert zu testen. Automatische Tests haben den großen +Vorteil, das verschiedene Standardtests nicht immer wieder von +Hand durchgespielt werden müssen, sondern einmal in einem Skript +verschriftet immer wieder verwendet werden können. +Weitere Informationen können im Wiki nachgelesen und ergänzt werden: +http://wiki.lx-system.de/index.php/Automatisiertes_Testen_von_Modulen + + + +Aufbau der Testumgebung +Im Verzeichnis t/ finden sich alle testrelevanten Skripte.Der +Aufruf der Tests folgt über +#perl t/lx-office.t + +lx-office.t ruft alle Einzeltests der Reihe nach auf und fasst sie +übersichtlich zusammen. Die Einzeltests befinden sich in einem +Unterordner von t/. Jeder Unterorder enthält eine Datei AllTests.t, +die wiederrum alle einzelnen Tests des Unterordners aufruft. + + + +t/lxtest.conf t/lxtest.conf.default +Für die einzelnen Tests werden verschiedene Packetvariablen (globals) +zur Verfügung gestellt, um die Testskripte einfach auf +unterschiedliche Installationen anpassen zu können und um sich auf +die selbe Test-Datenbank und denselben Test-Benutzer beziehen zu können. + +Die Datei t/lxtest.conf.default muss zunächst nach t/lxtest.conf +kopiert werden. Dann ist die Datei t/lxtest.conf auf die lokalen +Gegebenheiten anzupassen. Besnders die für Selenium nötigen +Einstellungen bedürfen einer Überarbeitung. + +Definiert werden die Variablen in der Datei t/lxtest.conf. +Aufgerufen werden die Variablen $lxtest->{VARIABLE}. +Es ist ratsam, die vorhandenen Tests zu untersuchen, um sich ein Bild +von den Möglichkeiten zu machen. + + + +Selenium +Selenium ist eine Testsuite, mit der man Browserinteraktionen +simulieren und die Ergebnisse auswerten kann. Der unschlagbare +Vorteil von Selenium für das Testen von Lx ist es, dass es +möglich wird, eine Test-Datenbank in einfachen Schritten +erstellen zu können. Um Seleniumtests durchführen zu können, +ist es nötig, das Packet Selenium Remote Control (Selenium RC) +lokal zu installieren (Java Runtime ebenfalls erforderlich). +Selenium RC gibt es unter: +http://www.openqa.org/selenium-rc/ + +Für den Betrieb von Selenium ist eine lokale Workstation mit +Browserumgebung nötig. + +Der Aufruf von selenium erfolgt unter Windows bspw. so: +C:\java -jar "C:\selenium-remote-control-0.9.0 +\server\selenium-server.jar" + +Unter Linux bspw. so: + + +Die lokalen Einstellungen sind unbedingt in der +t/lxtest.conf nachzutragen! Weitere Infos unter +http://www.openqa.org/selenium-rc/ + +Dann reicht ein Start von +#perl t/lx-office.t +um dem Testskript bei der Arbeit zuzuschauen. + +Leider ist es nötig, auf dem Seleniumserver nach jedem Aufruf +des Testskripts das Sicherheitszertifikat von LINET Services zu +akzeptieren, was etwas nervig ist. + + +t/selenium/ +Der Ordner selenium beinhaltet alle einzelnen selenium Testskripte. +Aufgerufen werden die Skripte über t/selenium/AllTests.t . +Neue Tests müssen in dieser Datei angemeldet werden. +Ziel ist es eine Demodatenbank von Lx mit Daten zu füllen und die +Abhängigkeiten untereinander zu prüfen. Dazu sind die +individuellen Testskripte nummeriert (001NAME.t bis 999NAME.t) um +sie der Reihe nach abzuarbeiten. + +Die folgenden Skripte sind bereits installiert: + +001CreateTestDatabase.t Erzeugt eine neue Testdatenbank +002CreateTestUser.t Erzeugt einen neuen Testbenutzer +... +... +998DeleteTestUser.t Löscht den Testbenutzer +999DeleteTestDatabase.t Löscht die Testdatenbank + +Dazwischen befinden sich die Skripte, um eine Demodatenbank +aufzubauen und zu prüfen. + + + +t/backend/ +In diesem Ordner befinden sich Backend Testskripte. + + + +t/frontend/ +In diesem Ordner befinden sich Frontend Testskripte, die nicht +unter selenium getestet werden. + + + +Was wenn ein Test fehlschlägt? +Das Fehlschlagen von Tests kann verschiedene Gründe haben. +1. Der Test selbst ist fehlerhaft. +2. Es haben sich Lx Screens verändert, so das der Test von + falschen Voraussetzungen ausgeht +3. Die zu testende Funktion ist fehlerhaft + +Nachdem 1. und 2. ausgeschlossen wurden, sollte zu 3. ein Bugreport +angelegt werden. +Bugreports unter https://lx-office.linet-services.de/bugzilla/ +anlegen. + + + +Eigene Tests +Eigene testskripte können einfach in die Testumgebung eingebunden +werden. Die vorhandenen Skripte können als Anleitung dienen. +Bei Selenium Tests ist es am leichtesten, mit Firefox und der +Selenium IDE Extension Testpfade einfach aufzuzeichnen. +( http://www.openqa.org/selenium-ide/ ) +Dann werden die Selenium IDE Testaufzeichnungen in Perl +umgewandelt und angepasst. Fertige Skripte werden mit einer +laufenden Nummer versehen und in den Ordner t/selenium/ kopiert. +Dann wird das Skript in der Datei t/selenium/AllTests.t eingefügt. +Ein erster Probelauf mit +#perl t/selenium/AllTests.t sollte den Test absolvieren. +(Dabei kann es nötig sein, andere Tests auszukommentieren, weil +selenium Tests mitunter lange Laufzeiten haben können, oder weil die Demodatenbank +und der Benutzer am Ende zu Debugging Zwecken nicht gelöscht werden +sollen.) + + diff --git a/t/backend/README.backend b/t/backend/README.backend new file mode 100644 index 000000000..6d2b54e12 --- /dev/null +++ b/t/backend/README.backend @@ -0,0 +1,4 @@ +This folder contais the backend testscrips for Lx. +The Lx backend is the module libery under SL. +Backend tests don't need selenium, and are only able +to test local installations. diff --git a/t/frontend/README.frontend b/t/frontend/README.frontend new file mode 100644 index 000000000..511b932ee --- /dev/null +++ b/t/frontend/README.frontend @@ -0,0 +1,10 @@ +This folder contais the frontend testscrips for Lx. +The Lx frontend are all perl scripts under bin/* . +The frontend tests don't need selenium! They should +use the commandline API of Lx. Frontend tests in this +directory are only for testing local Lx installations. + +If you like to test the HTML screens in different +Browsers, it would be better to use the selenium +environment under t/selenium. + diff --git a/t/lx-office.t b/t/lx-office.t new file mode 100644 index 000000000..a73d06af0 --- /dev/null +++ b/t/lx-office.t @@ -0,0 +1,50 @@ +#===================================================================== +# LX-Office ERP +# Copyright (C) 2006 +# Web http://www.lx-office.org +# +#===================================================================== +# +# Author: Udo Spallek +# Email: udono@gmx.net +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#====================================================================== +# +# Main Test Module: +# For collecting all the tests in nice Test::Harness environment. +# Study the README for Selenium Installation and testing process +# and enjoy starting +# #perl t/lx-office.t +# against the unstable release +#====================================================================== + + use strict; + use warnings FATAL => 'all'; + use diagnostics; + use Carp; + use Test::Harness; + + +## Backendtests: +# &runtests( +# ); + + +## Frontendtests: + &runtests( + 't/selenium/AllTests.t', + ); + +exit 1; \ No newline at end of file diff --git a/t/lxtest.conf.default b/t/lxtest.conf.default new file mode 100644 index 000000000..b7fc7de23 --- /dev/null +++ b/t/lxtest.conf.default @@ -0,0 +1,56 @@ +# This is the main configuration file for testing Lx-Office. +# The file t/lxtest.conf.default contains the configuration for +# testing the unstable trunk in the internet repository on +# https://lx-office.linet-services.de/svn-installationen/unstable/ +# Simply copy the file +# t/lxtest.conf.default to t/lxtest.conf +# If you like to test the unstable trunk of the repository, start +# perl t/lx-office.t . +# If you like to test your own Lx installation, customize the file +# t/lx-office.t for your own. +# Btw. a running Selenium server is required for testing Lx! +# See README for more informations. + +$lxtest = { + + # Lx location and user configuration: + # Please edit the following lines + # for testing a local installation + + lxbaseurl => 'https://lx-office.linet-services.de/svn-installationen/unstable/', + rpw => 'ro26F.eQBldoA', # root passwordhash! is only + # neccessary if you test a remote instalation + testlogin => 'seleniumtestuser',# will be extended with unix time + + + # Testdatabase configuration: + # Please edit the following lines + # for testing a local installation + # ATTENTION: Testdatabase will be deleted after testrun! + db => 'seleniumtestdatabase', + dbhost => 'localhost', + dbport => '5432', + dbuser => 'postgres', + dbpasswd => '', + dbdefault => 'template1', + + # Selenium preferences: + # Edit the selenium preferences for your system. + # A running Selenium server is required for testing Lx! + # See README for more informations. + seleniumhost => '192.168.1.10', # edit host of running selenium server + seleniumbrowser => '*chrome C:\Programme\Mozilla Firefox\firefox.exe', # edit the path + + seleniumport => '4444', + timeout => '30000', #timeout for waiting Page load in ms + timeoutlong => '60000', #timeout for waiting longer Page load in ms.... + + + #Lx defaults (usualy no need for editing) + rootlogin => "root login", + memberfile => "users/members", + path => 'bin%2Fmozilla', + + # Put your own setting for individual tests after here... + +}; \ No newline at end of file diff --git a/t/selenium/001CreateTestDatabase.t b/t/selenium/001CreateTestDatabase.t new file mode 100644 index 000000000..bff24e423 --- /dev/null +++ b/t/selenium/001CreateTestDatabase.t @@ -0,0 +1,32 @@ +### Create Database + +diag("Create test database '$lxtest->{db}'"); + +$sel->open_ok($lxtest->{lxadmin}); +$sel->title_is("Lx-Office ERP Administration -"); + +$sel->open_ok($lxtest->{lxadmin}); +$sel->title_is("Lx-Office ERP Administration -"); +$sel->click_ok("//input[(\@name=\"action\") and (\@value=\"Datenbankadministration\")]"); +$sel->wait_for_page_to_load_ok($lxtest->{timeout}); +$sel->title_is("Lx-Office ERP / Datenbankadministration -"); +$sel->type_ok("dbuser", $lxtest->{dbuser}); + +$sel->type_ok("dbpasswd", $lxtest->{dbpasswd}); +$sel->type_ok("dbuser", $lxtest->{dbuser}); +$sel->type_ok("dbhost", $lxtest->{dbhost}); +$sel->type_ok("dbport", $lxtest->{dbport}); +$sel->type_ok("dbdefault", $lxtest->{dbdefault}); + +$sel->click_ok("//input[(\@name=\"action\") and (\@value=\"Datenbank anlegen\")]"); +$sel->wait_for_page_to_load_ok($lxtest->{timeout}); +$sel->title_is("Lx-Office ERP Datenbankadministration / Datenbank anlegen -"); +$sel->type_ok("db", $lxtest->{db}); +$sel->select_ok("encoding", "label=ISO 8859-1"); +$sel->click_ok("//input[(\@name=\"chart\") and (\@value=\"Germany-DATEV-SKR03EU\")]"); +$sel->click_ok("//input[(\@name=\"action\") and (\@value=\"Weiter\")]"); +$sel->wait_for_page_to_load_ok($lxtest->{timeoutlong}); +$sel->title_is("Lx-Office ERP Datenbankadministration / Datenbank anlegen -"); +$sel->click_ok("//input[(\@name=\"action\") and (\@value=\"Weiter\")]"); +$sel->wait_for_page_to_load_ok($lxtest->{timeout}); +$sel->title_is("Lx-Office ERP Administration -"); diff --git a/t/selenium/002CreateTestUser.t b/t/selenium/002CreateTestUser.t new file mode 100644 index 000000000..aaf51d439 --- /dev/null +++ b/t/selenium/002CreateTestUser.t @@ -0,0 +1,32 @@ + +### Create new user +diag("Create test user '$lxtest->{testuserlogin}'"); +$sel->open_ok($lxtest->{lxadmin}); +$sel->title_is("Lx-Office ERP Administration -"); +$sel->click_ok("action"); +$sel->wait_for_page_to_load_ok($lxtest->{timeout}); +$sel->title_is("Lx-Office ERP Administration / Benutzer erfassen -"); +$sel->type_ok("login", $lxtest->{testuserlogin}); +$sel->type_ok("password", $lxtest->{testuserpasswd}); +$sel->type_ok("name", "Selenium"); +$sel->type_ok("email", "selenium\@lx-office.org"); +$sel->type_ok("signature", "Selenium Testuser"); +$sel->type_ok("tel", "0000"); +$sel->type_ok("fax", "1111"); +$sel->type_ok("company", "Sel-enium"); +$sel->type_ok("signature", "Selenium Testuser\nTestfirma"); +$sel->type_ok("address", "Testfirma"); +$sel->type_ok("steuernummer", "111-222-333-444"); +$sel->type_ok("co_ustid", "1234567"); +$sel->type_ok("duns", "0987654321"); +$sel->click_ok("dbdriver"); +$sel->type_ok("newtemplates", "seleniumtestuser"); +$sel->click_ok("menustyle"); +$sel->type_ok("Pg_dbhost", $lxtest->{dbhost}); +$sel->type_ok("Pg_dbname", $lxtest->{db}); +$sel->type_ok("Pg_dbport", $lxtest->{dbport}); +$sel->type_ok("Pg_dbuser", $lxtest->{dbuser}); +$sel->type_ok("Pg_dbpasswd", $lxtest->{dbpasswd}); +$sel->click_ok("action"); +$sel->wait_for_page_to_load_ok($lxtest->{timeout}); +$sel->title_is("Lx-Office ERP Administration -"); diff --git a/t/selenium/998DeleteTestUser.t b/t/selenium/998DeleteTestUser.t new file mode 100644 index 000000000..f0c430e82 --- /dev/null +++ b/t/selenium/998DeleteTestUser.t @@ -0,0 +1,9 @@ +### Delete user +diag("Delete test user '$lxtest->{testuserlogin}'"); +$sel->open_ok($lxtest->{lxadmin}); +$sel->title_is("Lx-Office ERP Administration -"); +$sel->click_ok("link=$lxtest->{testuserlogin}"); +$sel->wait_for_page_to_load_ok($lxtest->{timeout}); +$sel->title_is("Lx-Office ERP Administration / Benutzerdaten bearbeiten -"); +$sel->click_ok("//input[(\@name=\"action\") and (\@value=\"Löschen\")]"); +$sel->wait_for_page_to_load_ok($lxtest->{timeout}); diff --git a/t/selenium/999DeleteTestDatabase.t b/t/selenium/999DeleteTestDatabase.t new file mode 100644 index 000000000..2bac58d90 --- /dev/null +++ b/t/selenium/999DeleteTestDatabase.t @@ -0,0 +1,24 @@ +#### Delete database +diag("Delete test database '$lxtest->{db}'"); + +$sel->open_ok($lxtest->{lxadmin}); +$sel->title_is("Lx-Office ERP Administration -"); +$sel->click_ok("//input[(\@name=\"action\") and (\@value=\"Datenbankadministration\")]"); +$sel->wait_for_page_to_load_ok($lxtest->{timeout}); +$sel->title_is("Lx-Office ERP / Datenbankadministration -"); + +$sel->type_ok("dbhost", $lxtest->{dbhost}); +$sel->type_ok("dbport", $lxtest->{dbport}); +$sel->type_ok("dbuser", $lxtest->{dbuser}); +$sel->type_ok("dbpasswd", $lxtest->{dbpasswd}); + +$sel->click_ok("//input[(\@name=\"action\") and (\@value=\"Datenbank löschen\")]"); +$sel->wait_for_page_to_load_ok($lxtest->{timeoutlong}); +$sel->title_is("Lx-Office ERP Datenbankadministration / Datenbank löschen -"); +$sel->click_ok("//input[\@value=\"$lxtest->{db}\"]"); +$sel->click_ok("//input[(\@name=\"action\") and (\@value=\"Weiter\")]"); +$sel->wait_for_page_to_load_ok($lxtest->{timeout}); +$sel->body_text_is("Lx-Office ERP Datenbankadministration / Datenbank löschen $lxtest->{db} wurde erfolgreich gelöscht"); +$sel->click_ok("//input[(\@name=\"action\") and (\@value=\"Weiter\")]"); +$sel->wait_for_page_to_load_ok($lxtest->{timeout}); +$sel->title_is("Lx-Office ERP Administration -"); diff --git a/t/selenium/AllTests.t b/t/selenium/AllTests.t new file mode 100644 index 000000000..254472a6c --- /dev/null +++ b/t/selenium/AllTests.t @@ -0,0 +1,89 @@ +#===================================================================== +# LX-Office ERP +# Copyright (C) 2006 +# Web http://www.lx-office.org +# +#===================================================================== +# +# Author: Udo Spallek +# Email: udono@gmx.net +# +# This program is free software; you can redistribute it and/or modify +# it under the terms of the GNU General Public License as published by +# the Free Software Foundation; either version 2 of the License, or +# (at your option) any later version. +# +# This program is distributed in the hope that it will be useful, +# but WITHOUT ANY WARRANTY; without even the implied warranty of +# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +# GNU General Public License for more details. +# You should have received a copy of the GNU General Public License +# along with this program; if not, write to the Free Software +# Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. +#====================================================================== +# +# Selenium Main Caller +# Call all Selenium scripts from here. To use Selenium tests in +# Lx-Office you need to Install Selenium Remote Control. Take a look at +# the README Document for further informatinons on installing Selenium +# and testing Lx-Office and of course writing your own testcases. +# +####################################################################### + no strict; + push @INC, ['/tselenium']; + use vars qw( $lxdebug $lxtest $sel ); + use strict; + + use Test::WWW::Selenium; + use Carp; + use Test::More tests => 86; # Need to be cutomized + + diag('Pretests and initialisation'); + + eval { require('t/lxtest.conf'); }; + if ($@) { + diag("No test configuration found in t/lxtest.conf.\n + Maybe you forget to copy t/lxtest.conf.default to t/lxtest.conf. Exit test...\n"); + exit 0; + }; + + $lxtest->{test_id} = time; # create individual ids by unixtime + $lxtest->{testuserlogin} = $lxtest->{testlogin} . $lxtest->{test_id}; + $lxtest->{testuserpasswd} = $lxtest->{test_id}; + $lxtest->{db} = $lxtest->{db} . $lxtest->{test_id}; + + ok(defined $lxtest->{rpw}, "Get root password"); + + ok(defined $lxtest->{dbhost}, "found dbhost in config"); + ok(defined $lxtest->{dbport}, "found dbport in config"); + ok(defined $lxtest->{dbuser}, "found dbuser in config"); + ok(defined $lxtest->{dbpasswd}, "found dbpasswd in config"); + + $lxtest->{lxadmin} = $lxtest->{lxbaseurl} . "admin.pl?path=$lxtest->{path}&rpw=$lxtest->{rpw}&nextsub=list_users&action=Weiter"; + + + eval { $sel = Test::WWW::Selenium->new( + host => $lxtest->{seleniumhost}, + port => $lxtest->{seleniumport}, + browser => $lxtest->{seleniumbrowser}, + browser_url => $lxtest->{lxadmin}); + }; + if ($@) { + diag("No Selenium Server running, or wrong preferences\n\n"); + exit 0; + } + + ok(defined $sel, 'Creating Selenium Object'); + + diag('Starting Selenium tests...'); + + require('t/selenium/001CreateTestDatabase.t'); + require('t/selenium/002CreateTestUser.t'); + + require('t/selenium/998DeleteTestUser.t'); + require('t/selenium/999DeleteTestDatabase.t'); + + $sel=''; # Destroy selenium object + + exit 1; + diff --git a/t/selenium/README b/t/selenium/README new file mode 100644 index 000000000..35ae59a71 --- /dev/null +++ b/t/selenium/README @@ -0,0 +1,7 @@ +This directory contains all selenium testscripts for lx-office. +Selenium testscrips are the prefered way to test the higher lx +functionalities. For the selenium tests you need to install and +run a local selenium server on a machine whitch is able to start +a browser session. See README for more informations. + +