Execute testes de UI com a janela do Remote Desktop minimizada | Igor Abade (T-Shooter)
Execute testes de UI com a janela do Remote Desktop minimizada
Se você já precisou executar testes automatizados de UI (como Coded UI Tests, White, Selenium e afins) provavelmente o fez numa máquina remota, para não precisar ficar de braços cruzados esperando os testes serem executados no seu computador local.
Mas já reparou que nem sempre isso funciona? Principalmente quando minimizamos a janela do Remote Desktop? Que tal entendermos qual o problema e, principalmente, a solução?
TL;DR: Para poder rodar seus testes com a janela do Remote Desktop Connection minimizada, você precisa definir RemoteDesktop_SuppressWhenMinimized = 2 no Registry do computador local, em HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client
Para poder executar remotamente os seus testes, é bem provável que você tenha feito algo assim:
Fez upload dos scripts/binários de teste para a máquina remota;
Conectou via Remote Desktop;
Iniciou a execução dos testes; e
Minimizou a janela do Remote Desktop – afinal, você tem mais a fazer que simplesmente ficar olhando para os testes sendo executados.
O problema é que, assim que você minimiza a janela do Remote Desktop Connection (apenas minimiza; a conexão continua aberta) os testes param de funcionar!
Essa pergunta é inevitável. Lá na Lambda3, um time estava tendo esse problema e ouvi um dos desenvolvedores falar "mas que @#$% de Windows! Por que ele para de funcionar quando minimizo o Remote Desktop Connection?! Que @#$% mal-feita!"
Entendo a frustração dele, mas se pararmos para pensar um pouquinho o comportamento do Remote Desktop é não apenas compreensível, mas desejável.
Começando pelo começo: o Remote Desktop Services (anteriormente conhecido como Terminal Services) foi concebido como uma tecnologia para compartilhar um servidor – e suas aplicações – entre diversos usuários. Dessa forma, não seria necessário instalar uma dada aplicação no computador de cada uma das pessoas que precisasse usá-la. Bastaria acessar o servidor remoto via Remote Desktop e a aplicação estaria lá, à disposição. Isso viabilizou soluções similares como thin clients e VDI (Virtual Desktop Infrastructure).
Agora, pare e pense um pouco a respeito da finalidade da tecnologia de Remote Desktop: compartilhar um servidor remoto entre diversos usuários. Com diversos usuários disputando os escassos recursos de memória e CPU do servidor remoto, é preciso evitar desperdício a todo custo para garantir a melhor experiência para todos os usuários conectados. Sendo assim, quando um usuário minimiza sua sessão do Remote Desktop (portanto, não a está mais usando), por que continuar atualizando a tela? Esses preciosos ciclos de CPU não seriam mais bem aplicados se dedicados a um usuário que estivesse efetivamente interagindo com o servidor remoto?
Por isso, para atender melhor àqueles usuários que estão efetivamente interagindo com o servidor, as sessões minimizadas são "desativadas" – ou seja, a tela para de ser atualizada e os eventos de teclado/mouse param de ser processados. É por isso que os testes param de funcionar quando minimizamos nossa sessão de Remote Desktop!
Ok, já entendi. Mas e agora?
Agora, basta dizer ao Remote Desktop Services que sabemos o que estamos fazendo e que queremos que a tela continua sendo atualizada mesmo quando minimizamos nossa sessão. O truque é uma pequena alteração no Registry do computador local, para alterarmos o comportamento padrão do serviço.
AVISO: Execute os passos abaixo por sua conta e risco! Não me responsabilizo por quaisquer problemas que isso possa causar ao seu servidor, a seus testes ou até mesmo ao seu gato!
Faça login em seu computador local (não no computador remoto onde você roda os testes);
Feche quaisquer sessões de Remote Desktop que você tenha aberto atualmente em seu computador;
Ainda no computador local, abra o Registry Editor e navegue até a chave HKEY_CURRENT_USER\Software\Microsoft\Terminal Server Client;
Crie um valor DWORD chamado RemoteDesktop_SuppressWhenMinimized e defina seu valor como 2.
A partir de agora, você pode minimizar suas sessões de Remote Desktop sem medo – seus testes continuarão sendo executados!
(Referência: http://www.8bitavenue.com/2012/10/running-gui-tests-in-minimized-windows-remote-desktop/)