Nota
O acesso a esta página requer autorização. Podes tentar iniciar sessão ou mudar de diretório.
O acesso a esta página requer autorização. Podes tentar mudar de diretório.
O TAEF usa RunFixtureAs para executar equipamentos de teste (funções de configuração e limpeza de módulo, classe e nível de teste) em um contexto diferente do(s) teste(s) correspondente(s).
Pré-requisitos
- O Te.Service deve estar instalado e em execução na máquina para executar conjuntos de testes elevados a partir de um processo Te.exe não elevado ou para executar conjuntos de testes como Sistema Local.
Visão geral
RunFixtureAs pode ser aplicado no nível de módulo, classe e/ou teste e será herdado na árvore de teste. Para possibilitar a capacidade de desativar a herança de RunFixtureAs a um dado nível na árvore, também são suportados os metadados RunFixtureAs:[scope].
Por exemplo, se um módulo estiver marcado com RunFixtureAs=System, uma classe (ClassA) pode ser marcada como RunFixtureAs:Test=Default. Nesse caso, os equipamentos de módulo e classe serão executados como Sistema, mas os equipamentos de nível de teste dentro da Classe A serão executados no mesmo contexto que Te.exe (embora ainda em um processo diferente do teste).
O valor de metadados RunFixtureAs:[scope] não é herdado na árvore de teste; aplica-se apenas ao âmbito especificado.
Garantias determinísticas
- Por padrão (se nenhum valor de RunFixtureAs for especificado), é garantido que testes e fixações sejam executados dentro do mesmo processo.
- Se uma luminária estiver marcada com um valor RunFixtureAs válido diferente de 'Test', a luminária será executada em um processo diferente do teste. Isso significa que, mesmo que um teste esteja marcado com RunAs=Elevated e RunFixtureAs=Elevated, o teste será executado em um processo elevado e seus equipamentos serão executados em um processo elevado separado.
- Os pares de configurações correspondentes para um determinado âmbito serão sempre executados dentro do mesmo processo (por exemplo, a configuração e as rotinas de limpeza de uma classe serão executadas dentro do mesmo processo).
RunFixtureAs tipos
O TAEF suporta os seguintes tipos RunFixtureAs, que são especificados pelos metadados de teste:
Sistema
O TAEF executa a configuração como Sistema Local.
Observação Os dispositivos de teste que você executa como Sistema Local não devem criar nenhuma interface do usuário. Se seus equipamentos precisam criar ou interagir com a interface do usuário, você precisa mover o código relacionado à interface do usuário para executáveis separados que são iniciados em uma área de trabalho a partir de seus testes usando CreateProcessAsUser.
Elevado
O TAEF garante que a fixação é executada em um processo elevado, gerando um processo elevado no qual a fixação deve ser executada, se necessário.
Observação O usuário que executa o TAEF deve ser membro do grupo de administradores para executar equipamentos marcados com RunFixtureAs=Elevated. Isso se deve ao fato de que os não-administradores não têm um token dividido para elevar.
Padrão
O TAEF executa o equipamento no mesmo contexto que Te.exe (mas ainda dentro de um processo diferente do teste).
Corretor
A TAEF executa a configuração em um processo de 'Immersive Broker'.
Nota
- 'Broker' só é suportado no Windows 8 e sistemas operativos superiores.
- A política de assinatura de teste deve estar ativada no sistema. Para obter mais informações, a opção de configuração de inicialização TESTSIGNING.
- A execução remota de testes com 'RunFixtureAs=Broker' não é suportada no momento.
- Ao executar com 'RunFixtureAs=Broker', o TAEF usará o processo "TE.ProcessHost.Broker.exe" para a execução do fixture, não "TE.ProcessHost.exe".
UIAccess
O TAEF executa o dispositivo em um processo marcado com o nível de execução UIAccess. Para obter informações sobre UIAccess para aplicativos de automação da interface do usuário, consulte o Windows Integrity Mechanism Design.
Nota
- UIAccess só é suportado no Vista e sistemas operacionais superiores.
- Os binários TAEF devem estar sendo executados a partir de uma pasta na pasta Arquivos de Programas no computador.
- A execução remota de testes com 'RunFixtureAs=UIAccess' não é suportada atualmente.
- Ao executar com 'RunFixtureAs=UIAccess', o TAEF utilizará o processo "TE.ProcessHost.UIAccess.exe" para a execução do teste, e não "TE.ProcessHost.exe".
Teste
O TAEF executa o equipamento no mesmo processo ou contexto que o teste.
Observação Este é o comportamento TAEF padrão quando nenhuma configuração RunFixtureAs é especificada.
RunFixtureAs:[âmbito]
O TAEF suporta os seguintes valores RunFixtureAs:[scope], que são especificados pelos metadados de teste.
RunFixtureAs:Module, RunFixtureAs:Assembly ou RunFixtureAs:Dll
O valor RunFixtureAs será aplicado somente ao nó de nível Module na hierarquia de teste.
RunFixtureAs:Class
O valor RunFixtureAs será aplicado somente aos nós de nível de classe na hierarquia de teste.
RunFixtureAs:Method ou RunFixtureAs:Test
O valor RunFixtureAs será aplicado somente aos nós de nível de teste na hierarquia de teste.
Testes de marcação com 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);
};
O exemplo anterior executará testes e configurações de teste da seguinte maneira:
- MyTestMethod é executado como System
- MyTestSetup e MyTestCleanup são executados como Elevado
- MyClassSetup e MyClassCleanup são executados como System (dentro do mesmo processo que MyTestMethod)
- MyModuleSetup e MyModuleCleanup são executados como System (dentro do mesmo processo 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);
};
O exemplo anterior executará testes e configurações de teste da seguinte forma:
- MyTestMethod é executado como System
- MyTestSetup e MyTestCleanup são executados como Elevado
- MyClassSetup e MyClassCleanup são executados como Elevado
- MyModuleSetup e MyModuleCleanup são executados como System (dentro do mesmo processo 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);
};
O exemplo anterior executará testes e configurações da seguinte maneira:
- MyTestMethod é executado como Restricted
- MyTestSetup e MyTestCleanup são executados como Elevado
- MyClassSetup e MyClassCleanup são executados como System
- MyModuleSetup e MyModuleCleanup são executados como Restricted (dentro do mesmo processo 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);
};
O exemplo anterior executará testes e fixtures da seguinte maneira:
- MyTestMethod é executado como System
- MyTestMethod2 é executado como restrito
- MyTestSetup e MyTestCleanup são executados como Elevated; o escopo RunFixtureAs:Test aplicado a todos os métodos de teste dentro da classe MyTests
- MyClassSetup e MyClassCleanup são executados como System (dentro de um processo diferente de MyTestMethod)
- MyModuleSetup e MyModuleCleanup são executados no contexto do seu respetivo processo de teste (System para MyTestMethod e Restricted 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);
};
O exemplo anterior executará testes e fixações da seguinte maneira:
- MyTestMethod é executado como System
- MyTestMethod2 é executado como restrito
- MyTestSetup e MyTestCleanup são executados como System para MyTestMethod e como Elevated para MyTestMethod2
- MyClassSetup e MyClassCleanup são executados como System (dentro de um processo diferente de MyTestMethod)
- MyModuleSetup e MyModuleCleanup são executados no contexto de seu respetivo processo de teste (no contexto 'System' para 'MyTestMethod' e '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);
};
O exemplo anterior executará testes e preparações da seguinte forma:
- MyTestMethod é executado como System
- MyTestMethod2 é executado como restrito
- MyTestSetup e MyTestCleanup são executados como Elevated para MyTestMethod e MyTestMethod2
- MyClassSetup e MyClassCleanup são executados como padrão (dentro do mesmo contexto em que Te.exe está sendo executado atualmente, mas dentro de um processo diferente de MyTestMethod e MyTestMethod2)
- MyModuleSetup e MyModuleCleanup são executados como System (dentro de um processo diferente de 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);
};
O exemplo anterior executará testes e fixtures da seguinte forma:
- MyTestMethod é executado como System
- MyTestMethod2 é executado como restrito
- MyTestSetup e MyTestCleanup são executados dentro do mesmo processo que MyTestMethod e MyTestMethod2
- MyClassSetup e MyClassCleanup são executados como Elevado
- MyModuleSetup e MyModuleCleanup são executados como System (dentro de um processo diferente de 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);
};
O exemplo anterior executará testes e estruturas da seguinte maneira:
- MyTestMethod é executado como System
- MyTestMethod2 é executado como restrito
- MyTestSetup e MyTestCleanup são executados dentro do mesmo processo que MyTestMethod e em um processo elevado para MyTestMethod2
- MyClassSetup e MyClassCleanup são executados como Elevado
- MyModuleSetup e MyModuleCleanup são executados como System (dentro de um processo diferente de 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);
};
O exemplo acima executará testes e fixações da seguinte forma:
- MyTestMethod é executado como System
- MyTestMethod2 é executado como restrito
- MyTestSetup e MyTestCleanup são executados como System (dentro de um processo diferente de MyTestMethod)
- MyClassSetup e MyClassCleanup são executados como Elevado
- MyModuleSetup e MyModuleCleanup são executados como System (dentro de um processo diferente de MyTestMethod)