Smoke Tests, Deployment e Rollback Automatizados

Hoje – na verdade, agora há pouco Alegre – dei uma palestra sobre Smoke Tests no DevOps Summit Brasil 2016. Olha só do que falamos:

Já pensou se você pudesse ter um processo de deployment 100% automatizado, onde a validação do ambiente – e até mesmo a decisão de rollback – pudessem ocorrer de forma automática?

Nesta palestra vamos mostrar como devs e IT Pros podem trabalhar juntos para montar um pipeline automatizado de deployment, com foco no processo de smoke tests e de promoção/rollback automáticos.

Continue lendo “Smoke Tests, Deployment e Rollback Automatizados”

Adicionando novas definições de browser ao Visual Studio Web Performance And Load Test

SNAGHTML547a82b
378

Se você já usou as ferramentas de Teste Web do Visual Studio Ultimate (Web Performance Test e Load Test), provavelmente já deve ter visto uma caixa de diálogo similar a esta logo acima. Com ela, é possível indicar qual navegador será simulado durante seus testes. Isso é particularmente útil para aplicações Web que tenham renderização condicional – ou seja, que geram HTML específico para um dado browser. Simular vários browsers permite, portanto, exercitar esses vários mecanismos de geração condicional.

O problema

Recentemente, num cliente da Lambda3, tivemos uma demanda específica: rodar um teste de carga que simulasse os seguintes clientes:

  • Internet Explorer 8 no Windows XP;
  • Internet Explorer 9 no Windows 7;
  • Chrome 27 no Linux (Ubuntu); e
  • Chrome 31 no Windows 7.

Olhando para a caixa de diálogo acima, fica óbvio que tínhamos um problema. Mais especificamente com o Chrome. Não havia, entre as opções disponíveis, as versões de Chrome que o cliente precisava.

A solução

Felizmente, resolver isso é bem fácil. Essa lista de browsers é um sub-diretório na pasta de instalação do Visual Studio. Abra o diretório C:\Program Files (x86)\Microsoft Visual Studio 12.0\Common7\IDE\Templates\LoadTest\Browsers (“C:\Program Files” num Windows de 32 bits) e você vai encontrar vários arquivos com a extensão .browser, um para cada definição de browser:

Diretório com as definições de browsers
312

Esses arquivos são meros arquivos XML com a descrição dos browsers. Como era de se esperar, a definição mais importante para nosso caso é a string de user-agent (o cabeçalho HTTP que identifica qual browser está acessando o servidor). Veja, por exemplo, o conteúdo do arquivo Chrome2.browser:

<Browser Name="Chrome 2" MaxConnections="6">
  <Headers>    
    <Header Name="User-Agent" Value="Mozilla/5.0 (Windows; U; Windows NT 5.1;) AppleWebKit/530.1 (KHTML, like Gecko) Chrome/2.0.169.1 Safari/530.1"/>
    <Header Name="Accept" Value="*/*" />
    <Header Name="Accept-Language" Value="{{$IEAcceptLanguage}}" />
    <Header Name="Accept-Encoding" Value="gzip,deflate" />
    <Header Name="Accept-Charset" Value="ISO-8859-1,*,utf-8" />
  </Headers>
</Browser>

DICA: Para descobrir qual a string de user-agent eu devia usar para as duas versões de Chrome, consultei a lista presente no site UserAgentStrings.com.

Agora, o resto foi fácil. Criei duas cópias do arquivo Chrome2.browser (que usei como referência) e salvei-as, respectivamente, como Chrome27-Linux.browser e Chrome31.browser.

Chrome 27 no Linux (Ubuntu)

<Browser Name="Chrome 27 (Ubuntu 13.10)" MaxConnections="6">
  <Headers>
    <Header Name="User-Agent" Value="Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Ubuntu/13.10 Chromium/27.0.1453.93 Chrome/27.0.1453.93 Safari/537.36"/>
    <Header Name="Accept" Value="*/*" />
    <Header Name="Accept-Language" Value="{{$IEAcceptLanguage}}" />
    <Header Name="Accept-Encoding" Value="gzip,deflate" />
    <Header Name="Accept-Charset" Value="ISO-8859-1,*,utf-8" />
  </Headers>
</Browser>

Chrome 31 no Windows 7

<Browser Name="Chrome 31 (Windows 7)" MaxConnections="6">
  <Headers>    
    <Header Name="User-Agent" Value="Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/31.0.1623.0 Safari/537.36"/>
    <Header Name="Accept" Value="*/*" />
    <Header Name="Accept-Language" Value="{{$IEAcceptLanguage}}" />
    <Header Name="Accept-Encoding" Value="gzip,deflate" />
    <Header Name="Accept-Charset" Value="ISO-8859-1,*,utf-8" />
  </Headers>
</Browser>

Se o Visual Studio estiver aberto, não esqueça de reiniciá-lo. Agora, temos duas novas opções de navegadores para uso no Web Performance Test e no Load Test:

Caixa de diãlogo de seleção de browsers com as novas opções
316

Um abraço,
    Igor