Az OTRS biztosít egy tesztelési alkalmazáscsomagot, amely egységtesztek fejlesztéséhez és futtatásához használható az összes rendszerrel kapcsolatos kódnál.
A tesztfájlok .t fájlokban vannak tárolva a
/scripts/test/*.t
helyen. Például vessünk egy
pillantást a scripts/test/Calendar.t
fájlra a naptár
osztálynál.
Minden tesztfájlnak ideális esetben példányosítania kell az egységteszt segítő objektumot az elején, így részesülhet néhány beépített metódusból, amelyet az biztosít:
# -- # Copyright (C) 2001-2020 OTRS AG, https://otrs.com/ # -- # This software comes with ABSOLUTELY NO WARRANTY. For details, see # the enclosed file COPYING for license information (GPL). If you # did not receive this file, see https://www.gnu.org/licenses/gpl-3.0.txt. # -- use strict; use warnings; use utf8; use vars (qw($Self)); $Kernel::OM->ObjectParamAdd( 'Kernel::System::UnitTest::Helper' => { RestoreDatabase => 1, }, ); my $Helper = $Kernel::OM->Get('Kernel::System::UnitTest::Helper');
A RestoreDatabase
paraméternek a segítő konstruktor
számára történő átadásával az egységteszt közben végrehajtott bármely
adatbázis-utasítás vissza lesz állítva a végén, ezáltal azt biztosítva, hogy
ne történjen végleges változtatás.
Mint bármely egyéb tesztelési alkalmazáscsomag, az OTRS is biztosít állítás metódusokat, amelyek a feltételek teszteléséhez használhatók. Például it az látható, hogy hogyan hozunk létre egy teszt felhasználót, és hogyan teszteljük le, hogy valóban létrejött:
my $UserLogin = $Helper->TestUserCreate(); my $UserID = $UserObject->UserLookup( UserLogin => $UserLogin ); $Self->True( $UserID, "Test user $UserID created" );
Nézze meg a lenti API szakaszt az állítás metódusok teljes listájáért.
Mindig jó gyakorlat véletlenszerű adatokat létrehozni az egységtesztekben, ami segíthet megkülönböztetni az előzőleg hozzáadott adatoktól. Használja a véletlen metódusokat az API-ból, hogy megkapja a karakterláncokat, és beágyazza azokat a paraméterekbe:
my $RandomID = $Helper->GetRandomID(); # teszt csoport létrehozása my $GroupName = 'test-calendar-group-' . $RandomID; my $GroupID = $GroupObject->GroupAdd( Name => $GroupName, ValidID => 1, UserID => 1, ); $Self->True( $GroupID, "Test group $GroupID created" );
A jó fejlesztők az egységtesztjeiket könnyen karbantarthatóvá teszik. Fontolja meg az összes teszteset egy tömbbe történő elhelyezését, majd lépkedjen végig azokon valamilyen kóddal. Ez egyszerű módot fog biztosítani a teszt későbbi bővítéséhez:
# # A CalendarCreate() tesztelése # my @Tests = ( { Name => 'CalendarCreate - No params', Config => {}, Success => 0, }, { Name => 'CalendarCreate - All required parameters', Config => { CalendarName => "Calendar-$RandomID", Color => '#3A87AD', GroupID => $GroupID, UserID => $UserID, }, Success => 1, }, { Name => 'CalendarCreate - Same name', Config => { CalendarName => "Calendar-$RandomID", Color => '#3A87AD', GroupID => $GroupID, UserID => $UserID, }, Success => 0, }, ); for my $Test (@Tests) { # a hívás elvégzése my %Calendar = $CalendarObject->CalendarCreate( %{ $Test->{Config} }, ); # adatok ellenőrzése if ( $Test->{Success} ) { for my $Key (qw(CalendarID GroupID CalendarName Color CreateTime CreateBy ChangeTime ChangeBy ValidID)) { $Self->True( $Calendar{$Key}, "$Test->{Name} - $Key exists", ); } KEY: for my $Key ( sort keys %{ $Test->{Config} } ) { next KEY if $Key eq 'UserID'; $Self->IsDeeply( $Test->{Config}->{$Key}, $Calendar{$Key}, "$Test->{Name} - Data for $Key", ); } } else { $Self->False( $Calendar{CalendarID}, "$Test->{Name} - No success", ); } }
Hogy képes legyen lefuttatni az egységteszteket, arra van szüksége, hogy az
összes választható Perl-modul telepítve legyen, kivéve azokat, amelyek az Ön
által használt adatbázis háttérprogramoktól eltérőkhöz valók. Futtassa a
bin/otrs.CheckModules.pl
parancsfájlt a modultelepítés
ellenőrzéséhez.
Szüksége van egy teljes képzésű tartományneven (FQDN) futó OTRS webes
előtétprogram egy példányára, amely az OTRS helyi
Config.pm
fájljában be van állítva. Ennek az OTRS
példánynak ugyanazt az adatbázist kell használnia, amelyek az
egységtesztekhez vannak beállítva.
A tesztek futtatásához egyszerűen használja a bin/otrs.Console.pl
Dev::UnitTest::Run --test Calendar
parancsot a
scripts/test/Calendar.t
fájl használatához.
shell:/opt/otrs> bin/otrs.Console.pl Dev::UnitTest::Run --test Calendar +-------------------------------------------------------------------+ /opt/otrs/scripts/test/Calendar.t: +-------------------------------------------------------------------+ ................................................................................................. ===================================================================== yourhost ran tests in 2s for OTRS 6.0.x git All 97 tests passed. shell:/opt/otrs>
Akár több tesztet is lefuttathat egyszerre, csak adjon meg további
--test
argumentumokat a parancsnak:
shell:/opt/otrs> bin/otrs.Console.pl Dev::UnitTest::Run --test Calendar --test Appointment +-------------------------------------------------------------------+ /opt/otrs/scripts/test/Calendar.t: +-------------------------------------------------------------------+ ................................................................................................. +-------------------------------------------------------------------+ /opt/otrs/scripts/test/Calendar/Appointment.t: +-------------------------------------------------------------------+ .................................................................................................................. ===================================================================== yourhost ran tests in 5s for OTRS 6.0.x git All 212 tests passed. shell:/opt/otrs>
Ha argumentumok nélkül hajtja végre a bin/otrs.Console.pl
Dev::UnitTest::Run
parancsot, akkor le fogja futtatni a
rendszeren található összes tesztet. Ne feledje, hogy ez eltarthat egy
ideig, amíg befejeződik.
Adja meg a --verbose
argumentumot annak érdekében, hogy
láthassa a sikeres tesztekkel kapcsolatos üzeneteket is. A teszt során
előforduló bármilyen hiba megjelenítésre kerül függetlenül ettől a
kapcsolótól, és biztosítva lesz, hogy azok ténylegesen felvételre kerülnek a
tesztbe.
Az OTRS API-t biztosít az egységteszteléshez, amely az előző példában volt
használva. Itt fel fogjuk sorolni a legfontosabb függvényeket, de nézze meg
a Kernel::System::UnitTest
internetes API hivatkozását is.
True()
Ez a függvény azt teszteli, hogy a megadott skalár érték igaz érték-e a Perlben.
$Self->True( 1, 'Az 1 skalár mindig igazként lesz kiértékelve' );
False()
Ez a függvény azt teszteli, hogy a megadott skalár érték hamis érték-e a Perlben.
$Self->False( 0, 'A 0 skalár mindig hamisként lesz kiértékelve' );
Is()
Ez a függvény azt teszteli, hogy a megadott skalár változók egyenlők-e.
$Self->Is( $A, $B, 'Tesztnév', );
IsNot()
Ez a függvény azt teszteli, hogy a megadott skalár változók nem egyenlők-e.
$Self->IsNot( $A, $B, 'Tesztnév' );
IsDeeply()
Ez a függvény összetett adatszerkezeteket hasonlít össze az
egyenlőséghez. $A
és $B
hivatkozás
kell legyen.
$Self->IsDeeply( $A, $B, 'Tesztnév' );
IsNotDeeply()
Ez a függvény összetett adatszerkezeteket hasonlít össze a nem
egyenlőséghez. $A
és $B
hivatkozás
kell legyen.
$Self->IsNotDeeply( $A, $B, 'Tesztnév' );
Emellett az egységteszt segítő objektum biztosít néhány hasznos metódust is
a gyakori tesztelési feltételekhez. A teljes hivatkozásért nézze meg a
Kernel::System::UnitTest::Helper
internetes API hivatkozását.
GetRandomID()
Ez a függvény előállít egy véletlenszerű azonosítót, amely egyedi azonosítóként használható a tesztekben. Garantált, hogy egy teszten belül ez a függvény soha nem ad vissza kettőzött értéket.
Ne feledje, hogy ezek a számok nem valódi véletlen számok, és csak tesztadatok előállításához szabad használni.
my $RandomID = $Helper->GetRandomID(); # $RandomID = 'test6326004144100003';
TestUserCreate()
Ez a függvény létrehoz egy teszt felhasználót, amely használható a tesztekben. Automatikusan érvénytelenre lesz állítva a destruktor közben. Visszaadja az új felhasználó bejelentkezési nevét, a jelszó pedig ugyanaz lesz.
my $TestUserLogin = $Helper->TestUserCreate( Groups => ['admin', 'users'], # elhagyható, csoportok listája, amelyhez a felhasználót hozzá kell adni (írás, olvasás jogokkal) Language => 'hu', # elhagyható, alapértelmezetten 'en', ha nincs megadva );
FixedTimeSet()
Ez a függvény lehetővé teszi a rendszeridő felülbírálását egészen addig, amíg az objektum él. Átadhat egy elhagyható időparamétert, amelyet használni kell. Ha nincs átadva, akkor az aktuális rendszeridő lesz használva.
A Kernel::System::Time
és a
Kernel::System::DateTime
metódusainak összes meghívása a
megadott időt fogja használni ezután.
$HelperObject->FixedTimeSet(366475757); # időbélyeggel $HelperObject->FixedTimeSet($DateTimeObject); # az előzőleg létrehozott DateTime objektummal $HelperObject->FixedTimeSet(); # beállítás a jelenlegi dátumra és időre
FixedTimeUnset()
Ez a függvény visszaállítja a rendes rendszeridő viselkedést.
FixedTimeAddSeconds()
Ez a függvény valamennyi másodpercet ad ahhoz a rögzített rendszeridőhöz,
amelyet a FixedTimeSet()
korábban beállított. Átadhat
negatív értéket, hogy visszamenjen az időben.
ConfigSettingChange()
Ez a függvény átmenetileg rendszerszinten megváltoztat egy
rendszerbeállítást egy másik értékre mind a ConfigObject
aktuális példányában, mind a rendszerbeállításokban is a lemezen. Akkor lesz
visszaállítva, amikor a Helper
objektum megsemmisül.
Ne feledje, hogy ez jelenleg nem működik fürtözött környezetekben.
$Helper->ConfigSettingChange( Valid => 1, # (elhagyható) beállítás engedélyezése vagy letiltása Key => 'MySetting', # beállítás neve Value => { ... } , # beállítás értéke );
CustomCodeActivate()
Ez a függvény átmenetileg egyéni kódot fog felvenni a rendszerbe. Például
ezt használhatja egy másik osztályból származó szubrutin
felüldefiniálásához. Ez a változtatás megmarad a teszt emlékeztetőjénél
is. Az összes kód eltávolításra kerül, amikor a Helper
objektum megsemmisül.
Ne feledje, hogy ez jelenleg nem működik fürtözött környezetekben.
$Helper->CustomCodeActivate( Code => q^ use Kernel::System::WebUserAgent; package Kernel::System::WebUserAgent; use strict; use warnings; { no warnings 'redefine'; sub Request { my $JSONString = '{"Results":{},"ErrorMessage":"","Success":1}'; return ( Content => \$JSONString, Status => '200 OK', ); } } 1;^, Identifier => 'News', # (elhagyható) kódazonosító a fájlnévbe való felvételhez );
ProvideTestDatabase()
Ez a függvény egy átmeneti adatbázist fog biztosítani a teszthez. Először
határozza meg a teszt adatbázis beállításait a
Kernel/Config.pm
fájlban, azaz:
$Self->{TestDatabase} = { DatabaseDSN => 'DBI:mysql:database=otrs_test;host=127.0.0.1;', DatabaseUser => 'otrs_test', DatabasePw => 'otrs_test', };
A metódushívás felül fogja bírálni a globális adatbázis-beállítást a teszt
időtartama alatt, azaz az átmeneti adatbázis fogja fogadni az összes olyan
hívást, amelyet a DBObject
rendszer küldött át.
Az összes adatbázis-tartalom automatikusan eldobásra kerül, amikor a
Helper
objektum megsemmisül.
Ez a metódus undef
értéket ad vissza abban az esetben, ha
a teszt adatbázis nincs beállítva. Ha be van állítva, de a mellékelt XML nem
olvasható vagy nem hajtható végre, akkor a metódus die()
függvénye lesz meghívva a teszt hibával történő megszakításához.
$Helper->ProvideTestDatabase( DatabaseXMLString => $XML, # (elhagyható) OTRS adatbázis XML-séma a végrehajtáshoz # vagy DatabaseXMLFiles => [ # (elhagyható) betöltendő és végrehajtandó XML-fájlok listája '/opt/otrs/scripts/database/otrs-schema.xml', '/opt/otrs/scripts/database/otrs-initial_insert.xml', ], );