Nota:
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
TAEF utiliza RunFixtureAs para ejecutar configuraciones de prueba (módulo, clase y funciones de configuración y limpieza de nivel de prueba) en un contexto separado de las pruebas correspondientes.
Prerrequisitos
- Te.Service debe instalarse y ejecutarse en la máquina para ejecutar accesorios de prueba elevados desde un proceso de Te.exe sin privilegios elevados, o para ejecutar accesorios de prueba como sistema local.
Visión general
RunFixtureAs se puede aplicar en el nivel de módulo, clase y/o prueba, y se heredará a lo largo del árbol de pruebas. Para admitir la capacidad de no participar en la herencia de RunFixtureAs en un nivel determinado del árbol, también se admiten los metadatos de RunFixtureAs:[scope].
Por ejemplo, si un módulo está marcado con RunFixtureAs=System, una clase (ClassA) se puede marcar como RunFixtureAs:Test=Default. En tal caso, los fixtures de módulo y clase se ejecutarán como System, pero los fixtures a nivel de prueba dentro de ClassA se ejecutarán en el mismo contexto que Te.exe (aunque todavía en un proceso diferente al de la prueba).
El valor de metadatos RunFixtureAs:[scope] no se hereda del árbol de prueba; solo se aplica al ámbito especificado.
Garantías deterministas
- De forma predeterminada (si no se especifican valores RunFixtureAs), se garantiza que las pruebas y las configuraciones se ejecuten dentro del mismo proceso.
- Si un accesorio está marcado con un valor RunFixtureAs válido distinto de "Test", el accesorio se ejecutará en un proceso diferente al de la prueba. Esto significa que incluso si una prueba está marcada con RunAs=Elevated y RunFixtureAs=Elevated, la prueba se ejecutará en un proceso elevado y sus configuraciones de prueba se ejecutarán en un proceso elevado independiente.
- Los pares de accesorios coincidentes para un ámbito determinado siempre se ejecutarán dentro del mismo proceso (por ejemplo, la configuración y los accesorios de limpieza de una clase se ejecutarán dentro del mismo proceso).
RunFixtureAs Types
TAEF admite los siguientes tipos RunFixtureAs, que se especifican mediante los metadatos de prueba:
Sistema
TAEF ejecuta la prueba como Sistema Local.
Nota Los fixtures de prueba que se ejecutan como sistema local no deben crear ninguna interfaz de usuario. Si tus elementos necesitan crear o interactuar con la interfaz de usuario, debes mover el código relacionado con la interfaz de usuario a ejecutables independientes que se inicien en un entorno de escritorio desde tus pruebas mediante CreateProcessAsUser.
Elevado
TAEF garantiza que el accesorio se ejecute en un proceso elevado generando un proceso elevado en el que ejecutar el accesorio si es necesario.
Nota El usuario que ejecuta TAEF debe ser miembro del grupo de administradores para ejecutar accesorios marcados con RunFixtureAs=Elevated. Esto se debe al hecho de que los no administradores no tienen un token dividido para elevar.
Predeterminado
TAEF ejecuta el fixture en el mismo contexto que Te.exe, aunque dentro de un proceso diferente al de la prueba.
Broker
TAEF ejecuta la suite de pruebas en un proceso de "corretaje inmersivo".
Nota
- 'Broker' solo se admite en windows 8 y sistemas operativos superiores.
- La directiva de firma de pruebas debe estar habilitada en el sistema. Para obtener más información, la opción de configuración de arranque TESTSIGNING.
- Actualmente no se admite la ejecución de pruebas con "RunFixtureAs=Broker".
- Al ejecutar con 'RunFixtureAs=Broker', TAEF usará el proceso "TE.ProcessHost.Broker.exe" para la ejecución del fixture, no "TE.ProcessHost.exe".
UIAccess
TAEF ejecuta el entorno de prueba en un proceso configurado con el nivel de ejecución UIAccess. Para obtener información sobre UIAccess para aplicaciones de automatización de la interfaz de usuario, consulte el diseño del mecanismo de integridad de Windows.
Nota
- UIAccess solo se admite en Vista y sistemas operativos superiores.
- Los archivos binarios de TAEF deben ejecutarse desde una carpeta en la carpeta Archivos de programa del equipo.
- Actualmente no se admite la ejecución remota de pruebas con "RunFixtureAs=UIAccess".
- Al ejecutar con 'RunFixtureAs=UIAccess', TAEF usará el proceso "TE.ProcessHost.UIAccess.exe" para la ejecución del fixture, no "TE.ProcessHost.exe".
Prueba
TAEF ejecuta el accesorio en el mismo proceso o contexto que la prueba.
Nota Este es el comportamiento predeterminado de TAEF cuando no se especifica ninguna configuración de RunFixtureAs.
RunFixtureAs:[scope]
TAEF admite los siguientes valores RunFixtureAs:[scope], especificados por los metadatos de prueba.
RunFixtureAs:Module, RunFixtureAs:Assembly o RunFixtureAs:Dll
El valor RunFixtureAs solo se aplicará al nodo nivel de módulo de la jerarquía de prueba.
RunFixtureAs:Class
El valor RunFixtureAs solo se aplicará a los nodos de nivel de clase de la jerarquía de prueba.
RunFixtureAs:Method o RunFixtureAs:Test
El valor RunFixtureAs solo se aplicará a los nodos de nivel de prueba de la jerarquía de pruebas.
Marcar pruebas 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);
};
En el ejemplo anterior se ejecutarán pruebas y accesorios de la siguiente manera:
- MyTestMethod se ejecuta como System
- MyTestSetup y MyTestCleanup se ejecutan con privilegios elevados
- MyClassSetup y MyClassCleanup se ejecutan como System (dentro del mismo proceso que MyTestMethod)
- MyModuleSetup y MyModuleCleanup se ejecutan como System (dentro del mismo proceso que 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);
};
En el ejemplo anterior se ejecutarán pruebas y fixtures de la manera siguiente:
- MyTestMethod se ejecuta como System
- MyTestSetup y MyTestCleanup se ejecutan con privilegios elevados
- MyClassSetup y MyClassCleanup se ejecutan con privilegios elevados
- MyModuleSetup y MyModuleCleanup se ejecutan como System (dentro del mismo proceso que 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);
};
En el ejemplo anterior se ejecutarán pruebas y configuraciones de la siguiente manera:
- MyTestMethod se ejecuta como restringido
- MyTestSetup y MyTestCleanup se ejecutan con privilegios elevados
- MyClassSetup y MyClassCleanup se ejecutan como System
- MyModuleSetup y MyModuleCleanup se ejecutan como restringidos (dentro del mismo proceso que 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);
};
En el ejemplo anterior se ejecutarán las pruebas y configuraciones de la siguiente manera:
- MyTestMethod se ejecuta como System
- MyTestMethod2 se ejecuta con restricciones
- MyTestSetup y MyTestCleanup se ejecutan con privilegios elevados; el ámbito RunFixtureAs:Test se aplica a todos los métodos de prueba dentro de la clase MyTests.
- MyClassSetup y MyClassCleanup se ejecutan como System (dentro de un proceso diferente que MyTestMethod)
- MyModuleSetup y MyModuleCleanup se ejecutan dentro del contexto de sus respectivos procesos de prueba (Sistema para MyTestMethod y Restringido para 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);
};
En el ejemplo anterior se ejecutarán pruebas y accesorios de la siguiente manera:
- MyTestMethod se ejecuta como System
- MyTestMethod2 se ejecuta como restringido
- MyTestSetup y MyTestCleanup se ejecutan como System for MyTestMethod y como elevados para MyTestMethod2
- MyClassSetup y MyClassCleanup se ejecutan como System (dentro de un proceso diferente que MyTestMethod)
- MyModuleSetup y MyModuleCleanup se ejecutan dentro del contexto de su respectivo proceso de prueba: System para MyTestMethod y Restricted para 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);
};
En el ejemplo anterior se ejecutarán pruebas y accesorios de la siguiente manera:
- MyTestMethod se ejecuta como System
- MyTestMethod2 se ejecuta como restringido
- MyTestSetup y MyTestCleanup se ejecutan con privilegios elevados para MyTestMethod y MyTestMethod2
- MyClassSetup y MyClassCleanup se ejecutan como Predeterminado (en el mismo contexto que Te.exe se está ejecutando actualmente, pero dentro de un proceso diferente al de MyTestMethod y MyTestMethod2)
- MyModuleSetup y MyModuleCleanup se ejecutan como System (dentro de un proceso diferente que 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);
};
En el ejemplo anterior se ejecutarán las pruebas y configuraciones de la manera siguiente:
- MyTestMethod se ejecuta como System
- MyTestMethod2 se ejecuta como restringido
- MyTestSetup y MyTestCleanup se ejecutan en el mismo proceso que MyTestMethod y MyTestMethod2
- MyClassSetup y MyClassCleanup se ejecutan con privilegios elevados
- MyModuleSetup y MyModuleCleanup se ejecutan como System (dentro de un proceso diferente que 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);
};
En el ejemplo anterior se ejecutarán pruebas y configuraciones de la siguiente manera:
- MyTestMethod se ejecuta como System
- MyTestMethod2 se ejecuta como restringido
- MyTestSetup y MyTestCleanup se ejecutan en el mismo proceso que MyTestMethod y en un proceso con privilegios elevados para MyTestMethod2
- MyClassSetup y MyClassCleanup se ejecutan con privilegios elevados
- MyModuleSetup y MyModuleCleanup se ejecutan como System (dentro de un proceso diferente que 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);
};
En el ejemplo anterior se ejecutarán pruebas y configuraciones de la siguiente manera:
- MyTestMethod se ejecuta como System
- MyTestMethod2 se ejecuta con restricciones
- MyTestSetup y MyTestCleanup se ejecutan como System (dentro de un proceso diferente que MyTestMethod)
- MyClassSetup y MyClassCleanup se ejecutan con privilegios elevados
- MyModuleSetup y MyModuleCleanup se ejecutan como System (dentro de un proceso diferente que MyTestMethod)