Thread Perl-Unterprogramme in anderen Dateien (4 answers)
Opened by Mdui at 2008-06-23 17:17

Mdui
 2008-06-23 17:46
#111381 #111381
User since
2008-05-05
10 Artikel
BenutzerIn
[default_avatar]
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
#!/usr/bin/perl -w

BEGIN{
    use strict;
    use rcconfig;
    use Test::More tests =>1;
}
END
{
# Selenium RC-Config
    my $rcserver = rcconfig->new();
    my $rchost = $rcserver->get_rchost();
    my $rcport = $rcserver->get_rcport();
    my $rcbrowser = $rcserver->get_rcbrowser();
    my $rcurl = $rcserver->get_rcurl();
    
my $obj = WWW::Selenium -> new(host => $rchost,
                               port => $rcport,
                               browser => $rcbrowser,
                               browser_url => $rcurl);

$obj->start();
is($obj->open("/cosmo_90/"),'OK','Domain oeffnen');
$obj->stop();
}

1;

Das ist ein kleines Testscript
Code (perl): (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
    ##################################################
    # eigene Klassen/Dateien/Module einbinden und Existenz überprüfen
    my @required_config_files = ("test_definitions",
                                 "rcconfig"); # zu überprüfende Module/Klassen
    my $file; # Hilfsvariable
    foreach $file (@required_config_files){ # für jedes angegebene Modul
        eval"use $file"; # Versuche Modul zu laden
        if($@){# wenn es einen Fehler beim laden des Moduls gibt, Fehlermeldung ausgeben
            print "<p class=\"error\"><b>$file</b> - Datei/Modul konnte nicht geladen werden:<br /> $@ <br /></p>\n";
        }
    }
    if($@){ # wenn es beim laden der Konfiguration Fehler gab
        print "</body></html>\n"; # HTML-Ende ausgeben
        exit; # Programm beenden
    }
    else{
        print"<p>Konfiguration wurde erfolgreich geladen</p>";
    }
    
    
    # Einbinden der Testscript-Konfiguration
    my $test_def = test_definitions->new();
    my $test_ref = $test_def->getTests();
    
    ##########################################
    # überprüfen der Test-Script-Configuration und Ausführung der Tests
    
    my %tests = %$test_ref; # Test-Definitionen dereferenzieren
    my $test; # Hilfsvariable für Tests-Hash
    my $key; # Hilfsvariable für Tests-Hash
    my @errors; # Fehler-Container
    my $error; # Hilfsvariable zur Fehlerausgabe
    my $UA = new LWP::UserAgent;
    my $count_tests = keys %tests; # Zählvariable
    my $count_ok = 0;# Zählvariable zum überprüfen erfolgreicher Tests
    my $count_fail = 0; # Zählvariable für Fehler
    my $config_error_flag; # Variable zum markieren fehlerhafter Test-Konfigurationen
    my $script_error_flag; # Variable zum markieren fehlender Scripte
    my $script_file;
    
    # Alle zu überprüfenden Keys festlegen
    my @required_keys = ('title','legend','type');
    
    # hier wird jeder einzelne Schlüssel des Tests überprüft
    foreach $test (sort keys %tests){ # jeden einzelnen Test holen
        $config_error_flag = 0; # Fehler-Flags zurücksetzen (könnte aus vorhergehenden Überprüfungen gesetzt sein)
        $script_error_flag = 0;
        my @missing_keys = (); # Hilfsarrays Script- und Konfigurations-Überprüfung
        my @missing_scripts = ();
        foreach $key (@required_keys){ # für jeden Schlüssel
            unless($tests{$test}->{$key}){ # Schlüssel des geholten Tests überprüfen
                # falls nicht gesetzt oder nicht vorhanden zur Liste fehlender schlüssel hinzufügen
                push(@missing_keys,$key);
                $config_error_flag = 1; # und Test als Fehlerhaft konfiguriert markieren
            }
        }
        # Überprüfen ob Test-Script vorhanden
        $script_file = "$source_cgi$dir_suite$script_dir/".$tests{$test}->{type}."/$test"; # generierung vollständiger Dateiname
        unless(-e $script_file){ # wenn Datei nicht vorhanden
            push(@missing_scripts,$test); # Dateinamen zur Liste fehlender Dateien kopieren
            $script_error_flag = 1; # Test als Script-Fehlend markieren
        }
        if($config_error_flag){ # überprüfen ob es Konfigurationsfehler gab
            # falls ja, Testbezogene Fehlermeldung generieren
            my $errStr = "$test: configuration: Keys not defined: ".join(',',@missing_keys)."<br>";
            # Fehler-Meldung zur Fehler-Liste hinzufügen
            push(@errors,$errStr);
            unless($script_error_flag){ # wenn keine Scripte Fehlen
                next; # zum nächsten Test springen
            }
        }
        if($script_error_flag){ # Überprüfen ob Script gefehlt hat
            my $errStr = "$test: Script: File not found: ".join(',',@missing_scripts)."<br>";
            push(@errors,$errStr);
            next;
        }
        ###############################################
        # An dieser Stelle wird der Test dann ausgeführt (zB per require f_nl_order.cgi)
        my @results = ();
        print "<p class=\"ok\">$test:";
        print"<ul>";
        foreach $key (sort keys %{$tests{$test}}){
            print"<li>$key: $tests{$test}->{$key}</li>";
        }
        print"</ul></p>";
        if(require $script_file){
            $count_ok++;
        }
    }
    
    # Ausgabe Anzahl der definierten Tests
    print"Anzahl definierter Tests: $count_tests<br>";
    # Ausgabe erfolgreicher Tests
    print "Anzahl erfolgreich abgeschlossener Testst: $count_ok";
    # Ausgabe der Fehler
    $count_fail = @errors; # Fehleranzahl ermitteln
    print"<p class=\"error\">Es gab $count_fail Fehler:<br>"; # Fehleranzahl ausgeben
    foreach $error (@errors){ # für jede eingetragene Fehlermeldung
        print $error; # diese ausgeben
    }
    print"</p>";
    
    # Ende HTML
    print "</body></html>\n";

Und das die überprüfung der Config und Aufrufen der Testscripte

EDIT:
Die Ausgaben von Test::More tauchen im HTML-Dokument aber erst nach Ausgabe aller Fehler im Array @errors auf.
Leider hat ein Eval-Block nicht den gewünschten Effekt gezeigt, bei fehlerhaftem Script wird die AUsführung des Hauptprogramms trotzdem unterbrochen...

View full thread Perl-Unterprogramme in anderen Dateien