Advertisement
Guest User

Untitled

a guest
Feb 13th, 2019
144
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 31.39 KB | None | 0 0
  1. #c:\\rft\\perl\\bin
  2. # Rückgabewerte
  3. # 1 - zu wenig Argumente
  4. # 2 - Fehler bei Kopie Excel Attachment
  5. # 3 - Fehler bei Aufruf des CC Copy Scripts
  6. # 4 - Fehler bei BUILD
  7. # 5 - Fehler beim Start des RFT
  8. # 6 - Fehler beim Start des LogParsers
  9. # 7 - Fehler beim zippen der Ergebnisse
  10. # 8 - Fehler bei Umbenennung der Definitionsdateien
  11. # 9 - Fehler beim validieren der Excel Datei
  12. #error codes für excel
  13. #10 - Fehler beim Auslesen des global Teils
  14. #11 - Fehler beim Auslesen des Testspezifischen Teils
  15.  
  16. use lib "c:\\rft\\batchfiles\\lib";
  17. use lib "c:\\rft\\batchfiles\\rtcrest";
  18.  
  19. use strict;
  20. use db_functions;
  21. use rftqclib;
  22. use rtclib;
  23. use syslib;
  24. use rftqccfg;
  25. use Data::Dumper;
  26. use POSIX qw(strftime);
  27.  
  28. # Dekarationen für den Excel-Zugriff
  29. use Win32::OLE qw(in with);
  30. use Win32::OLE::Const 'Microsoft Excel';
  31.  
  32. use File::Copy;
  33. use File::Path;
  34.  
  35. use Config::Properties;
  36.  
  37. my $VERSION = "5.2.0";
  38.  
  39. $Win32::OLE::Warn = 0; # das Warn Level auf 0 setzen
  40.  
  41.  
  42. logHeader("\n Exitcodes\n");
  43. print "1 - zu wenig Argumente\n";
  44. print "2 - Fehler bei Kopie Excel Attachment\n";
  45. print "3 - Fehler bei Aufruf des CC Copy Scripts\n";
  46. print "4 - Fehler bei BUILD\n";
  47. print "5 - Fehler beim Start des RFT\n";
  48. print "6 - Fehler beim Start des LogParsers\n";
  49. print "7 - Fehler beim zippen der Ergebnisse\n";
  50. print "8 - Fehler bei Umbenennung der Definitionsdateien\n";
  51. print "9 - Fehler beim validieren der Excel Datei\n";
  52.  
  53. logHeader("\n Batchfiles Version\n");
  54.  
  55. print "RFT Batchfiles Version: " . $VERSION . "\n";
  56.  
  57. my $DEBUG = 1;
  58.  
  59.  
  60. # initialisierung von parametern
  61. my $retval = 0;
  62. my $xlsError = 0;
  63. my $errorCode = 0;
  64. my $timestamp = 0;
  65. my $cmd = "";
  66. my $errorString = "";
  67. my $i = 0;
  68. my $result = 0;
  69. my $errorlog = "";
  70. my $timelog = "";
  71. my $rftstartcmd = "";
  72. my $exporterror = 0;
  73. my $status = 0;
  74. my $rfttestparameter = "";
  75. my $dbflag = 0;
  76. my $db_handle = 0;
  77. my $ds_handle = 0;
  78. my $st_handle = 0;
  79. my $result = "";
  80. my $sql = "";
  81. my $rh_dbresult = "";
  82. my $step_status = "";
  83. my $step_name = "";
  84. my $step_message = "";
  85. my $error_message = "";
  86. my $message = "";
  87. my $key = "";
  88. my $hostname = "";
  89.  
  90. my %testinfo = ();
  91. my %testRunsLog = ();
  92.  
  93. my %aquaenv = ();
  94. my %testenv = ();
  95. my %QcTestMetaData = ();
  96.  
  97. # Für den Selenium3SupportUpdater benötigte JARs
  98. # TODO JAR-Version in rftqccfg.pm übernehmen
  99. my $jar_gte = "C:\\Program Files\\eclipse36-gte-plugins\\eclipse\\plugins\\de.gad.seu.guitest_1.1.2.jar";
  100. my $jar_commons_io = "C:\\Program Files\\Selenium\\thirdparty\\commons-io-2.4.jar";
  101.  
  102. #######################################################################################
  103. #
  104. # 1 Testvorbereitung auf dem Client
  105. #
  106. #######################################################################################
  107. logHeader("\n1 Testvorbereitung auf Client\n");
  108. $hostname = get_hostname();
  109. print "Testclient: " . $hostname . "\n\n";
  110. print "Start: " . get_formatted_tsp(time) . "\n";
  111. $testenv{'rtcname'} = $hostname;
  112.  
  113. #verarbeitung von leerzeichen
  114. #$in =~ s/%(..)/pack("c",hex($1))/ge;
  115.  
  116. #die initialen parameter besorgen
  117. print "start init_rft_env(): " . get_formatted_tsp(time) . "\n" if($DEBUG);
  118. my $rh_rftenv = init_rft_env();
  119. print "ende init_rft_env(): " . get_formatted_tsp(time) . "\n" if($DEBUG);
  120.  
  121. #die " entfernen
  122. my $num_params = @ARGV;
  123. for($i=0;$i<$num_params;$i++){
  124. $ARGV[$i] =~ s/"//g;
  125. }
  126.  
  127. #######################################################################################
  128. #
  129. # 2 Übergebene Parameter
  130. #
  131. #######################################################################################
  132. logHeader ("\n2 Übergebene Parameter:\n");
  133. print "Anzahl der parameter: " . $num_params . "\n\n";
  134.  
  135. print "ARGV[0] PROJECT_ID: " . $ARGV[0] . "\n"; #muss
  136. print "ARGV[1] PROJECT_FOLDER_ID: " . $ARGV[1] . "\n"; #muss
  137. print "ARGV[2] TESTCASE_NAME: " . $ARGV[2] . "\n"; #muss
  138. print "ARGV[3] TESTCASE_ID: " . $ARGV[3] . "\n"; #muss
  139. print "ARGV[4] TESTSCENARIO_ID: " . $ARGV[4] . "\n"; #muss
  140. print "ARGV[5] URI: " . $ARGV[5] . "\n"; #muss
  141. print "ARGV[6] GTE-USER: " . $ARGV[6] . "\n"; #muss
  142. print "ARGV[7] GTE-PASSWORD: " . $ARGV[7] . "\n"; #muss
  143. print "ARGV[8] TESTDATENSATZ: " . $ARGV[8] . "\n"; #muss
  144. print "ARGV[9] WERKZEUG: " . $ARGV[9]. "\n"; #muss
  145. print "ARGV[10] BROWSER: " . $ARGV[10]. "\n"; #muss
  146. print "ARGV[11] PRODUKT: " . $ARGV[11]. "\n"; #muss
  147. print "ARGV[12] RELEASE: " . $ARGV[12]. "\n"; #muss
  148. print "ARGV[13] GUID: " . $ARGV[13]. "\n"; #muss
  149. print "ARGV[14] Rfttu: " . $ARGV[14]. "\n"; #muss
  150.  
  151. #prüfen, ob die anzahl der parameter korrekt ist...
  152. print "\nprüfe, ob 15 parameter übergeben wurden:\n";
  153. if($num_params != 15 ){
  154. print "Falsche Anzahl an Parametern! Soll: 15, Ist: " . @ARGV . "\n";
  155. $retval = 1;
  156. print "Exitcode $retval";
  157. exit($retval);
  158. }
  159. print "Korrekte Anzahl an Parametern übergeben\n";
  160.  
  161. #######################################################################################
  162. #
  163. # 3 Vorbereitung der Runtime-Daten
  164. #
  165. #######################################################################################
  166. logHeader("\n3 Vorbereitung der Runtime-Daten\n");
  167.  
  168. #zeitstempel erstellen
  169. $timestamp = make_timestamp();
  170. print "Neuer Timestamp " . $timestamp . "\n";
  171. $testRunsLog{"teststart_unx"} = make_unixtimestamp();
  172. print "Unix Timestamp " . $testRunsLog{"teststart_unx"} . "\n";
  173.  
  174. print "weise %aquaenv werte zu \n";
  175.  
  176. #Variablen für die aqua Ablage in einen Hash schreiben:
  177. $aquaenv{'PROJECT_ID'} = $ARGV[0];
  178. $aquaenv{'PROJECT_FOLDER_ID'} = $ARGV[1];
  179. $aquaenv{'TESTCASE_NAME'} = $ARGV[2];
  180. $aquaenv{'TESTCASE_ID'} = $ARGV[3];
  181. $aquaenv{'TESTSCENARIO_ID'} = $ARGV[4];
  182. $aquaenv{'URI'} = $ARGV[5];
  183.  
  184. print "weise %testenv werte zu \n";
  185. $testenv{'letzterStatus'} = $rh_rftenv->{'letzterstatus'};
  186. $testenv{'package'} = getPackage{$aquaenv{'TESTCASE_NAME'}};
  187. $testenv{'classfile'} = $rh_rftenv->{'packagedir'} . "\\" . getClassFile($aquaenv{'TESTCASE_NAME'});
  188.  
  189. $testenv{'ccPackages'} = ""; #wird unten definiert
  190. $testenv{'produkt'} = $ARGV[11];
  191. $testenv{'release'} = $ARGV[12];
  192. $testenv{'ccProjekt'} = ""; #wird unten definiert
  193. $testenv{'rftProjekt'} = ""; #wird unten definiert
  194.  
  195. $testenv{'ccPackages'} = $aquaenv{'TESTCASE_NAME'};
  196. $testenv{'ccPackages'} =~ s/\..*//g;
  197. $testenv{'ccPackages'} =~ s/\n|\s//gi;
  198.  
  199. $testenv{'gteProdVersion'} = "";
  200. $testenv{'gteSkriptKompVersion'} = "";
  201. $testenv{'gteApiKompVersion'} = "";
  202.  
  203. if ($DEBUG) {
  204. logHeader("Debug-Ausgabe der rh_rftenv-Werte, die zweite ... ");
  205. print "\nrh_rftenv-werte:\n";
  206. foreach $key ( keys $rh_rftenv){
  207. print $key . ": = " . $rh_rftenv->{$key} . "\n"
  208. }
  209. print "\n **** Ende Debug-Ausgabe **** \n\n";
  210. }
  211.  
  212. #Verbinde zu einer Datenbank.
  213. $db_handle = db_connect("",$rh_rftenv->{'tdv_usr'},$rh_rftenv->{'tdv_pwd'},$rh_rftenv->{'tdv_db'},"DB2",$rh_rftenv->{'DB2_AUTOCOMMIT_ON'});
  214.  
  215.  
  216. print "db_handle: = " . $db_handle . "\n";
  217. print "hostname: = " . $hostname . "\n";
  218.  
  219. ##den client locken
  220. update_rtc_status($hostname,"J","null",1,$db_handle);
  221.  
  222. #############################################################################################################################
  223. #qc_getMetaData ersatz
  224. # qc_getMetadata und prepareTestMetaData holen ID zu TestSet und TestInstanzen aus QC und überschreiben dann eventuell die Felder
  225. # rftuser, rftpwd, tool, browser, rfttds (Testdatensatz), iterationen, testapi
  226. # ebenso werden Produkt und Release ermittelt dies wird alles schon im PowerShell-Skript erledigt
  227. $testenv{'rfttu'} = $ARGV[14];
  228. $testenv{'rftuser'} = $ARGV[6];
  229. $testenv{'rftpwd'} = $ARGV[7];
  230. $testenv{'rfttds'} = "";
  231. if($ARGV[8] != "KeinTestDatenSatzEsWirdEinDefaultVerwendet"){
  232. $testenv{'rfttds'} = $ARGV[8];
  233. }
  234. $testenv{'tool'} = $ARGV[9];
  235. $testenv{'browser'} = $ARGV[10];
  236.  
  237. #######################################################################################
  238. #ENTFÄLLT
  239. # 4 Prüfe auf laufenden Test
  240. #ENTFÄLLT
  241. #######################################################################################
  242.  
  243. # Generierung eines eindeutigen Namens für das aktuelle Log
  244. # Generierung von Logfiles
  245. # Logfilename ist der Name des logs für die RFT Ausführung
  246. # RFT legt im log-Ordner einen Unterordner mit diesem Namen an
  247. # Unterhalb dieses Ordners wird das tptp-lofile mit dem gleichen
  248. # Namen und der Erweiterung .execution gespeichert
  249. #######################################################################################
  250. #
  251. # 5 Initialisierung der Verzeichnisse und Logfiles
  252. #
  253. #######################################################################################
  254. logHeader("\n5 Initialisierung der Verzeichnisse und Logfiles");
  255.  
  256. $testenv{'time_testname'} = $timestamp . "_" . $aquaenv{'TESTCASE_NAME'};
  257. $testenv{'gadLogPath'} = $rh_rftenv->{'logdir'} . "\\" . $testenv{'time_testname'} . "_" . $ARGV[13];
  258. $testenv{'gadLogFile'} = $testenv{'time_testname'} . ".txt";
  259. $testenv{'tptpLogPath'} = $rh_rftenv->{'packagelogdir'} . "\\" . $testenv{'time_testname'};
  260. $testenv{'tptpLogName'} = $testenv{'time_testname'} . ".execution";
  261. $testenv{'tptpLogFile'} = $testenv{'tptpLogPath'} . "\\" . $testenv{'tptpLogName'};
  262. $testenv{'tptpLogFileZIP'} = $testenv{'tptpLogName'} . ".zip";
  263. $testenv{'testname'} = getTestNameWithoutPackage($aquaenv{'TESTCASE_NAME'});
  264. $testenv{'gadParserLog'} = $rh_rftenv->{'rftdir'} . "\\gadparser_log_" . $timestamp . ".log";
  265. $testenv{'tmpLogDefFile'} = $testenv{'time_testname'} . ".qcimportdef_tmp";
  266. $testenv{'logDefFile'} = $testenv{'time_testname'} . ".qcimportdef";
  267. $testenv{'logDefErrFile'} = $testenv{'time_testname'} . ".qcimportdef_err";
  268. $testenv{'tdlog'} = $rh_rftenv->{'logdir'} . "\\" . $testenv{'time_testname'} . "_tdlog.txt";
  269.  
  270. if ($DEBUG) {
  271. logDebug("Debug-Ausgabe der testenv-Werte ... ");
  272. print "\ntestenv-werte:\n";
  273. foreach $key ( keys %testenv){
  274. print $key . ": " . $testenv{$key} . "\n";
  275. }
  276. print "\n **** Ende Debug-Ausgabe **** \n\n";
  277. }
  278.  
  279. ###############################
  280. #
  281. # Anlegen von Verzeichnissen
  282. #
  283. ###############################
  284.  
  285. #tetfall: hier noch einen error provozieren! : im QC angelegt
  286. init_rft_dirs(\%aquaenv, \%testenv);
  287.  
  288.  
  289. ###############################
  290. #
  291. # Sichern der aktuellen Prozessliste
  292. #
  293. ###############################
  294.  
  295. print "plist_start: " . $rh_rftenv->{'plist_start'} . "\n";
  296.  
  297. write_process_list($rh_rftenv->{'plist_start'});
  298.  
  299.  
  300. ###############################
  301. #
  302. # Erstellen der temporären Log-Definitionsdatei
  303. #
  304. ###############################
  305.  
  306. # in der Ausgabe wird der Testname um die [1] erweitert, welche im ps1 Script entfernt wurde
  307.  
  308. # write_logdef verwendet QC_variablen wird also ersetzt:
  309.  
  310. #Testdaten aus der DB (Testdatenverwaltung) holen
  311. print "Start TDV Abfrage: " . get_formatted_tsp(time) . "\n" if($DEBUG);
  312.  
  313. print "Schreibe temporäre LogDef-Datei\n";
  314.  
  315. my $logdef = "";
  316. my $logdeffile = $rh_rftenv->{'logdefdir'} . "\\" . $testenv{'tmpLogDefFile'};
  317.  
  318. $logdef = $aquaenv{'URI'} . "|";
  319. $logdef .= $aquaenv{'PROJECT_ID'} . "|";
  320. $logdef .= $aquaenv{'PROJECT_FOLDER_ID'} . "|";
  321. $logdef .= $aquaenv{'TESTCASE_ID'} . "|";
  322. $logdef .= $aquaenv{'TESTSCENARIO_ID'} . "|";
  323. $logdef .= $testenv{'gadLogPath'} . "\\" . $testenv{'gadLogFile'} . "|";
  324. $logdef .= $testenv{'gadLogPath'} . "\\" . $testenv{'tptpLogFileZIP'} . "|" . "\n";
  325.  
  326. open OUTFILE, ">$logdeffile";
  327. print OUTFILE $logdef;
  328. close OUTFILE;
  329.  
  330. if($db_handle == -1){
  331. print "Starte Cleanup\n";
  332. start_rft_cleanup();
  333. print "Cleanup beendet!\n";
  334. print "\nFehler beim Connect zur Datanbank";
  335. exit(4);
  336. }
  337.  
  338. # #Prüfung, ob die Datensätze vorhanden sind
  339. # #-1: Produkt oder Release sind in der TDV nicht vorhanden
  340. # #-2: Es gibt kein Script in der Testdatenverwaltung
  341. # #-3: Der angebene Testdatensatz ist nicht vorhanden
  342. # $nrAutotest = checkTDS(\%testenv,$db_handle);
  343. # if($nrAutotest == -1){
  344. # #db_disconnect($db_handle);
  345. # handle_error(\%qcenv,\%testenv,"72","Produkt oder Release sind in der TDV nicht vorhanden. Bitte TDV und QC-Pfad prüfen!");
  346. # }elsif($nrAutotest == -2){
  347. # #db_disconnect($db_handle);
  348. # handle_error(\%qcenv,\%testenv,"73","Zum Test ist kein Testfall in der Testdatenverwaltung vorhanden!");
  349. # }elsif($nrAutotest == -3){
  350. # #db_disconnect($db_handle);
  351. # handle_error(\%qcenv,\%testenv,"74","Der gewählte Testdatensatz existiert nicht.");
  352. # }
  353. my $nrAutotest = 'find';
  354.  
  355. print "Folgendes Produkt wird für den Test verwendet: " . $testenv{'produkt'} . "\n";
  356.  
  357. $rh_dbresult = getProjectFromDB($db_handle, $testenv{'produkt'},$testenv{'release'});
  358.  
  359. if($rh_dbresult == -1){
  360. print "Starte Cleanup\n";
  361. start_rft_cleanup();
  362. print "Cleanup beendet!\n";
  363. print "\nFehler beim Auslesen der Daten aus der Datanbank";
  364. exit(4);
  365. }
  366.  
  367. $testenv{'ccProjekt'} = $rh_dbresult->{'BEZCCPROJEKT'};
  368. $testenv{'rftProjekt'} = $rh_dbresult->{'BEZRFTPROJEKT'};
  369. $testenv{'nrRelease'} = $rh_dbresult->{'NRRELEASE'};
  370.  
  371. #den client wieder freigeben
  372. update_rtc_status($hostname,"J",$nrAutotest,0,$db_handle,\%testenv);
  373.  
  374. print "Ende TDV Abfrage: " . get_formatted_tsp(time) . "\n" if($DEBUG);
  375.  
  376. #####
  377. # Es wurden nun die Daten aus der DB geholt und müssen aufbereitet werden!
  378. #####
  379.  
  380. #wenn in $testenv{'ccexport'} nicht TRUE, FALSE oder COMPLETE steht, wird TRUE gesetzt
  381. if($testenv{'ccexport'} !~ /TRUE|FALSE|COMPLETE/i){
  382. $testenv{'ccexport'} = "TRUE";
  383. }
  384.  
  385. # prepare selenium-vars
  386. my $selenium_product = substr($testenv{'rftProjekt'}, 0, 3);
  387. my $selenium_prepackage = "src/de/gad/guitest/" . $selenium_product . "/";
  388. my $selenium_testcase = $aquaenv{'TESTCASE_NAME'};
  389. my $seleniumtestclass = "de.gad.guitest." . $selenium_product . "." . $selenium_testcase;
  390.  
  391. #--------------------------------------------------------------------
  392. # Fallunterscheidung: API-Mapping ermitteln
  393. # -> nur für RTC-Projekte ('_guitest' -> wird für Selenium zu '_selenium' umgeändert)
  394. #
  395. # Für Aufrufe von RTC-Projekten wird hier ermittelt, welche Skriptkomponente zur Produktversion benötigt wird
  396. # Bsp: zu bank21 5.6.0 gehört Skriptingkomonente B21 TSB 01.00.00
  397. if ($testenv{'rftProjekt'} =~ /guitest/i){
  398. my $rh_testenv = getApiMapping(\%testenv);
  399. %testenv = %{$rh_testenv};
  400. }
  401.  
  402. if ($DEBUG) {
  403. logHeader("Debug-Ausgabe der testenv-Werte, die zweite ... ");
  404. print "\ntestenv-werte:\n";
  405. foreach $key ( keys %testenv){
  406. print $key . ": = " . $testenv{$key} . "\n"
  407. }
  408. print "\n **** Ende Debug-Ausgabe **** \n\n";
  409. }
  410.  
  411. ###########################################################################################
  412. #
  413. # 6 Aktualisierung bzw. Check der Sourcen
  414. #
  415. ###########################################################################################
  416. logHeader ("\n6 Aktualisierung bzw. Check der Sourcen\n");
  417.  
  418. if($testenv{'ccexport'} =~ /FALSE/i){
  419. #keine Sourcen aus ClearCase oder RTC holen (und keinen BUILD ausführen)
  420. print "ccexport ist FALSE: Es werden keine Sourcen aus dem ClearCase bzw. RTC geholt!\n" if($DEBUG);
  421. # TODO - funktioniert der chk_src_version() für alle Fälle ??
  422. chk_src_version(\%aquaenv,\%testenv);
  423.  
  424. } else {
  425.  
  426. #testfall: nicht vorhandenes Package / RFT- / CC-Projekt übergeben: im QC angelegt
  427.  
  428. print "Start Export aus Versionsverwaltung um " . get_formatted_tsp(time) . "\n" if($DEBUG);
  429.  
  430. if ($DEBUG){
  431. print "RFT Projekt " . $testenv{'rftProjekt'} . "\n";
  432. print "Tool " . $testenv{'tool'} . "\n";
  433. }
  434.  
  435. #--------------------------------------------------------------------
  436. # Fallunterscheidung: Source-Aktualisierung für CC/RTC bzw. GTE/Selenium
  437. # 1) GTE-Sourcen aus RTC
  438. # 2) GTE-Sourcen aus CC entfällt
  439. # 3) Selenium-Sourcen aus RTC
  440. # 4) Selenium-Sourcen aus CC entfällt
  441. #
  442. if ($testenv{'tool'} eq "GTE Selenium" && $testenv{'rftProjekt'} =~ /guitest/i){
  443.  
  444. # 1) GTE-Sourcen aus RTC holen (ab bank21 Release 5.6.0), ermittelt am Projektnamen 'xxx_guitest'
  445. print "GTE-Sourcen werden aus RTC geholt ... \n";
  446. $exporterror = get_sources_from_rtc(gte_getProductFromCompVers($testenv{'ccProjekt'}),gte_getCompFromCompVers($testenv{'ccProjekt'}), gte_get8cFormattedVersionFromCompVers($testenv{'ccProjekt'}), "guitest", $testenv{'ccexport'}, $testenv{'ccPackages'},);
  447.  
  448. # }elsif($testenv{'tool'} eq "GTE Selenium" && $testenv{'rftProjekt'} !~ /guitest/i){
  449. #
  450. # 2) GTE-Sourcen aus CC holen (bis bank21 Release 5.5.0), ermittelt am anderem Projektnamen als 'xxx_guitest'
  451. # print "GTE-Sourcen werden aus ClearCase geholt ... \n";
  452. # $exporterror = get_sources_from_cc($testenv{'ccProjekt'},$testenv{'rftProjekt'} . "_tests", $testenv{'ccPackages'}, $testenv{'ccexport'});
  453.  
  454. } elsif($testenv{'tool'} eq "Selenium" && $testenv{'rftProjekt'} =~ /guitest/i){
  455.  
  456. # 3) Selenium-Sourcen aus RTC holen (ab bank21 Release 5.6.0), ermittelt am Projektnamen 'xxx_guitest'
  457. print "Selenium-Sourcen werden aus RTC geholt ... \n";
  458. $exporterror = get_sources_from_rtc(gte_getProductFromCompVers($testenv{'ccProjekt'}),gte_getCompFromCompVers($testenv{'ccProjekt'}), gte_get8cFormattedVersionFromCompVers($testenv{'ccProjekt'}), "selenium", $testenv{'ccexport'}, $testenv{'ccPackages'},);
  459.  
  460. #} elsif($testenv{'tool'} eq "Selenium" && $testenv{'rftProjekt'} !~ /guitest/i){
  461. #
  462. # # 4) Selenium-Sourcen aus CC holen (bis bank21 Release 5.5.0), ermittelt am anderem Projektnamen als 'xxx_guitest'
  463. # print "Selenium-Sourcen werden aus CC geholt ... \n";
  464. # my $sel_package = $selenium_prepackage . $testenv{'ccPackages'};
  465. # $exporterror = get_sources_from_cc($testenv{'ccProjekt'},$testenv{'rftProjekt'} . "_sel", $sel_package, $testenv{'ccexport'});
  466.  
  467. } else {
  468.  
  469. # Übrige Fälle - keine Implementierung verfügbar
  470. print "Aktualisierung der Sourcen für Werkzeug " . $testenv{'tool'} . " und Projekt " . $testenv{'rftProjekt'} . " nicht implementiert\n";
  471. exit();
  472. }
  473.  
  474. if ($exporterror != 0) {
  475. print "Starte Cleanup\n";
  476. start_rft_cleanup();
  477. print "Cleanup beendet!\n";
  478. print "\nFehler beim Bereitstellen der Sourcen aus dem ClearCase: CC-Projekt: " . $testenv{'ccProjekt'} . ", RFT-Projekt: " . $testenv{'rftProjekt'} . ", Packages: " . $testenv{'ccPackages'} . ", CC-Export: " . $testenv{'ccexport'};
  479. exit(3);
  480. }else{
  481. print "Die Sourcen wurden erfolgreich heruntergeladen und entpackt.\n"
  482. }
  483.  
  484. }#Ende if($ccexport =~ /FALSE/)
  485.  
  486. #############################################################
  487. #
  488. # 7 Aufruf des Testtools (GTE bzw. Selenium)
  489. #
  490. #############################################################
  491. logHeader ("\n7 Aufruf des Testtools (Selenium, ...) \n");
  492.  
  493. #--------------------------------------------------------------------
  494. # Fallunterscheidung: bzw. hier eher Prüfung auf Selenium-Tools (GTE inkludiert)
  495. if($testenv{'tool'} =~ /Selenium/i) {
  496. #####################################################
  497. # Beide Fälle -> Aufruf für Selenium oder GTE
  498. #####################################################
  499.  
  500. # set java_home to selenium jdk
  501. $ENV{'JAVA_HOME'} = 'C:\\Program Files\\Selenium\\jdk1.8.0_141';
  502.  
  503. open my $propFile, '<', 'C:\\Programme\\Selenium\SEU\\GTE.properties' or die "unable to open GTE.properties";
  504. my $properties = Config::Properties->new();
  505. $properties->load($propFile);
  506.  
  507. $properties->getProperty("selenium_version");
  508. #################################################################
  509. # GTE.properties und API.properties aktualisieren über Selenium3SupportUpdater (innerhalb des GTE Plugins)
  510. # -> Der Updater unterscheidet intern zwischen RTC und CC anhand der übergebenen Produkversion
  511. #
  512. # Ablauf
  513. # - Prüfen, ob die benötigten Files da sind
  514. # - Aktualisierung API.properties, danach Aktualisierung Selenium3Support.jar
  515. #
  516. if (!-e $jar_gte) {
  517. print "Starte Cleanup\n";
  518. start_rft_cleanup();
  519. print "Cleanup beendet!\n";
  520. print "\n " . $jar_gte . " konnte nicht gefunden werden.";
  521. exit(5);
  522. }
  523. if (!-e $jar_commons_io) {
  524. print "Starte Cleanup\n";
  525. start_rft_cleanup();
  526. print "Cleanup beendet!\n";
  527. print "\n " . $jar_commons_io . " konnte nicht gefunden werden.";
  528. exit(5);
  529. }
  530.  
  531. my $updatercmd;
  532.  
  533. if ($testenv{'rftProjekt'} =~ /guitest/i){
  534. $updatercmd = "java -cp \"" . $jar_gte . "\";\"" . $jar_commons_io . "\" de.gad.seu.guitest.updater.Selenium3SupportUpdater " . $testenv{'gteProdVersion'};
  535. }
  536.  
  537. if ($DEBUG) {
  538. print "Ausführung von '" . $updatercmd . "' des Updaters\n";
  539. }
  540.  
  541. $status = system ($updatercmd);
  542. if ($status != 0){
  543. print "Starte Cleanup\n";
  544. start_rft_cleanup();
  545. print "Cleanup beendet!\n";
  546. print "\nSelenium3SupportUpdater konnte nicht ausgeführt werden.";
  547. exit(5);
  548. }
  549.  
  550. #--------------------------------------------------------------------
  551. # Fallunterscheidung: Ort und Namen für Ablage von Selenium3Support.jar unterschiedlich
  552. # in CC-Projekten bzw. RTC-Projekten
  553. #
  554. # Folgende Fälle werden unterschieden:
  555. # 1) CC-Projekte: Ablage unter C:\Programme\Selenium\SEU und Suffix mit Produktrelease
  556. # bzw. analog auf Remote-Server
  557. # 2) RTC-Projekte: Ablage unter C:\Programme\Selenium\SEU\{API-Unterordner} und Suffix
  558. # ohne Produktrelease bzw. analog auf Remote-Server
  559. #
  560. # -> fließt auch in Aufrufparameter ein, s. Fallunterscheidung unten vor Aufruf
  561. #
  562.  
  563. # Aufrufparamter für Selenium3Suppor.jar ermitteln
  564.  
  565. if (($testenv{'rftProjekt'} =~ /guitest/i) || ($testenv{'rftProjekt'} =~ /selenium/i)) {
  566.  
  567. # Es handelt sich um ein RTC-Projekt - prüfen, ob ein Selenium3Support.jar im API-Unterordner vorhanden ist
  568. logDebug("Verwende " . $testenv{gteApiKompVersion} . "\\Selenium2Suppor.jar");
  569. my $filename = "C:\\Programme\\Selenium\\SEU\\" . $testenv{gteApiKompVersion} . "\\Selenium3Support.jar";
  570. if (!-e $filename) {
  571. print "Starte Cleanup\n";
  572. start_rft_cleanup();
  573. print "Cleanup beendet!\n";
  574. print "\nC:\\Programme\\Selenium\\SEU\\" . $testenv{gteApiKompVersion} . "\\Selenium3Support.jar konnte nicht gefunden werden.";
  575. exit(5);
  576. }
  577. }else{
  578.  
  579. # Es handelt sich um ein CC-Projekt - prüfen, ob ein Selenium3Support.jar mit entsprechendem Suffix vorhanden ist
  580. logDebug("Verwende Selenium3Support_" . $testenv{'rftProjekt'} . ".jar");
  581. my $filename = "C:\\Programme\\Selenium\\SEU\\Selenium3Support_" . $testenv{'rftProjekt'} . ".jar";
  582. if (!-e $filename) {
  583. print "Starte Cleanup\n";
  584. start_rft_cleanup();
  585. print "Cleanup beendet!\n";
  586. print "Selenium3Support_" . $testenv{'rftProjekt'} . ".jar konnte nicht gefunden werden.";
  587. exit(5);
  588. }
  589. }
  590.  
  591. # Aufrufparamter für Selenium-Properties ermitteln oder Default-Wert setzen
  592. my $selenium_version = $properties->getProperty("selenium_version");
  593. if (length($selenium_version) == 0 ) {
  594. $selenium_version = "2.52.0";
  595. }
  596.  
  597. my $pdfbox_version = $properties->getProperty("pdfbox_version");
  598. if (length($pdfbox_version) == 0) {
  599. $pdfbox_version = "2.0.1";
  600. }
  601.  
  602. my $appium_version = $properties->getProperty("appium_version");
  603. if (length($appium_version) == 0) {
  604. $appium_version = "3.3.0";
  605. }
  606.  
  607. my $tika_version = $properties->getProperty("tika_version");
  608. if (length($tika_version) == 0) {
  609. $tika_version = "1.17";
  610. }
  611.  
  612. # Aufrufparamter für Firefox ermitteln
  613. my $firefox_path = $properties->getProperty("firefox_path");
  614.  
  615. # Start selenium-ant mit Aufrufparametern
  616. my $seleniumcmd = "cd C:\\rft\\packages & C:\\RFT\\apache-ant-1.8.2\\bin\\ant -Dlogs.dir=" . $testenv{'gadLogPath'};
  617. if($testenv{'tool'} !~ /GTE/i) {
  618. $seleniumcmd .= " -Dtest.class=" . $seleniumtestclass;
  619. } else {
  620. $seleniumcmd .= " -Dtest=" . $aquaenv{'TESTCASE_NAME'};
  621. }
  622. if(length($testenv{'rfttu'}) != 0 ){
  623. $seleniumcmd .= " -Dtest.url=\"" . $testenv{'rfttu'} . "\"";
  624. }
  625. if(length($testenv{'rftuser'}) != 0 ){
  626. $seleniumcmd .= " -Dtest.user=" . $testenv{'rftuser'};
  627. }
  628. if(length($testenv{'rftpwd'}) != 0 ){
  629. $seleniumcmd .= " -Dtest.password=" . $testenv{'rftpwd'};
  630. }
  631. if(length($testenv{'rfttds'}) != 0 ){
  632. $seleniumcmd .= " -Dtest.tds=" . $testenv{'rfttds'};
  633. }
  634. my $browser = $testenv{'browser'};
  635. if($browser eq "") { # default browser is firefox
  636. $browser = "*firefox";
  637. } else {
  638. $browser = "\*$browser";
  639. }
  640.  
  641. if ($browser eq "*firefox" && length($firefox_path) != 0 ) {
  642. $browser = "\"$browser $firefox_path\"";
  643. }
  644.  
  645. $seleniumcmd .= " -Dbrowser=" . $browser;
  646. $seleniumcmd .= " -Dtest.rftproject=" . $testenv{'rftProjekt'};
  647. $seleniumcmd .= " -Dselenium_version=" . $selenium_version;
  648. $seleniumcmd .= " -Dpdfbox_version=" . $pdfbox_version;
  649. $seleniumcmd .= " -Dtika_version=" . $tika_version;
  650. $seleniumcmd .= " -Dappium_version=" . $appium_version;
  651.  
  652.  
  653. #--------------------------------------------------------------------
  654. # Fallunterscheidung: Aufrufparameter für Selenium3Support.jar sind unterschiedlich
  655. # in CC-Projekten bzw. RTC-Projekten (s.o.)
  656. #
  657. if ( ($testenv{'rftProjekt'} =~ /guitest/i) || ($testenv{'rftProjekt'} =~ /selenium/i) ){
  658.  
  659. # Es handelt sich um ein Projekt in RTC, da Namenskonvention '_guitest', Vorgehen ab bank21 5.6
  660. $seleniumcmd .= " -Dapi_version=" . "Selenium\\seu\\" . $testenv{gteApiKompVersion} . "\\Selenium3Support";
  661.  
  662. }else{
  663.  
  664. # Es handelt sich um ein Projekt in CC, d.h. Vorgehen vor bank21 5.6
  665. $seleniumcmd .= " -Dapi_version=" . "Selenium\\seu\\Selenium3Support_" . $testenv{'rftProjekt'};
  666. }
  667.  
  668. $seleniumcmd .= " -buildfile " . $rh_rftenv->{'batchdir'} . "\\compile_and_run.xml ";
  669.  
  670. #--------------------------------------------------------------------
  671. # Fallunterscheidung: Aufrufskripte für GTE und Selenium unterscheiden sich
  672. if($testenv{'tool'} !~ /GTE/i) {
  673. $seleniumcmd .= "runTest";
  674. } else {
  675. $seleniumcmd .= "runGenericTest";
  676. }
  677.  
  678. logDebug("\nSelenium start command:\n" . $seleniumcmd . "\n");
  679. $testinfo{'rftstart'} = localtime();
  680. $status = system ($seleniumcmd);
  681.  
  682. if ($status != 0){
  683. print "Starte Cleanup\n";
  684. start_rft_cleanup();
  685. print "Cleanup beendet!\n";
  686. print "Technischer Fehler im Selenium. Bitte Controllerlog pruefen! Error Code: " . $status;
  687. exit(5);
  688. }
  689. $testinfo{'rftstop'} = localtime();
  690. $testinfo{'rftdauer'} = $testinfo{'rftstop'} - $testinfo{'rftstart'};
  691.  
  692. print "ende Selenium: " . get_formatted_tsp(time) . "\n" if($DEBUG);
  693. $testRunsLog{"rftende_unx"} = make_unixtimestamp();
  694.  
  695. }else{
  696.  
  697. print "Kein passendes Testtool für \"" . $testenv{'tool'} . "\" implementiert\n";
  698.  
  699. }
  700.  
  701. # wenn probleme beim log-parser oder logzip auftreten, soll nicht abgebrochen werden
  702.  
  703. #############################################################
  704. #
  705. # 8 Aufruf des LogParsers
  706. #
  707. #############################################################
  708. logHeader ("\n8 Aufruf des LogParsers\n");
  709. my $parser_class = "";
  710. my $tool_logfile = "";
  711.  
  712. if($testenv{'tool'} !~ /Selenium/i) {
  713. if($testenv{'tool'} =~ /GTE/i) {
  714. # copy log from testadapter_logs to packages_logs
  715. mkpath($testenv{'tptpLogPath'});
  716. move("C:\\rft\\testadapter_logs\\" . $testenv{'time_testname'} . "\\" . $testenv{'tptpLogName'}
  717. , $testenv{'tptpLogFile'});
  718. }
  719.  
  720. # choose rft-log-parser
  721. if(-e $testenv{'tptpLogFile'}){
  722. $parser_class = $rh_rftenv->{'rft_parser_class'};
  723. $tool_logfile = $testenv{'tptpLogFile'};
  724. }
  725. } else {
  726. # choose selenium-log-parser
  727. if(-d $testenv{'gadLogPath'}) {
  728. # Aufruf Selenium-Logparser
  729. $parser_class = $rh_rftenv->{'selenium_parser_class'};
  730. $tool_logfile = $testenv{'gadLogPath'};
  731. $rh_rftenv->{'javadir'} = "C:\\Programme\\Selenium\\jdk1.8.0_141\\bin";
  732. }
  733. }
  734.  
  735. if($parser_class ne "") {
  736. #Aufruf LogParser
  737. #Syntax: GadParser.cmd <tptp-Log> <gad-Log> <Javadir>
  738.  
  739. #Hier die GADParser.cmd Datei:
  740. #SET source=%1
  741. #SET dest=%2
  742. #SET JAVADIR=%3
  743. #SET EXTJARSDIR=C:\Dokumente und Einstellungen\All Users\Anwendungsdaten\IBM\RFT\customization\
  744. #SET CLASSPATH=%CLASSPATH%;%EXTJARSDIR%GADParser.jar;%EXTJARSDIR%log4j-1.2.15.jar
  745. #%javadir%\java com.ibm.parser.LogProcessor %source% %dest%
  746.  
  747. $cmd = $rh_rftenv->{'parser_cmd'} . " " . $tool_logfile . " " . $testenv{'gadLogPath'} . "\\" . $testenv{'gadLogFile'} . " " . $rh_rftenv->{'javadir'} . " " . $parser_class . " > " . $rh_rftenv->{'logparserlog'} . " 2>&1";
  748.  
  749. print "LogParser start command: $cmd\n" if($DEBUG);
  750. $status = system ($cmd);
  751. print "log parser exit: " . $status . "\n" if($DEBUG);
  752. if ($status != 0){
  753. print "Starte Cleanup\n";
  754. start_rft_cleanup();
  755. print "Cleanup beendet!\n";
  756. print "\nFehler beim LogParser. Error Code: ".$status;
  757. exit(6);
  758. }
  759. } else {
  760. print "Starte Cleanup\n";
  761. start_rft_cleanup();
  762. print "Cleanup beendet!\n";
  763. print "\nKein Logfile gefunden! Soll: ". $tool_logfile;
  764. exit(6);
  765. }
  766.  
  767.  
  768. #############################################################
  769. #
  770. # 9 Logs packen
  771. #
  772. #############################################################
  773. logHeader ("\n9 Logs packen\n");
  774.  
  775. # Zippen des Original-tptp-logs incl. des Ordners und Ablage im Logverzeichnis des Testfalls
  776. $cmd = $rh_rftenv->{'zip_cmd'} . $testenv{'gadLogPath'} . "\\" . $testenv{'tptpLogFileZIP'} . " " . $testenv{'gadLogPath'};
  777.  
  778. print "7zip start command: " . $cmd . "\n" if($DEBUG);
  779.  
  780. $status = system($cmd);
  781. if ($status != 0){
  782. print "Starte Cleanup\n";
  783. start_rft_cleanup();
  784. print "Cleanup beendet!\n";
  785. print "\nFehler beim ZIP der Logfiles. Error Code: ".$status;
  786. exit(7);
  787. }
  788.  
  789.  
  790.  
  791. ###############################
  792. #
  793. # Umbenennen der Log-Definitionsdatei zum Abschluss des Tests
  794. #
  795. ###############################
  796.  
  797. print "Umbennenen der temporären log-Definitionsdatei in gültigen Namen";
  798.  
  799. #Umbenennen der temp-Definitionsdatei
  800. $cmd = "rename " . $rh_rftenv->{'logdefdir'} . "\\" . $testenv{'tmpLogDefFile'} . " " . $testenv{'logDefFile'};
  801. print "Umbenennen def-Datei command: $cmd\n" if($DEBUG);
  802.  
  803. $status = system($cmd);
  804. if ($status != 0){
  805. print "Starte Cleanup\n";
  806. start_rft_cleanup();
  807. print "Cleanup beendet!\n";
  808. print "\nFehler rename der LogDef Datei. Error Code: ".$status;
  809. exit(7);
  810. }
  811.  
  812.  
  813. #################################################################
  814. #
  815. # 10 Prüfuen des Logs auf Testfehler - Aufruf von getTestRunStatus
  816. #
  817. #################################################################
  818. logHeader("\n10 Prüfen des Logs auf Testfehler - Aufruf von getTestRunStatus\n");
  819.  
  820. $retval = getTestRunStatus(\%testenv);
  821. print "return value of getTestRunStatus: $retval\n" if($DEBUG);
  822. if($retval == 99){
  823. $status = "Testscript wurde mit fachlichen Fehlern beendet!";
  824. $testinfo{'rftstatus'} = "FAILED";
  825. }
  826. elsif($retval == 0){
  827. $status = "OK";
  828. $testinfo{'rftstatus'} = "PASSED";
  829. }
  830. else{
  831. #todo xgadlga: hier noch ein default für $testinfo{'rftstatus} und $status ???
  832. print "retval ist weder 99 noch 0, sondern : " . $retval . "\n";
  833. }
  834.  
  835. $testRunsLog{'status'} = $testinfo{'rftstatus'};
  836.  
  837. ###############################
  838. # Das Testrunlog schreiben, für die Zeitauswertung
  839. print "Aufruf write_testrunslog()" if($DEBUG);
  840. write_testrunslog(\%testenv,\%testRunsLog);
  841.  
  842. #################################################################
  843. #
  844. # 13 Cleanup
  845. #
  846. #################################################################
  847. logHeader("\n13 Cleanup\n");
  848. #den status auf Cleanup setzen
  849. print "Starte Cleanup\n" if($DEBUG);
  850. start_rft_cleanup();
  851. print "Cleanup beendet!\n" if($DEBUG);
  852.  
  853. print "Test abgeschlossen: " . get_formatted_tsp(time) . "\n" if($DEBUG);
  854. print "Beendet RFTcontroller.pl mit dem return Code: " . $retval . "\n" if($DEBUG);
  855.  
  856. use constant {
  857. FROM_DIR => "C:/rft/logdefs/",
  858. TO_DIR => "C:/rft/loghistory/",
  859. };
  860.  
  861. #Opens FROM_DIR, ao I can read from it
  862. opendir my $dir, FROM_DIR;
  863.  
  864. # Loopa through the directory
  865. while (my $file = readdir $dir) {
  866. next if ($file eq "." or $file eq "..");
  867. my $from = FROM_DIR . "/" . "$file";
  868. move $from, TO_DIR;
  869. }
  870.  
  871. #exit mit dem return code aus dem Status
  872. exit ($retval);
  873.  
  874. END {
  875. #den laden dicht machen
  876. if($db_handle){
  877. db_disconnect($db_handle);
  878. }
  879. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement