RunFixtureAs
TAEF usa RunFixtureAs per eseguire dispositivi di test (modulo, classe e funzioni di installazione e pulizia a livello di test) in un contesto diverso dai test corrispondenti.
Prerequisiti
- Te.Service deve essere installato ed in esecuzione nel computer per eseguire dispositivi di test elevati da un processo di Te.exe non elevato o per eseguire dispositivi di test come sistema locale.
Panoramica
RunFixtureAs può essere applicato al livello di modulo, classe e test e verrà ereditato dall'albero di test. Per supportare la possibilità di rifiutare esplicitamente l'ereditarietà RunFixtureAs a un determinato livello nell'albero, i metadati runFixtureAs:[scope] sono supportati anche.
Ad esempio, se un modulo è contrassegnato con RunFixtureAs=System, una classe (ClassA) può essere contrassegnata come RunFixtureAs:Test=Default. In tal caso, i moduli e gli apparecchi di classe verranno eseguiti come Sistema, ma gli apparecchi a livello di test all'interno di ClassA verranno eseguiti nello stesso contesto dell'Te.exe (anche se ancora in un processo diverso rispetto al test).
Il valore dei metadati RunFixtureAs:[scope] non viene ereditato dall'albero di test; si applica solo all'ambito specificato.
Garanzie deterministiche
- Per impostazione predefinita (se non sono specificati valori RunFixtureAs), i test e gli elementi predefinito vengono garantiti per l'esecuzione all'interno dello stesso processo.
- Se un dispositivo è contrassegnato con un valore RunFixtureAs valido diverso da 'Test', l'istanza verrà eseguita in un processo diverso rispetto al test. Ciò significa che, anche se un test è contrassegnato con RunAs=Elevated e RunFixtureAs=Elevated, il test verrà eseguito in un processo con privilegi elevati e i relativi dispositivi verranno eseguiti in un processo con privilegi elevati separati.
- Le coppie di dispositivi corrispondenti per un determinato ambito verranno sempre eseguite all'interno dello stesso processo, ad esempio l'installazione e la pulizia delle partizioni di una classe verranno eseguite nello stesso processo.
Tipi RunFixtureAs
TAEF supporta i tipi RunFixtureAs seguenti, specificati dai metadati di test:
Sistema
TAEF esegue il dispositivo come sistema locale.
Nota I dispositivi di test eseguiti come sistema locale non devono creare alcuna interfaccia utente. Se i dispositivi devono creare o interagire con l'interfaccia utente, è necessario spostare il codice correlato all'interfaccia utente in file eseguibili separati avviati in un desktop dai test usando CreateProcessAsUser.
Elevato
TAEF garantisce che l'apparecchio venga eseguito in un processo con privilegi elevati generando un processo con privilegi elevati in cui eseguire il dispositivo, se necessario.
Nota L'utente che esegue TAEF deve essere membro del gruppo administrators per eseguire le partizioni contrassegnate con RunFixtureAs=Elevated. Ciò è dovuto al fatto che gli amministratori non dispongono di un token di divisione per elevare.
Predefinito
TAEF esegue il dispositivo nello stesso contesto di Te.exe (ma ancora all'interno di un processo diverso rispetto al test).
Broker
TAEF esegue la serie in un processo di "Broker immersivo".
Nota
- 'Broker' è supportato solo in Windows 8 e sistemi operativi superiori.
- I criteri di firma di test devono essere abilitati nel sistema. Per altre informazioni, l'opzione di configurazione di avvio TESTSIGNING.
- L'esecuzione di test in remoto con 'RunFixtureAs=Broker' non è attualmente supportata.
- Quando si esegue con 'RunFixtureAs=Broker' TAEF userà il processo "TE.ProcessHost.Broker.exe" per l'esecuzione di dispositivi, non "TE.ProcessHost.exe".
UIAccess
TAEF esegue il dispositivo in un processo contrassegnato con il livello di esecuzione UIAccess. Per informazioni su UIAccess per applicazioni di automazione interfaccia utente, vedere Progettazione del meccanismo di integrità di Windows.
Nota
- UIAccess è supportato solo nei sistemi operativi Vista e versioni successive.
- I file binari TAEF devono essere in esecuzione da una cartella nella cartella Programmi nel computer.
- L'esecuzione di test in remoto con 'RunFixtureAs=UIAccess' non è attualmente supportata.
- Quando si esegue con 'RunFixtureAs=UIAccess' TAEF userà il processo "TE.ProcessHost.UIAccess.exe" per l'esecuzione di dispositivi, non "TE.ProcessHost.exe".
Test
TAEF esegue la periferica nello stesso processo o contesto del test.
Nota Si tratta del comportamento TAEF predefinito quando non vengono specificate impostazioni RunFixtureAs.
RunFixtureAs:[scope]
TAEF supporta i valori RunFixtureAs:[scope] seguenti, specificati dai metadati di test.
RunFixtureAs:Module, RunFixtureAs:Assembly o RunFixtureAs:Dll
Il valore RunFixtureAs si applica solo al nodo Livello modulo nella gerarchia di test.
RunFixtureAs:Class
Il valore RunFixtureAs si applica solo ai nodi a livello di classe nella gerarchia di test.
RunFixtureAs:Metodo o RunFixtureAs:Test
Il valore RunFixtureAs si applica solo ai nodi del livello di test nella gerarchia di test.
Contrassegnare i test con 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);
};
Nell'esempio precedente verranno eseguiti test e dispositivi come indicato di seguito:
- MyTestMethod viene eseguito come Sistema
- MyTestSetup e MyTestCleanup vengono eseguiti come Elevated
- MyClassSetup e MyClassCleanup vengono eseguiti come System (nello stesso processo di MyTestMethod)
- MyModuleSetup e MyModuleCleanup vengono eseguiti come System (nello stesso processo di 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);
};
Nell'esempio precedente verranno eseguiti test e dispositivi come indicato di seguito:
- MyTestMethod viene eseguito come Sistema
- MyTestSetup e MyTestCleanup vengono eseguiti come Elevated
- MyClassSetup e MyClassCleanup vengono eseguiti come Elevated
- MyModuleSetup e MyModuleCleanup vengono eseguiti come System (nello stesso processo di 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);
};
Nell'esempio precedente verranno eseguiti test e dispositivi come indicato di seguito:
- MyTestMethod viene eseguito con restrizioni
- MyTestSetup e MyTestCleanup vengono eseguiti come Elevated
- MyClassSetup e MyClassCleanup vengono eseguiti come Sistema
- MyModuleSetup e MyModuleCleanup vengono eseguiti con restrizioni (nello stesso processo di 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);
};
Nell'esempio precedente verranno eseguiti test e dispositivi come indicato di seguito:
- MyTestMethod viene eseguito come Sistema
- MyTestMethod2 viene eseguito con restrizioni
- MyTestSetup e MyTestCleanup vengono eseguiti come Elevated; l'ambito RunFixtureAs:Test applicato a tutti i metodi di test all'interno della classe MyTests
- MyClassSetup e MyClassCleanup vengono eseguiti come Sistema (all'interno di un processo diverso da MyTestMethod)
- MyModuleSetup e MyModuleCleanup vengono eseguiti come nel contesto del rispettivo processo di test (System for MyTestMethod e Restricted for 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);
};
Nell'esempio precedente verranno eseguiti test e dispositivi come indicato di seguito:
- MyTestMethod viene eseguito come Sistema
- MyTestMethod2 viene eseguito con restrizioni
- MyTestSetup e MyTestCleanup vengono eseguiti come System per MyTestMethod e come elevate per MyTestMethod2
- MyClassSetup e MyClassCleanup vengono eseguiti come Sistema (all'interno di un processo diverso da MyTestMethod)
- MyModuleSetup e MyModuleCleanup vengono eseguiti come nel contesto del rispettivo processo di test (System for MyTestMethod e Restricted for 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);
};
Nell'esempio precedente verranno eseguiti test e dispositivi come indicato di seguito:
- MyTestMethod viene eseguito come Sistema
- MyTestMethod2 viene eseguito con restrizioni
- MyTestSetup e MyTestCleanup vengono eseguiti con privilegi elevati per MyTestMethod e MyTestMethod2
- MyClassSetup e MyClassCleanup vengono eseguiti come Default (nello stesso contesto di Te.exe è attualmente in esecuzione, ma all'interno di un processo diverso da MyTestMethod e MyTestMethod2)
- MyModuleSetup e MyModuleCleanup vengono eseguiti come sistema (all'interno di un processo diverso da 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);
};
Nell'esempio precedente verranno eseguiti test e dispositivi come indicato di seguito:
- MyTestMethod viene eseguito come Sistema
- MyTestMethod2 viene eseguito con restrizioni
- MyTestSetup e MyTestCleanup vengono eseguiti nello stesso processo di MyTestMethod e MyTestMethod2
- MyClassSetup e MyClassCleanup vengono eseguiti come Elevated
- MyModuleSetup e MyModuleCleanup vengono eseguiti come sistema (all'interno di un processo diverso da 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);
};
Nell'esempio precedente verranno eseguiti test e dispositivi come indicato di seguito:
- MyTestMethod viene eseguito come Sistema
- MyTestMethod2 viene eseguito con restrizioni
- MyTestSetup e MyTestCleanup vengono eseguiti nello stesso processo di MyTestMethod e in un processo con privilegi elevati per MyTestMethod2
- MyClassSetup e MyClassCleanup vengono eseguiti come Elevated
- MyModuleSetup e MyModuleCleanup vengono eseguiti come sistema (all'interno di un processo diverso da 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);
};
Nell'esempio precedente verranno eseguiti test e dispositivi come indicato di seguito:
- MyTestMethod viene eseguito come Sistema
- MyTestMethod2 viene eseguito con restrizioni
- MyTestSetup e MyTestCleanup vengono eseguiti come Sistema (all'interno di un processo diverso da MyTestMethod)
- MyClassSetup e MyClassCleanup vengono eseguiti come Elevated
- MyModuleSetup e MyModuleCleanup vengono eseguiti come sistema (all'interno di un processo diverso da MyTestMethod)