Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
TAEF používá funkci RunFixtureAs k provádění testovacích zařízení (funkcí nastavení a čištění na úrovni modulů, tříd a testů) v jiném kontextu než odpovídající testy.
Požadavky pro
- Te.Service musí být nainstalována a spuštěna na počítači, aby bylo možné spouštět testovací sestavy se zvýšenými oprávněními z neprivilegovaného procesu Te.exe, nebo aby bylo možné spouštět testovací sestavy jako Local System.
Přehled
RunFixtureAs lze použít na úrovni modulu, třídy i testu a bude děděno stromem testů směrem dolů. Aby bylo možné vyjádřit výslovný nesouhlas s dědičností RunFixtureAs na dané úrovni ve stromu, podporuje se také metadata RunFixtureAs:[scope].
Pokud je například modul označený parametrem RunFixtureAs=System, může být třída (ClassA) označena jako RunFixtureAs:Test=Default. V takovém případě se modul a zařízení tříd spustí jako systém, ale zařízení na úrovni testů v rámci třídy ClassA budou spuštěna ve stejném kontextu jako Te.exe (i když stále v jiném procesu než test).
Hodnota metadat RunFixtureAs:[scope] není zděděna v testovacím stromu; vztahuje se pouze na zadaný obor.
Deterministické záruky
- Ve výchozím nastavení (pokud nejsou zadány žádné hodnoty RunFixtureAs), testy a přípojky jsou zaručeny, že budou spuštěny v rámci stejného procesu.
- Pokud je přípojka označena platnou hodnotou RunFixtureAs jinou než Test, zařízení se spustí v jiném procesu než test. To znamená, že i když je test označený příkazem RunAs=Elevated a RunFixtureAs=Elevated, test se spustí v procesu se zvýšenými oprávněními a jeho příslušenství se spustí v samostatném procesu se zvýšenými oprávněními.
- Odpovídající páry zařízení pro daný obor budou vždy spuštěny ve stejném procesu (například nastavení a čištění zařízení třídy se spustí ve stejném procesu).
Typy RunFixtureAs
TaEF podporuje následující typy RunFixtureAs, které jsou určeny testovacími metadaty:
Systém
TaEF spouští zařízení jako místní systém.
Poznámka Testovací zařízení, která spouštíte jako místní systém, by neměla vytvářet žádné uživatelské rozhraní. Pokud vaše testovací prvky potřebují vytvořit nebo pracovat s uživatelským rozhraním, musíte přesunout kód související s uživatelským rozhraním do samostatných spustitelných souborů, které jsou spouštěny na ploše pomocí CreateProcessAsUser.
Zvýšené
TAEF zajišťuje, aby se zařízení spouštělo ve zvýšeném procesu tím, že v případě potřeby vytvoří proces se zvýšenými oprávněními, ve kterém se zařízení spustí.
Poznámka Uživatel, který spouští taEF, musí být členem skupiny administrators, aby mohl spouštět zařízení označená vlastností RunFixtureAs=Elevated. Důvodem je skutečnost, že nesprávci nemají rozdělený token pro zvýšení oprávnění.
Výchozí
TAEF spustí aplikaci ve stejném kontextu jako Te.exe (ale stále v jiném procesu než samotný test).
Makléř
TAEF spouští testovací prostředí v procesu 'Immersive Broker'.
Poznámka
- Broker je podporován pouze v operačních systémech Windows 8 a novějších.
- V systému musí být povolena politika testovacího podepisování. Další informace lze získat pomocí funkce konfigurace bootování TESTSIGNING.
- Vzdálené spouštění testů pomocí runFixtureAs=Broker se v současné době nepodporuje.
- Při provádění pomocí runFixtureAs=Broker taEF použije proces "TE.ProcessHost.Broker.exe" pro provádění zařízení, ne "TE.ProcessHost.exe".
UIAccess
TaEF spouští zařízení v procesu označeném úrovní provádění UIAccess. Informace o uiAccess pro aplikace pro automatizaci uživatelského rozhraní naleznete v tématu Návrh mechanismu integrity systému Windows.
Poznámka
- UiAccess je podporován pouze v systémech Vista a vyšších operačních systémů.
- Binární soubory TAEF musí být spuštěné ze složky ve složce Program Files v počítači.
- Vzdálené spouštění testů pomocí runFixtureAs=UIAccess se v současné době nepodporuje.
- Při provádění s 'RunFixtureAs=UIAccess' použije TAEF proces "TE.ProcessHost.UIAccess.exe" pro provádění součásti, nikoliv "TE.ProcessHost.exe".
Test
TaEF spustí zařízení ve stejném procesu nebo kontextu jako test.
Poznámka Toto je výchozí chování TAEF, pokud nejsou zadána žádná nastavení RunFixtureAs.
RunFixtureAs:[scope]
TaEF podporuje následující hodnoty RunFixtureAs:[scope], které jsou určené testovacími metadaty.
RunFixtureAs:Module, RunFixtureAs:Assembly nebo RunFixtureAs:Dll
Hodnota RunFixtureAs se použije pouze na uzel na úrovni modulu v testovací hierarchii.
RunFixtureAs:Class
Hodnota RunFixtureAs se použije pouze na uzly na úrovni třídy v testovací hierarchii.
RunFixtureAs:Method nebo RunFixtureAs:Test
Hodnota RunFixtureAs bude platit pouze pro uzly na úrovni testu v testovací hierarchii.
Označení testů pomocí runFixtureAs
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);
class MyTests
{
TEST_CLASS(MyTests);
BEGIN_TEST_METHOD(MyTestMethod)
TEST_METHOD_PROPERTY(L"RunAs", L"System")
TEST_METHOD_PROPERTY(L"RunFixtureAs", L"Elevated")
END_TEST_METHOD()
TEST_METHOD_SETUP(MyTestSetup);
TEST_METHOD_CLEANUP(MyTestCleanup);
TEST_CLASS_SETUP(MyClassSetup);
TEST_CLASS_CLEANUP(MyClassCleanup);
};
Předchozí příklad spustí testy a zařízení následujícím způsobem:
- MyTestMethod běží jako systém
- MyTestSetup a MyTestCleanup se spouštějí se zvýšenými oprávněními
- MyClassSetup a MyClassCleanup běží jako systém (ve stejném procesu jako MyTestMethod)
- MyModuleSetup a MyModuleCleanup běží jako systém (ve stejném procesu jako MyTestMethod)
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);
class MyTests
{
BEGIN_TEST_CLASS(MyTests)
TEST_CLASS_PROPERTY(L"RunFixtureAs", L"Elevated")
END_TEST_CLASS()
BEGIN_TEST_METHOD(MyTestMethod)
TEST_METHOD_PROPERTY(L"RunAs", L"System")
END_TEST_METHOD()
TEST_METHOD_SETUP(MyTestSetup);
TEST_METHOD_CLEANUP(MyTestCleanup);
TEST_CLASS_SETUP(MyClassSetup);
TEST_CLASS_CLEANUP(MyClassCleanup);
};
Předchozí příklad spustí testy a zařízení následujícím způsobem:
- MyTestMethod běží jako systém
- MyTestSetup a MyTestCleanup se spouštějí se zvýšenými oprávněními
- MyClassSetup a MyClassCleanup běží jako se zvýšenými oprávněními
- MyModuleSetup a MyModuleCleanup běží jako systém (ve stejném procesu jako MyTestMethod)
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);
class MyTests
{
BEGIN_TEST_CLASS(MyTests)
TEST_CLASS_PROPERTY(L"RunFixtureAs", L"System")
END_TEST_CLASS()
BEGIN_TEST_METHOD(MyTestMethod)
TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
TEST_METHOD_PROPERTY(L"RunFixtureAs", L"Elevated")
END_TEST_METHOD()
TEST_METHOD_SETUP(MyTestSetup);
TEST_METHOD_CLEANUP(MyTestCleanup);
TEST_CLASS_SETUP(MyClassSetup);
TEST_CLASS_CLEANUP(MyClassCleanup);
};
Předchozí příklad spustí testy a zařízení následujícím způsobem:
- MyTestMethod běží jako Restricted
- MyTestSetup a MyTestCleanup se spouštějí se zvýšenými oprávněními
- MyClassSetup a MyClassCleanup běží jako systém
- MyModuleSetup a MyModuleCleanup běží s omezením (ve stejném procesu jako MyTestMethod)
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);
class MyTests
{
BEGIN_TEST_CLASS(MyTests)
TEST_CLASS_PROPERTY(L"RunFixtureAs", L"System")
TEST_METHOD_PROPERTY(L"RunFixtureAs:Test", L"Elevated")
END_TEST_CLASS()
BEGIN_TEST_METHOD(MyTestMethod)
TEST_METHOD_PROPERTY(L"RunAs", L"System")
END_TEST_METHOD()
BEGIN_TEST_METHOD(MyTestMethod2)
TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
END_TEST_METHOD()
TEST_METHOD_SETUP(MyTestSetup);
TEST_METHOD_CLEANUP(MyTestCleanup);
TEST_CLASS_SETUP(MyClassSetup);
TEST_CLASS_CLEANUP(MyClassCleanup);
};
Předchozí příklad spustí testy a zařízení následujícím způsobem:
- MyTestMethod běží jako systém
- MyTestMethod2 se spouští jako omezený
- MyTestSetup a MyTestCleanup běží jako zvýšená; Metoda RunFixtureAs:Test scoping použitá pro všechny testovací metody v rámci třídy MyTests
- MyClassSetup a MyClassCleanup běží jako systém (v jiném procesu než MyTestMethod)
- MyModuleSetup a MyModuleCleanup běží v kontextu jejich příslušného testovacího procesu (System u MyTestMethod a Restricted u MyTestMethod2)
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);
class MyTests
{
BEGIN_TEST_CLASS(MyTests)
TEST_CLASS_PROPERTY(L"RunFixtureAs", L"System")
END_TEST_CLASS()
BEGIN_TEST_METHOD(MyTestMethod)
TEST_METHOD_PROPERTY(L"RunAs", L"System")
END_TEST_METHOD()
BEGIN_TEST_METHOD(MyTestMethod2)
TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
TEST_METHOD_PROPERTY(L"RunFixtureAs", L"Elevated")
END_TEST_METHOD()
TEST_METHOD_SETUP(MyTestSetup);
TEST_METHOD_CLEANUP(MyTestCleanup);
TEST_CLASS_SETUP(MyClassSetup);
TEST_CLASS_CLEANUP(MyClassCleanup);
};
Předchozí příklad spustí testy a zařízení následujícím způsobem:
- MyTestMethod běží jako systém
- MyTestMethod2 se spouští jako Restricted
- MyTestSetup a MyTestCleanup běží jako System pro MyTestMethod a jako Elevated pro MyTestMethod2
- MyClassSetup a MyClassCleanup běží jako systém (v jiném procesu než MyTestMethod)
- MyModuleSetup a MyModuleCleanup se spouštějí v kontextu svých příslušných testovacích procesů: System v případě testovací metody MyTestMethod a Restricted v případě testovací metody MyTestMethod2.
BEGIN_MODULE()
MODULE_PROPERTY(L"RunFixtureAs", L"System")
END_MODULE()
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);
class MyTests
{
BEGIN_TEST_CLASS(MyTests)
TEST_CLASS_PROPERTY(L"RunFixtureAs", L"Default")
TEST_CLASS_PROPERTY(L"RunFixtureAs:Test", L"Elevated")
END_TEST_CLASS()
BEGIN_TEST_METHOD(MyTestMethod)
TEST_METHOD_PROPERTY(L"RunAs", L"System")
END_TEST_METHOD()
BEGIN_TEST_METHOD(MyTestMethod2)
TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
END_TEST_METHOD()
TEST_METHOD_SETUP(MyTestSetup);
TEST_METHOD_CLEANUP(MyTestCleanup);
TEST_CLASS_SETUP(MyClassSetup);
TEST_CLASS_CLEANUP(MyClassCleanup);
};
Předchozí příklad spustí testy a zařízení následujícím způsobem:
- MyTestMethod běží jako systém
- MyTestMethod2 se spouští jako omezený
- MyTestSetup a MyTestCleanup běží v režimu zvýšených oprávnění pro MyTestMethod i MyTestMethod2
- MyClassSetup a MyClassCleanup běží jako výchozí (ve stejném kontextu, ve kterém je aktuálně spuštěný Te.exe, ale v jiném procesu než MyTestMethod a MyTestMethod2)
- MyModuleSetup a MyModuleCleanup běží jako systém (v jiném procesu než MyTestMethod)
BEGIN_MODULE()
MODULE_PROPERTY(L"RunFixtureAs", L"System")
MODULE_PROPERTY(L"RunFixtureAs:Test", L"Test")
END_MODULE()
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);
class MyTests
{
BEGIN_TEST_CLASS(MyTests)
TEST_CLASS_PROPERTY(L"RunFixtureAs", L"Elevated")
END_TEST_CLASS()
BEGIN_TEST_METHOD(MyTestMethod)
TEST_METHOD_PROPERTY(L"RunAs", L"System")
END_TEST_METHOD()
BEGIN_TEST_METHOD(MyTestMethod2)
TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
END_TEST_METHOD()
TEST_METHOD_SETUP(MyTestSetup);
TEST_METHOD_CLEANUP(MyTestCleanup);
TEST_CLASS_SETUP(MyClassSetup);
TEST_CLASS_CLEANUP(MyClassCleanup);
};
Předchozí příklad spustí testy a zařízení následujícím způsobem:
- MyTestMethod běží jako systém
- MyTestMethod2 se spouští jako omezený
- MyTestSetup a MyTestCleanup běží ve stejném procesu jako MyTestMethod a MyTestMethod2.
- MyClassSetup a MyClassCleanup běží jako se zvýšenými oprávněními
- MyModuleSetup a MyModuleCleanup běží jako systém (v jiném procesu než MyTestMethod)
BEGIN_MODULE()
MODULE_PROPERTY(L"RunFixtureAs", L"System")
MODULE_PROPERTY(L"RunFixtureAs:Test", L"Test")
END_MODULE()
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);
class MyTests
{
BEGIN_TEST_CLASS(MyTests)
TEST_CLASS_PROPERTY(L"RunFixtureAs", L"Elevated")
END_TEST_CLASS()
BEGIN_TEST_METHOD(MyTestMethod)
TEST_METHOD_PROPERTY(L"RunAs", L"System")
END_TEST_METHOD()
BEGIN_TEST_METHOD(MyTestMethod2)
TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
TEST_METHOD_PROPERTY(L"RunFixtureAs", L"Elevated")
END_TEST_METHOD()
TEST_METHOD_SETUP(MyTestSetup);
TEST_METHOD_CLEANUP(MyTestCleanup);
TEST_CLASS_SETUP(MyClassSetup);
TEST_CLASS_CLEANUP(MyClassCleanup);
};
Předchozí příklad spustí testy a zařízení následujícím způsobem:
- MyTestMethod běží jako systém
- MyTestMethod2 se spouští jako Restricted
- MyTestSetup a MyTestCleanup se spouští ve stejném procesu jako MyTestMethod a v procesu se zvýšenými oprávněními pro MyTestMethod2
- MyClassSetup a MyClassCleanup běží jako se zvýšenými oprávněními
- MyModuleSetup a MyModuleCleanup běží jako systém (v jiném procesu než MyTestMethod)
BEGIN_MODULE()
MODULE_PROPERTY(L"RunFixtureAs", L"System")
END_MODULE()
MODULE_SETUP(MyModuleSetup);
MODULE_CLEANUP(MyModuleCleanup);
class MyTests
{
BEGIN_TEST_CLASS(MyTests)
TEST_CLASS_PROPERTY(L"RunFixtureAs:Class", L"Elevated")
END_TEST_CLASS()
BEGIN_TEST_METHOD(MyTestMethod)
TEST_METHOD_PROPERTY(L"RunAs", L"System")
END_TEST_METHOD()
BEGIN_TEST_METHOD(MyTestMethod2)
TEST_METHOD_PROPERTY(L"RunAs", L"Restricted")
END_TEST_METHOD()
TEST_METHOD_SETUP(MyTestSetup);
TEST_METHOD_CLEANUP(MyTestCleanup);
TEST_CLASS_SETUP(MyClassSetup);
TEST_CLASS_CLEANUP(MyClassCleanup);
};
Výše uvedený příklad spustí testy a zařízení následujícím způsobem:
- MyTestMethod běží jako systém
- MyTestMethod2 se spouští jako Omezený
- MyTestSetup a MyTestCleanup běží jako systém (v jiném procesu než MyTestMethod)
- MyClassSetup a MyClassCleanup běží s vyššími oprávněními
- MyModuleSetup a MyModuleCleanup běží jako systém (v jiném procesu než MyTestMethod)