Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #c:\\rft\\perl\\bin
- # Rückgabewerte
- # 1 - zu wenig Argumente
- # 2 - Fehler bei Kopie Excel Attachment
- # 3 - Fehler bei Aufruf des CC Copy Scripts
- # 4 - Fehler bei BUILD
- # 5 - Fehler beim Start des RFT
- # 6 - Fehler beim Start des LogParsers
- # 7 - Fehler beim zippen der Ergebnisse
- # 8 - Fehler bei Umbenennung der Definitionsdateien
- # 9 - Fehler beim validieren der Excel Datei
- #error codes für excel
- #10 - Fehler beim Auslesen des global Teils
- #11 - Fehler beim Auslesen des Testspezifischen Teils
- use lib "c:\\rft\\batchfiles\\lib";
- use lib "c:\\rft\\batchfiles\\rtcrest";
- use strict;
- use db_functions;
- use rftqclib;
- use rtclib;
- use syslib;
- use rftqccfg;
- use Data::Dumper;
- use POSIX qw(strftime);
- # Dekarationen für den Excel-Zugriff
- use Win32::OLE qw(in with);
- use Win32::OLE::Const 'Microsoft Excel';
- use File::Copy;
- use File::Path;
- use Config::Properties;
- my $VERSION = "5.2.0";
- $Win32::OLE::Warn = 0; # das Warn Level auf 0 setzen
- logHeader("\n Exitcodes\n");
- print "1 - zu wenig Argumente\n";
- print "2 - Fehler bei Kopie Excel Attachment\n";
- print "3 - Fehler bei Aufruf des CC Copy Scripts\n";
- print "4 - Fehler bei BUILD\n";
- print "5 - Fehler beim Start des RFT\n";
- print "6 - Fehler beim Start des LogParsers\n";
- print "7 - Fehler beim zippen der Ergebnisse\n";
- print "8 - Fehler bei Umbenennung der Definitionsdateien\n";
- print "9 - Fehler beim validieren der Excel Datei\n";
- logHeader("\n Batchfiles Version\n");
- print "RFT Batchfiles Version: " . $VERSION . "\n";
- my $DEBUG = 1;
- # initialisierung von parametern
- my $retval = 0;
- my $xlsError = 0;
- my $errorCode = 0;
- my $timestamp = 0;
- my $cmd = "";
- my $errorString = "";
- my $i = 0;
- my $result = 0;
- my $errorlog = "";
- my $timelog = "";
- my $rftstartcmd = "";
- my $exporterror = 0;
- my $status = 0;
- my $rfttestparameter = "";
- my $dbflag = 0;
- my $db_handle = 0;
- my $ds_handle = 0;
- my $st_handle = 0;
- my $result = "";
- my $sql = "";
- my $rh_dbresult = "";
- my $step_status = "";
- my $step_name = "";
- my $step_message = "";
- my $error_message = "";
- my $message = "";
- my $key = "";
- my $hostname = "";
- my %testinfo = ();
- my %testRunsLog = ();
- my %aquaenv = ();
- my %testenv = ();
- my %QcTestMetaData = ();
- # Für den Selenium3SupportUpdater benötigte JARs
- # TODO JAR-Version in rftqccfg.pm übernehmen
- my $jar_gte = "C:\\Program Files\\eclipse36-gte-plugins\\eclipse\\plugins\\de.gad.seu.guitest_1.1.2.jar";
- my $jar_commons_io = "C:\\Program Files\\Selenium\\thirdparty\\commons-io-2.4.jar";
- #######################################################################################
- #
- # 1 Testvorbereitung auf dem Client
- #
- #######################################################################################
- logHeader("\n1 Testvorbereitung auf Client\n");
- $hostname = get_hostname();
- print "Testclient: " . $hostname . "\n\n";
- print "Start: " . get_formatted_tsp(time) . "\n";
- $testenv{'rtcname'} = $hostname;
- #verarbeitung von leerzeichen
- #$in =~ s/%(..)/pack("c",hex($1))/ge;
- #die initialen parameter besorgen
- print "start init_rft_env(): " . get_formatted_tsp(time) . "\n" if($DEBUG);
- my $rh_rftenv = init_rft_env();
- print "ende init_rft_env(): " . get_formatted_tsp(time) . "\n" if($DEBUG);
- #die " entfernen
- my $num_params = @ARGV;
- for($i=0;$i<$num_params;$i++){
- $ARGV[$i] =~ s/"//g;
- }
- #######################################################################################
- #
- # 2 Übergebene Parameter
- #
- #######################################################################################
- logHeader ("\n2 Übergebene Parameter:\n");
- print "Anzahl der parameter: " . $num_params . "\n\n";
- print "ARGV[0] PROJECT_ID: " . $ARGV[0] . "\n"; #muss
- print "ARGV[1] PROJECT_FOLDER_ID: " . $ARGV[1] . "\n"; #muss
- print "ARGV[2] TESTCASE_NAME: " . $ARGV[2] . "\n"; #muss
- print "ARGV[3] TESTCASE_ID: " . $ARGV[3] . "\n"; #muss
- print "ARGV[4] TESTSCENARIO_ID: " . $ARGV[4] . "\n"; #muss
- print "ARGV[5] URI: " . $ARGV[5] . "\n"; #muss
- print "ARGV[6] GTE-USER: " . $ARGV[6] . "\n"; #muss
- print "ARGV[7] GTE-PASSWORD: " . $ARGV[7] . "\n"; #muss
- print "ARGV[8] TESTDATENSATZ: " . $ARGV[8] . "\n"; #muss
- print "ARGV[9] WERKZEUG: " . $ARGV[9]. "\n"; #muss
- print "ARGV[10] BROWSER: " . $ARGV[10]. "\n"; #muss
- print "ARGV[11] PRODUKT: " . $ARGV[11]. "\n"; #muss
- print "ARGV[12] RELEASE: " . $ARGV[12]. "\n"; #muss
- print "ARGV[13] GUID: " . $ARGV[13]. "\n"; #muss
- print "ARGV[14] Rfttu: " . $ARGV[14]. "\n"; #muss
- #prüfen, ob die anzahl der parameter korrekt ist...
- print "\nprüfe, ob 15 parameter übergeben wurden:\n";
- if($num_params != 15 ){
- print "Falsche Anzahl an Parametern! Soll: 15, Ist: " . @ARGV . "\n";
- $retval = 1;
- print "Exitcode $retval";
- exit($retval);
- }
- print "Korrekte Anzahl an Parametern übergeben\n";
- #######################################################################################
- #
- # 3 Vorbereitung der Runtime-Daten
- #
- #######################################################################################
- logHeader("\n3 Vorbereitung der Runtime-Daten\n");
- #zeitstempel erstellen
- $timestamp = make_timestamp();
- print "Neuer Timestamp " . $timestamp . "\n";
- $testRunsLog{"teststart_unx"} = make_unixtimestamp();
- print "Unix Timestamp " . $testRunsLog{"teststart_unx"} . "\n";
- print "weise %aquaenv werte zu \n";
- #Variablen für die aqua Ablage in einen Hash schreiben:
- $aquaenv{'PROJECT_ID'} = $ARGV[0];
- $aquaenv{'PROJECT_FOLDER_ID'} = $ARGV[1];
- $aquaenv{'TESTCASE_NAME'} = $ARGV[2];
- $aquaenv{'TESTCASE_ID'} = $ARGV[3];
- $aquaenv{'TESTSCENARIO_ID'} = $ARGV[4];
- $aquaenv{'URI'} = $ARGV[5];
- print "weise %testenv werte zu \n";
- $testenv{'letzterStatus'} = $rh_rftenv->{'letzterstatus'};
- $testenv{'package'} = getPackage{$aquaenv{'TESTCASE_NAME'}};
- $testenv{'classfile'} = $rh_rftenv->{'packagedir'} . "\\" . getClassFile($aquaenv{'TESTCASE_NAME'});
- $testenv{'ccPackages'} = ""; #wird unten definiert
- $testenv{'produkt'} = $ARGV[11];
- $testenv{'release'} = $ARGV[12];
- $testenv{'ccProjekt'} = ""; #wird unten definiert
- $testenv{'rftProjekt'} = ""; #wird unten definiert
- $testenv{'ccPackages'} = $aquaenv{'TESTCASE_NAME'};
- $testenv{'ccPackages'} =~ s/\..*//g;
- $testenv{'ccPackages'} =~ s/\n|\s//gi;
- $testenv{'gteProdVersion'} = "";
- $testenv{'gteSkriptKompVersion'} = "";
- $testenv{'gteApiKompVersion'} = "";
- if ($DEBUG) {
- logHeader("Debug-Ausgabe der rh_rftenv-Werte, die zweite ... ");
- print "\nrh_rftenv-werte:\n";
- foreach $key ( keys $rh_rftenv){
- print $key . ": = " . $rh_rftenv->{$key} . "\n"
- }
- print "\n **** Ende Debug-Ausgabe **** \n\n";
- }
- #Verbinde zu einer Datenbank.
- $db_handle = db_connect("",$rh_rftenv->{'tdv_usr'},$rh_rftenv->{'tdv_pwd'},$rh_rftenv->{'tdv_db'},"DB2",$rh_rftenv->{'DB2_AUTOCOMMIT_ON'});
- print "db_handle: = " . $db_handle . "\n";
- print "hostname: = " . $hostname . "\n";
- ##den client locken
- update_rtc_status($hostname,"J","null",1,$db_handle);
- #############################################################################################################################
- #qc_getMetaData ersatz
- # qc_getMetadata und prepareTestMetaData holen ID zu TestSet und TestInstanzen aus QC und überschreiben dann eventuell die Felder
- # rftuser, rftpwd, tool, browser, rfttds (Testdatensatz), iterationen, testapi
- # ebenso werden Produkt und Release ermittelt dies wird alles schon im PowerShell-Skript erledigt
- $testenv{'rfttu'} = $ARGV[14];
- $testenv{'rftuser'} = $ARGV[6];
- $testenv{'rftpwd'} = $ARGV[7];
- $testenv{'rfttds'} = "";
- if($ARGV[8] != "KeinTestDatenSatzEsWirdEinDefaultVerwendet"){
- $testenv{'rfttds'} = $ARGV[8];
- }
- $testenv{'tool'} = $ARGV[9];
- $testenv{'browser'} = $ARGV[10];
- #######################################################################################
- #ENTFÄLLT
- # 4 Prüfe auf laufenden Test
- #ENTFÄLLT
- #######################################################################################
- # Generierung eines eindeutigen Namens für das aktuelle Log
- # Generierung von Logfiles
- # Logfilename ist der Name des logs für die RFT Ausführung
- # RFT legt im log-Ordner einen Unterordner mit diesem Namen an
- # Unterhalb dieses Ordners wird das tptp-lofile mit dem gleichen
- # Namen und der Erweiterung .execution gespeichert
- #######################################################################################
- #
- # 5 Initialisierung der Verzeichnisse und Logfiles
- #
- #######################################################################################
- logHeader("\n5 Initialisierung der Verzeichnisse und Logfiles");
- $testenv{'time_testname'} = $timestamp . "_" . $aquaenv{'TESTCASE_NAME'};
- $testenv{'gadLogPath'} = $rh_rftenv->{'logdir'} . "\\" . $testenv{'time_testname'} . "_" . $ARGV[13];
- $testenv{'gadLogFile'} = $testenv{'time_testname'} . ".txt";
- $testenv{'tptpLogPath'} = $rh_rftenv->{'packagelogdir'} . "\\" . $testenv{'time_testname'};
- $testenv{'tptpLogName'} = $testenv{'time_testname'} . ".execution";
- $testenv{'tptpLogFile'} = $testenv{'tptpLogPath'} . "\\" . $testenv{'tptpLogName'};
- $testenv{'tptpLogFileZIP'} = $testenv{'tptpLogName'} . ".zip";
- $testenv{'testname'} = getTestNameWithoutPackage($aquaenv{'TESTCASE_NAME'});
- $testenv{'gadParserLog'} = $rh_rftenv->{'rftdir'} . "\\gadparser_log_" . $timestamp . ".log";
- $testenv{'tmpLogDefFile'} = $testenv{'time_testname'} . ".qcimportdef_tmp";
- $testenv{'logDefFile'} = $testenv{'time_testname'} . ".qcimportdef";
- $testenv{'logDefErrFile'} = $testenv{'time_testname'} . ".qcimportdef_err";
- $testenv{'tdlog'} = $rh_rftenv->{'logdir'} . "\\" . $testenv{'time_testname'} . "_tdlog.txt";
- if ($DEBUG) {
- logDebug("Debug-Ausgabe der testenv-Werte ... ");
- print "\ntestenv-werte:\n";
- foreach $key ( keys %testenv){
- print $key . ": " . $testenv{$key} . "\n";
- }
- print "\n **** Ende Debug-Ausgabe **** \n\n";
- }
- ###############################
- #
- # Anlegen von Verzeichnissen
- #
- ###############################
- #tetfall: hier noch einen error provozieren! : im QC angelegt
- init_rft_dirs(\%aquaenv, \%testenv);
- ###############################
- #
- # Sichern der aktuellen Prozessliste
- #
- ###############################
- print "plist_start: " . $rh_rftenv->{'plist_start'} . "\n";
- write_process_list($rh_rftenv->{'plist_start'});
- ###############################
- #
- # Erstellen der temporären Log-Definitionsdatei
- #
- ###############################
- # in der Ausgabe wird der Testname um die [1] erweitert, welche im ps1 Script entfernt wurde
- # write_logdef verwendet QC_variablen wird also ersetzt:
- #Testdaten aus der DB (Testdatenverwaltung) holen
- print "Start TDV Abfrage: " . get_formatted_tsp(time) . "\n" if($DEBUG);
- print "Schreibe temporäre LogDef-Datei\n";
- my $logdef = "";
- my $logdeffile = $rh_rftenv->{'logdefdir'} . "\\" . $testenv{'tmpLogDefFile'};
- $logdef = $aquaenv{'URI'} . "|";
- $logdef .= $aquaenv{'PROJECT_ID'} . "|";
- $logdef .= $aquaenv{'PROJECT_FOLDER_ID'} . "|";
- $logdef .= $aquaenv{'TESTCASE_ID'} . "|";
- $logdef .= $aquaenv{'TESTSCENARIO_ID'} . "|";
- $logdef .= $testenv{'gadLogPath'} . "\\" . $testenv{'gadLogFile'} . "|";
- $logdef .= $testenv{'gadLogPath'} . "\\" . $testenv{'tptpLogFileZIP'} . "|" . "\n";
- open OUTFILE, ">$logdeffile";
- print OUTFILE $logdef;
- close OUTFILE;
- if($db_handle == -1){
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "\nFehler beim Connect zur Datanbank";
- exit(4);
- }
- # #Prüfung, ob die Datensätze vorhanden sind
- # #-1: Produkt oder Release sind in der TDV nicht vorhanden
- # #-2: Es gibt kein Script in der Testdatenverwaltung
- # #-3: Der angebene Testdatensatz ist nicht vorhanden
- # $nrAutotest = checkTDS(\%testenv,$db_handle);
- # if($nrAutotest == -1){
- # #db_disconnect($db_handle);
- # handle_error(\%qcenv,\%testenv,"72","Produkt oder Release sind in der TDV nicht vorhanden. Bitte TDV und QC-Pfad prüfen!");
- # }elsif($nrAutotest == -2){
- # #db_disconnect($db_handle);
- # handle_error(\%qcenv,\%testenv,"73","Zum Test ist kein Testfall in der Testdatenverwaltung vorhanden!");
- # }elsif($nrAutotest == -3){
- # #db_disconnect($db_handle);
- # handle_error(\%qcenv,\%testenv,"74","Der gewählte Testdatensatz existiert nicht.");
- # }
- my $nrAutotest = 'find';
- print "Folgendes Produkt wird für den Test verwendet: " . $testenv{'produkt'} . "\n";
- $rh_dbresult = getProjectFromDB($db_handle, $testenv{'produkt'},$testenv{'release'});
- if($rh_dbresult == -1){
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "\nFehler beim Auslesen der Daten aus der Datanbank";
- exit(4);
- }
- $testenv{'ccProjekt'} = $rh_dbresult->{'BEZCCPROJEKT'};
- $testenv{'rftProjekt'} = $rh_dbresult->{'BEZRFTPROJEKT'};
- $testenv{'nrRelease'} = $rh_dbresult->{'NRRELEASE'};
- #den client wieder freigeben
- update_rtc_status($hostname,"J",$nrAutotest,0,$db_handle,\%testenv);
- print "Ende TDV Abfrage: " . get_formatted_tsp(time) . "\n" if($DEBUG);
- #####
- # Es wurden nun die Daten aus der DB geholt und müssen aufbereitet werden!
- #####
- #wenn in $testenv{'ccexport'} nicht TRUE, FALSE oder COMPLETE steht, wird TRUE gesetzt
- if($testenv{'ccexport'} !~ /TRUE|FALSE|COMPLETE/i){
- $testenv{'ccexport'} = "TRUE";
- }
- # prepare selenium-vars
- my $selenium_product = substr($testenv{'rftProjekt'}, 0, 3);
- my $selenium_prepackage = "src/de/gad/guitest/" . $selenium_product . "/";
- my $selenium_testcase = $aquaenv{'TESTCASE_NAME'};
- my $seleniumtestclass = "de.gad.guitest." . $selenium_product . "." . $selenium_testcase;
- #--------------------------------------------------------------------
- # Fallunterscheidung: API-Mapping ermitteln
- # -> nur für RTC-Projekte ('_guitest' -> wird für Selenium zu '_selenium' umgeändert)
- #
- # Für Aufrufe von RTC-Projekten wird hier ermittelt, welche Skriptkomponente zur Produktversion benötigt wird
- # Bsp: zu bank21 5.6.0 gehört Skriptingkomonente B21 TSB 01.00.00
- if ($testenv{'rftProjekt'} =~ /guitest/i){
- my $rh_testenv = getApiMapping(\%testenv);
- %testenv = %{$rh_testenv};
- }
- if ($DEBUG) {
- logHeader("Debug-Ausgabe der testenv-Werte, die zweite ... ");
- print "\ntestenv-werte:\n";
- foreach $key ( keys %testenv){
- print $key . ": = " . $testenv{$key} . "\n"
- }
- print "\n **** Ende Debug-Ausgabe **** \n\n";
- }
- ###########################################################################################
- #
- # 6 Aktualisierung bzw. Check der Sourcen
- #
- ###########################################################################################
- logHeader ("\n6 Aktualisierung bzw. Check der Sourcen\n");
- if($testenv{'ccexport'} =~ /FALSE/i){
- #keine Sourcen aus ClearCase oder RTC holen (und keinen BUILD ausführen)
- print "ccexport ist FALSE: Es werden keine Sourcen aus dem ClearCase bzw. RTC geholt!\n" if($DEBUG);
- # TODO - funktioniert der chk_src_version() für alle Fälle ??
- chk_src_version(\%aquaenv,\%testenv);
- } else {
- #testfall: nicht vorhandenes Package / RFT- / CC-Projekt übergeben: im QC angelegt
- print "Start Export aus Versionsverwaltung um " . get_formatted_tsp(time) . "\n" if($DEBUG);
- if ($DEBUG){
- print "RFT Projekt " . $testenv{'rftProjekt'} . "\n";
- print "Tool " . $testenv{'tool'} . "\n";
- }
- #--------------------------------------------------------------------
- # Fallunterscheidung: Source-Aktualisierung für CC/RTC bzw. GTE/Selenium
- # 1) GTE-Sourcen aus RTC
- # 2) GTE-Sourcen aus CC entfällt
- # 3) Selenium-Sourcen aus RTC
- # 4) Selenium-Sourcen aus CC entfällt
- #
- if ($testenv{'tool'} eq "GTE Selenium" && $testenv{'rftProjekt'} =~ /guitest/i){
- # 1) GTE-Sourcen aus RTC holen (ab bank21 Release 5.6.0), ermittelt am Projektnamen 'xxx_guitest'
- print "GTE-Sourcen werden aus RTC geholt ... \n";
- $exporterror = get_sources_from_rtc(gte_getProductFromCompVers($testenv{'ccProjekt'}),gte_getCompFromCompVers($testenv{'ccProjekt'}), gte_get8cFormattedVersionFromCompVers($testenv{'ccProjekt'}), "guitest", $testenv{'ccexport'}, $testenv{'ccPackages'},);
- # }elsif($testenv{'tool'} eq "GTE Selenium" && $testenv{'rftProjekt'} !~ /guitest/i){
- #
- # 2) GTE-Sourcen aus CC holen (bis bank21 Release 5.5.0), ermittelt am anderem Projektnamen als 'xxx_guitest'
- # print "GTE-Sourcen werden aus ClearCase geholt ... \n";
- # $exporterror = get_sources_from_cc($testenv{'ccProjekt'},$testenv{'rftProjekt'} . "_tests", $testenv{'ccPackages'}, $testenv{'ccexport'});
- } elsif($testenv{'tool'} eq "Selenium" && $testenv{'rftProjekt'} =~ /guitest/i){
- # 3) Selenium-Sourcen aus RTC holen (ab bank21 Release 5.6.0), ermittelt am Projektnamen 'xxx_guitest'
- print "Selenium-Sourcen werden aus RTC geholt ... \n";
- $exporterror = get_sources_from_rtc(gte_getProductFromCompVers($testenv{'ccProjekt'}),gte_getCompFromCompVers($testenv{'ccProjekt'}), gte_get8cFormattedVersionFromCompVers($testenv{'ccProjekt'}), "selenium", $testenv{'ccexport'}, $testenv{'ccPackages'},);
- #} elsif($testenv{'tool'} eq "Selenium" && $testenv{'rftProjekt'} !~ /guitest/i){
- #
- # # 4) Selenium-Sourcen aus CC holen (bis bank21 Release 5.5.0), ermittelt am anderem Projektnamen als 'xxx_guitest'
- # print "Selenium-Sourcen werden aus CC geholt ... \n";
- # my $sel_package = $selenium_prepackage . $testenv{'ccPackages'};
- # $exporterror = get_sources_from_cc($testenv{'ccProjekt'},$testenv{'rftProjekt'} . "_sel", $sel_package, $testenv{'ccexport'});
- } else {
- # Übrige Fälle - keine Implementierung verfügbar
- print "Aktualisierung der Sourcen für Werkzeug " . $testenv{'tool'} . " und Projekt " . $testenv{'rftProjekt'} . " nicht implementiert\n";
- exit();
- }
- if ($exporterror != 0) {
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "\nFehler beim Bereitstellen der Sourcen aus dem ClearCase: CC-Projekt: " . $testenv{'ccProjekt'} . ", RFT-Projekt: " . $testenv{'rftProjekt'} . ", Packages: " . $testenv{'ccPackages'} . ", CC-Export: " . $testenv{'ccexport'};
- exit(3);
- }else{
- print "Die Sourcen wurden erfolgreich heruntergeladen und entpackt.\n"
- }
- }#Ende if($ccexport =~ /FALSE/)
- #############################################################
- #
- # 7 Aufruf des Testtools (GTE bzw. Selenium)
- #
- #############################################################
- logHeader ("\n7 Aufruf des Testtools (Selenium, ...) \n");
- #--------------------------------------------------------------------
- # Fallunterscheidung: bzw. hier eher Prüfung auf Selenium-Tools (GTE inkludiert)
- if($testenv{'tool'} =~ /Selenium/i) {
- #####################################################
- # Beide Fälle -> Aufruf für Selenium oder GTE
- #####################################################
- # set java_home to selenium jdk
- $ENV{'JAVA_HOME'} = 'C:\\Program Files\\Selenium\\jdk1.8.0_141';
- open my $propFile, '<', 'C:\\Programme\\Selenium\SEU\\GTE.properties' or die "unable to open GTE.properties";
- my $properties = Config::Properties->new();
- $properties->load($propFile);
- $properties->getProperty("selenium_version");
- #################################################################
- # GTE.properties und API.properties aktualisieren über Selenium3SupportUpdater (innerhalb des GTE Plugins)
- # -> Der Updater unterscheidet intern zwischen RTC und CC anhand der übergebenen Produkversion
- #
- # Ablauf
- # - Prüfen, ob die benötigten Files da sind
- # - Aktualisierung API.properties, danach Aktualisierung Selenium3Support.jar
- #
- if (!-e $jar_gte) {
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "\n " . $jar_gte . " konnte nicht gefunden werden.";
- exit(5);
- }
- if (!-e $jar_commons_io) {
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "\n " . $jar_commons_io . " konnte nicht gefunden werden.";
- exit(5);
- }
- my $updatercmd;
- if ($testenv{'rftProjekt'} =~ /guitest/i){
- $updatercmd = "java -cp \"" . $jar_gte . "\";\"" . $jar_commons_io . "\" de.gad.seu.guitest.updater.Selenium3SupportUpdater " . $testenv{'gteProdVersion'};
- }
- if ($DEBUG) {
- print "Ausführung von '" . $updatercmd . "' des Updaters\n";
- }
- $status = system ($updatercmd);
- if ($status != 0){
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "\nSelenium3SupportUpdater konnte nicht ausgeführt werden.";
- exit(5);
- }
- #--------------------------------------------------------------------
- # Fallunterscheidung: Ort und Namen für Ablage von Selenium3Support.jar unterschiedlich
- # in CC-Projekten bzw. RTC-Projekten
- #
- # Folgende Fälle werden unterschieden:
- # 1) CC-Projekte: Ablage unter C:\Programme\Selenium\SEU und Suffix mit Produktrelease
- # bzw. analog auf Remote-Server
- # 2) RTC-Projekte: Ablage unter C:\Programme\Selenium\SEU\{API-Unterordner} und Suffix
- # ohne Produktrelease bzw. analog auf Remote-Server
- #
- # -> fließt auch in Aufrufparameter ein, s. Fallunterscheidung unten vor Aufruf
- #
- # Aufrufparamter für Selenium3Suppor.jar ermitteln
- if (($testenv{'rftProjekt'} =~ /guitest/i) || ($testenv{'rftProjekt'} =~ /selenium/i)) {
- # Es handelt sich um ein RTC-Projekt - prüfen, ob ein Selenium3Support.jar im API-Unterordner vorhanden ist
- logDebug("Verwende " . $testenv{gteApiKompVersion} . "\\Selenium2Suppor.jar");
- my $filename = "C:\\Programme\\Selenium\\SEU\\" . $testenv{gteApiKompVersion} . "\\Selenium3Support.jar";
- if (!-e $filename) {
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "\nC:\\Programme\\Selenium\\SEU\\" . $testenv{gteApiKompVersion} . "\\Selenium3Support.jar konnte nicht gefunden werden.";
- exit(5);
- }
- }else{
- # Es handelt sich um ein CC-Projekt - prüfen, ob ein Selenium3Support.jar mit entsprechendem Suffix vorhanden ist
- logDebug("Verwende Selenium3Support_" . $testenv{'rftProjekt'} . ".jar");
- my $filename = "C:\\Programme\\Selenium\\SEU\\Selenium3Support_" . $testenv{'rftProjekt'} . ".jar";
- if (!-e $filename) {
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "Selenium3Support_" . $testenv{'rftProjekt'} . ".jar konnte nicht gefunden werden.";
- exit(5);
- }
- }
- # Aufrufparamter für Selenium-Properties ermitteln oder Default-Wert setzen
- my $selenium_version = $properties->getProperty("selenium_version");
- if (length($selenium_version) == 0 ) {
- $selenium_version = "2.52.0";
- }
- my $pdfbox_version = $properties->getProperty("pdfbox_version");
- if (length($pdfbox_version) == 0) {
- $pdfbox_version = "2.0.1";
- }
- my $appium_version = $properties->getProperty("appium_version");
- if (length($appium_version) == 0) {
- $appium_version = "3.3.0";
- }
- my $tika_version = $properties->getProperty("tika_version");
- if (length($tika_version) == 0) {
- $tika_version = "1.17";
- }
- # Aufrufparamter für Firefox ermitteln
- my $firefox_path = $properties->getProperty("firefox_path");
- # Start selenium-ant mit Aufrufparametern
- my $seleniumcmd = "cd C:\\rft\\packages & C:\\RFT\\apache-ant-1.8.2\\bin\\ant -Dlogs.dir=" . $testenv{'gadLogPath'};
- if($testenv{'tool'} !~ /GTE/i) {
- $seleniumcmd .= " -Dtest.class=" . $seleniumtestclass;
- } else {
- $seleniumcmd .= " -Dtest=" . $aquaenv{'TESTCASE_NAME'};
- }
- if(length($testenv{'rfttu'}) != 0 ){
- $seleniumcmd .= " -Dtest.url=\"" . $testenv{'rfttu'} . "\"";
- }
- if(length($testenv{'rftuser'}) != 0 ){
- $seleniumcmd .= " -Dtest.user=" . $testenv{'rftuser'};
- }
- if(length($testenv{'rftpwd'}) != 0 ){
- $seleniumcmd .= " -Dtest.password=" . $testenv{'rftpwd'};
- }
- if(length($testenv{'rfttds'}) != 0 ){
- $seleniumcmd .= " -Dtest.tds=" . $testenv{'rfttds'};
- }
- my $browser = $testenv{'browser'};
- if($browser eq "") { # default browser is firefox
- $browser = "*firefox";
- } else {
- $browser = "\*$browser";
- }
- if ($browser eq "*firefox" && length($firefox_path) != 0 ) {
- $browser = "\"$browser $firefox_path\"";
- }
- $seleniumcmd .= " -Dbrowser=" . $browser;
- $seleniumcmd .= " -Dtest.rftproject=" . $testenv{'rftProjekt'};
- $seleniumcmd .= " -Dselenium_version=" . $selenium_version;
- $seleniumcmd .= " -Dpdfbox_version=" . $pdfbox_version;
- $seleniumcmd .= " -Dtika_version=" . $tika_version;
- $seleniumcmd .= " -Dappium_version=" . $appium_version;
- #--------------------------------------------------------------------
- # Fallunterscheidung: Aufrufparameter für Selenium3Support.jar sind unterschiedlich
- # in CC-Projekten bzw. RTC-Projekten (s.o.)
- #
- if ( ($testenv{'rftProjekt'} =~ /guitest/i) || ($testenv{'rftProjekt'} =~ /selenium/i) ){
- # Es handelt sich um ein Projekt in RTC, da Namenskonvention '_guitest', Vorgehen ab bank21 5.6
- $seleniumcmd .= " -Dapi_version=" . "Selenium\\seu\\" . $testenv{gteApiKompVersion} . "\\Selenium3Support";
- }else{
- # Es handelt sich um ein Projekt in CC, d.h. Vorgehen vor bank21 5.6
- $seleniumcmd .= " -Dapi_version=" . "Selenium\\seu\\Selenium3Support_" . $testenv{'rftProjekt'};
- }
- $seleniumcmd .= " -buildfile " . $rh_rftenv->{'batchdir'} . "\\compile_and_run.xml ";
- #--------------------------------------------------------------------
- # Fallunterscheidung: Aufrufskripte für GTE und Selenium unterscheiden sich
- if($testenv{'tool'} !~ /GTE/i) {
- $seleniumcmd .= "runTest";
- } else {
- $seleniumcmd .= "runGenericTest";
- }
- logDebug("\nSelenium start command:\n" . $seleniumcmd . "\n");
- $testinfo{'rftstart'} = localtime();
- $status = system ($seleniumcmd);
- if ($status != 0){
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "Technischer Fehler im Selenium. Bitte Controllerlog pruefen! Error Code: " . $status;
- exit(5);
- }
- $testinfo{'rftstop'} = localtime();
- $testinfo{'rftdauer'} = $testinfo{'rftstop'} - $testinfo{'rftstart'};
- print "ende Selenium: " . get_formatted_tsp(time) . "\n" if($DEBUG);
- $testRunsLog{"rftende_unx"} = make_unixtimestamp();
- }else{
- print "Kein passendes Testtool für \"" . $testenv{'tool'} . "\" implementiert\n";
- }
- # wenn probleme beim log-parser oder logzip auftreten, soll nicht abgebrochen werden
- #############################################################
- #
- # 8 Aufruf des LogParsers
- #
- #############################################################
- logHeader ("\n8 Aufruf des LogParsers\n");
- my $parser_class = "";
- my $tool_logfile = "";
- if($testenv{'tool'} !~ /Selenium/i) {
- if($testenv{'tool'} =~ /GTE/i) {
- # copy log from testadapter_logs to packages_logs
- mkpath($testenv{'tptpLogPath'});
- move("C:\\rft\\testadapter_logs\\" . $testenv{'time_testname'} . "\\" . $testenv{'tptpLogName'}
- , $testenv{'tptpLogFile'});
- }
- # choose rft-log-parser
- if(-e $testenv{'tptpLogFile'}){
- $parser_class = $rh_rftenv->{'rft_parser_class'};
- $tool_logfile = $testenv{'tptpLogFile'};
- }
- } else {
- # choose selenium-log-parser
- if(-d $testenv{'gadLogPath'}) {
- # Aufruf Selenium-Logparser
- $parser_class = $rh_rftenv->{'selenium_parser_class'};
- $tool_logfile = $testenv{'gadLogPath'};
- $rh_rftenv->{'javadir'} = "C:\\Programme\\Selenium\\jdk1.8.0_141\\bin";
- }
- }
- if($parser_class ne "") {
- #Aufruf LogParser
- #Syntax: GadParser.cmd <tptp-Log> <gad-Log> <Javadir>
- #Hier die GADParser.cmd Datei:
- #SET source=%1
- #SET dest=%2
- #SET JAVADIR=%3
- #SET EXTJARSDIR=C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\IBM\RFT\customization\
- #SET CLASSPATH=%CLASSPATH%;%EXTJARSDIR%GADParser.jar;%EXTJARSDIR%log4j-1.2.15.jar
- #%javadir%\java com.ibm.parser.LogProcessor %source% %dest%
- $cmd = $rh_rftenv->{'parser_cmd'} . " " . $tool_logfile . " " . $testenv{'gadLogPath'} . "\\" . $testenv{'gadLogFile'} . " " . $rh_rftenv->{'javadir'} . " " . $parser_class . " > " . $rh_rftenv->{'logparserlog'} . " 2>&1";
- print "LogParser start command: $cmd\n" if($DEBUG);
- $status = system ($cmd);
- print "log parser exit: " . $status . "\n" if($DEBUG);
- if ($status != 0){
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "\nFehler beim LogParser. Error Code: ".$status;
- exit(6);
- }
- } else {
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "\nKein Logfile gefunden! Soll: ". $tool_logfile;
- exit(6);
- }
- #############################################################
- #
- # 9 Logs packen
- #
- #############################################################
- logHeader ("\n9 Logs packen\n");
- # Zippen des Original-tptp-logs incl. des Ordners und Ablage im Logverzeichnis des Testfalls
- $cmd = $rh_rftenv->{'zip_cmd'} . $testenv{'gadLogPath'} . "\\" . $testenv{'tptpLogFileZIP'} . " " . $testenv{'gadLogPath'};
- print "7zip start command: " . $cmd . "\n" if($DEBUG);
- $status = system($cmd);
- if ($status != 0){
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "\nFehler beim ZIP der Logfiles. Error Code: ".$status;
- exit(7);
- }
- ###############################
- #
- # Umbenennen der Log-Definitionsdatei zum Abschluss des Tests
- #
- ###############################
- print "Umbennenen der temporären log-Definitionsdatei in gültigen Namen";
- #Umbenennen der temp-Definitionsdatei
- $cmd = "rename " . $rh_rftenv->{'logdefdir'} . "\\" . $testenv{'tmpLogDefFile'} . " " . $testenv{'logDefFile'};
- print "Umbenennen def-Datei command: $cmd\n" if($DEBUG);
- $status = system($cmd);
- if ($status != 0){
- print "Starte Cleanup\n";
- start_rft_cleanup();
- print "Cleanup beendet!\n";
- print "\nFehler rename der LogDef Datei. Error Code: ".$status;
- exit(7);
- }
- #################################################################
- #
- # 10 Prüfuen des Logs auf Testfehler - Aufruf von getTestRunStatus
- #
- #################################################################
- logHeader("\n10 Prüfen des Logs auf Testfehler - Aufruf von getTestRunStatus\n");
- $retval = getTestRunStatus(\%testenv);
- print "return value of getTestRunStatus: $retval\n" if($DEBUG);
- if($retval == 99){
- $status = "Testscript wurde mit fachlichen Fehlern beendet!";
- $testinfo{'rftstatus'} = "FAILED";
- }
- elsif($retval == 0){
- $status = "OK";
- $testinfo{'rftstatus'} = "PASSED";
- }
- else{
- #todo xgadlga: hier noch ein default für $testinfo{'rftstatus} und $status ???
- print "retval ist weder 99 noch 0, sondern : " . $retval . "\n";
- }
- $testRunsLog{'status'} = $testinfo{'rftstatus'};
- ###############################
- # Das Testrunlog schreiben, für die Zeitauswertung
- print "Aufruf write_testrunslog()" if($DEBUG);
- write_testrunslog(\%testenv,\%testRunsLog);
- #################################################################
- #
- # 13 Cleanup
- #
- #################################################################
- logHeader("\n13 Cleanup\n");
- #den status auf Cleanup setzen
- print "Starte Cleanup\n" if($DEBUG);
- start_rft_cleanup();
- print "Cleanup beendet!\n" if($DEBUG);
- print "Test abgeschlossen: " . get_formatted_tsp(time) . "\n" if($DEBUG);
- print "Beendet RFTcontroller.pl mit dem return Code: " . $retval . "\n" if($DEBUG);
- use constant {
- FROM_DIR => "C:/rft/logdefs/",
- TO_DIR => "C:/rft/loghistory/",
- };
- #Opens FROM_DIR, ao I can read from it
- opendir my $dir, FROM_DIR;
- # Loopa through the directory
- while (my $file = readdir $dir) {
- next if ($file eq "." or $file eq "..");
- my $from = FROM_DIR . "/" . "$file";
- move $from, TO_DIR;
- }
- #exit mit dem return code aus dem Status
- exit ($retval);
- END {
- #den laden dicht machen
- if($db_handle){
- db_disconnect($db_handle);
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement