Open Source im professionellen Einsatz
Linux-Magazin 05/2016
© happystock, 123RF

© happystock, 123RF

Druckerfunktionstest nach Distributions-Updates

Ausdrucksstark

Ob die Linux-Installation nach einem Update noch wie gewünscht funktioniert, findet der sorgfältige Admin nicht erst im Laufe der Zeit heraus, sondern mittels einer Testsuite vor dem Ausrollen.

654

Wer als Admin regelmäßig die ihm anvertrauten Nutzer mit Updates der Linux-Distribution beglücken darf, vermeidet leidige Reklamationen, indem er grundlegende Funktionen testet. In diesem Artikel steht als Beispiel für das Verfahren exemplarisch die Prüfung eines eingehängten Druckers.

Unter Ubuntu erscheint unter dem Suchbegriff "Printers" ein Dialog mit allen angeschlossenen Druckern (Abbildung 1), per Hand ließe sich dort ein Drucker auswählen und dazu überreden, eine Testseite auszudrucken. Doch wie kann diese Aufgabe – und dem hier vorgestellten Muster folgend auch andere Tests – ein automatisch abgefeuertes Tool erledigen?

Abbildung 1: Alle installierten Drucker im Printers-Dialog unter Ubuntu.

Erster Versuch

Das Linux Desktop Testing Project (LDTP, [2]) hat sich dem Testen von GUIs auf allerlei Plattformen inklusive Windows verschrieben. Es nutzt die Accessibility-Funktionen von Windowmanagern wie Gnome oder KDE und erlaubt es auch, sie fernzusteuern.

Allerdings befindet sich das Projekt in keinem guten Zustand, denn die Dokumentation ist lückenhaft. Selbst auf Nachfrage beim Entwickler konnte ich das GUI nicht dazu bewegen, angemessen zu reagieren, weil dabei entweder der LDTP-Daemon abstürzte oder anders als in der ohnehin spärlichen Dokumentation beschrieben reagierte. Sicher eine gute Idee, aber die Wartung müsste sich deutlich verbessern, wenn das Projekt von praktischem Nutzen sein soll.

Auf Kommando

Aus der Patsche halfen mir die Kommandozeilentools »lpstat« , »lpr« und »lpq« , die alle konfigurierten Drucker auflisten, ein Dokument drucken und die Druckerwarteschlange visualisieren können. In ein Perl-Skript verpackt finden sie den Standarddrucker, lassen ihn ein Testdokument drucken, und prüfen, ob der Auftrag erst in der Warteschlange erscheint und dann von dort nach Erledigung verschwindet. Zeigt die Ausgabe im Perl-üblichen TAP (Test Anything Protocol) dann durchgehend »ok« und kein »not ok« an, gilt der Test als bestanden und die frisch installierte Distro ist, was die Druckerei betrifft, funktionsfähig. Abbildung 2 zeigt die Ausgabe eines erfolgreichen Druckertests.

Abbildung 2: Die Testsuite findet den Default-Drucker, druckt ein Dokument und prüft dann die Warteschlange.

Das Testskript in Listing 1 ruft hierzu über Perls Backquote-Mechanismus die Kommandozeilentools auf und speichert deren Ausgabe in Variablen zur späteren Überprüfung mittels regulärer Ausdrücke. Operatoren des Testmoduls Test::More exportieren die Funktionen »ok« und »is« , die Vergleiche zwischen Ist- und Sollwert vornehmen. Und sie schlagen Alarm, falls ein unerwartetes Ergebnis auftritt.

Listing 1

lptest-default

01 #!/usr/local/bin/perl -w
02 use strict;
03 use Test::More;
04 use Getopt::Long;
05 use Path::Tiny;
06
07 my $realprint = 1;
08 GetOptions( "realprint!" => \$realprint );
09
10 my $lpstat = "lpstat";
11 my $lpr    = "lpr";
12 my $lpq    = "lpq";
13
14 my( $default_printer ) =
15   ( `$lpstat -d` =~ /: (.*)/ );
16
17 if( !defined $default_printer ) {
18     die "Cannot find default printer";
19 }
20
21 ok 1,
22   "found default printer $default_printer";
23
24 SKIP: {
25     if( !$realprint ) {
26         skip "printing disabled", 1;
27     }
28
29     ok !lpq_busy(), "lpq empty";
30
31     my $temp = Path::Tiny->tempfile;
32     $temp->spew( "This is a test." );
33
34     my $rc = system $lpr, "-P",
35         $default_printer, $temp->absolute;
36     is $rc, 0, "printing with $lpr";
37
38     ok lpq_busy(), "lpq busy";
39
40     while( lpq_busy() ) {
41         sleep 1;
42     }
43
44     ok !lpq_busy(), "lpq empty";
45 }
46
47 done_testing;
48
49 sub lpq_busy {
50     my $queue = `$lpq`;
51
52     return $queue =~ /active/;
53 }

Die Funktion »ok()« prüft hierzu, ob der erste ihr hereingereichte Parameter einen wahren Wert enthält, während »is()« den gesehenen Wert (erster Parameter) mit dem erwarteten Wert (zweiter Parameter) vergleicht.

Von der Kommandozeile aus aufgerufen zeigt »lpstat« in Abbildung 3, dass auf meiner Ubuntu-Installation ein Multifunktionsdrucker namens MFC7420 konfiguriert ist, zudem eine Reihe von Labeldruckern der Marke Dymo, die ich vor drei Monaten in der Perl-Snapshot-Reihe vorgestellt habe [3]. Da der Distributionstest nur die Funktion des Default-Druckers prüft, ruft das Testskript in Listing 1 »lpstat -d« auf, schnappt sich die Ausgabe, die den Default-Drucker benennt, und verifiziert, ob eine Zeile mit einem Doppelpunkt herauskommt.

Abbildung 3: Das Kommando lpstat listet alle konfigurierten Drucker auf.

Diesen Artikel als PDF kaufen

Express-Kauf als PDF

Umfang: 3 Heftseiten

Preis € 0,99
(inkl. 19% MwSt.)

Linux-Magazin kaufen

Einzelne Ausgabe
 
Abonnements
 
TABLET & SMARTPHONE APPS
Bald erhältlich
Get it on Google Play

Deutschland

Ähnliche Artikel

  • Desktops testen: LDTP 1.0.0 erschienen

    Drei Jahre nach der initialen Version wagt sich das Linux Desktop Testing Project (LDTP) an Version 1.0 heran.

  • GUI-Testing: LDTP 3.5 führt Perl-Client ein

    LDTP, ein Tool für automatisierte GUI-Tests unter Linux, ist in Version 3.5 mit neuen Features verfügbar.

  • LDTP 3: GUI-Automatisierung auch mit Java und Ruby

     

    Das Linux Desktop Testing Project (LDTP) hat seine Software für die GUI-Automatisierung in Version 3 mit neuen Features veröffentlicht.

  • Perl-Snapshot

    Das überlichtgeschwinde Provisionierungstool Ansible eignet sich nicht nur für Konfigurations- und Releasemanagement mittelgroßer Serverfarmen, sondern auch für den Hausgebrauch, zum Restaurieren von Anpassungen auf dem Linux-Desktop daheim.

  • Perl-Snapshot

    Etiketten bringen Ordnung in den Kabelverhau am Heim-Router und helfen beim Zuordnen von in Kisten gelagertem Plunder. Mit einigen Handgriffen druckt Michael Schillis Labelwriter sogar unter Linux.

comments powered by Disqus

Ausgabe 04/2017

Digitale Ausgabe: Preis € 6,40
(inkl. 19% MwSt.)

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.