Erste Version der Lx-Office Testumgebung.
authorUdo Spallek <info@wissensvermittlung.com>
Wed, 29 Nov 2006 18:38:57 +0000 (18:38 +0000)
committerUdo Spallek <info@wissensvermittlung.com>
Wed, 29 Nov 2006 18:38:57 +0000 (18:38 +0000)
Weitere Selenium Testskripte folgen.
Bitte alle READMES lesen, und die Tests selbst testen.
Freue mich über Feedbacks.

t/README.de [new file with mode: 0644]
t/backend/README.backend [new file with mode: 0644]
t/frontend/README.frontend [new file with mode: 0644]
t/lx-office.t [new file with mode: 0644]
t/lxtest.conf.default [new file with mode: 0644]
t/selenium/001CreateTestDatabase.t [new file with mode: 0644]
t/selenium/002CreateTestUser.t [new file with mode: 0644]
t/selenium/998DeleteTestUser.t [new file with mode: 0644]
t/selenium/999DeleteTestDatabase.t [new file with mode: 0644]
t/selenium/AllTests.t [new file with mode: 0644]
t/selenium/README [new file with mode: 0644]

diff --git a/t/README.de b/t/README.de
new file mode 100644 (file)
index 0000000..84b65dc
--- /dev/null
@@ -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:
+<FIXME>
+
+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 (file)
index 0000000..6d2b54e
--- /dev/null
@@ -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 (file)
index 0000000..511b932
--- /dev/null
@@ -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 (file)
index 0000000..a73d06a
--- /dev/null
@@ -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 (file)
index 0000000..b7fc7de
--- /dev/null
@@ -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 (file)
index 0000000..bff24e4
--- /dev/null
@@ -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 (file)
index 0000000..aaf51d4
--- /dev/null
@@ -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 (file)
index 0000000..f0c430e
--- /dev/null
@@ -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 (file)
index 0000000..2bac58d
--- /dev/null
@@ -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 (file)
index 0000000..254472a
--- /dev/null
@@ -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 (file)
index 0000000..35ae59a
--- /dev/null
@@ -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.
+
+