Os testes de interface do usuário personalizados são um recurso opcional que permite criar e executar automaticamente testes na interface do usuário para seus aplicativos.
O AEM fornece um conjunto integrado de quality gates (portais de qualidade) do Cloud Manager para garantir atualizações tranquilas para aplicativos personalizados. Em especial, os portais de teste de TI já promovem a criação e a automação de testes personalizados usando as APIs do AEM.
Os testes de interface do usuário são empacotados em uma imagem do Docker para permitir uma grande variedade de opções de linguagem e estruturas (como Cypress, Selenium, Java e Maven, além de JavaScript). Além disso, um projeto de testes de interface pode ser facilmente gerado usando o Arquétipo de projeto do AEM.
O Adobe incentiva o uso do Cypress, pois oferece recarregamento em tempo real e espera automática, o que ajuda a economizar tempo e melhora a produtividade durante os testes. O Cypress também fornece uma sintaxe simples e intuitiva, facilitando a aprendizagem e o uso, mesmo para aqueles que são novos no teste.
Os testes de interface são executados como parte de uma porta de qualidade específica para cada pipeline do Cloud Manager que contém uma etapa de Teste de interface personalizada nos pipelines de produção ou, opcionalmente, nos pipelines de não produção. Quaisquer testes de interface do usuário, incluindo regressão e novas funcionalidades, permitem que erros sejam detectados e relatados.
Diferentemente dos testes funcionais personalizados, que são testes HTTP escritos em Java, os testes de interface podem ser uma imagem do Docker com testes escritos em qualquer idioma, desde que sigam as convenções definidas na seção Compilação de testes de interface.
A Adobe recomenda o uso do Cypress para testes de interface do usuário, seguindo o código fornecido na Repositório de amostras de teste do AEM.
O Adobe também fornece exemplos de módulo de teste de IU com base no JavaScript com WebdriverIO (consulte Arquétipo de projeto AEM) e Java com WebDriver (consulte o Repositório de amostras de teste do AEM).
Esta seção descreve as etapas necessárias para a configuração dos testes de interface para execução no Cloud Manager.
Decida sobre a linguagem de programação que deseja usar.
Para o Cypress, use o código de amostra do Repositório de amostras de teste do AEM.
Para JavaScript e WDIO, use o código de exemplo que é gerado automaticamente na pasta ui.tests
do seu repositório do Cloud Manager.
Se o repositório foi criado antes de o Cloud Manager criar automaticamente as pastas ui.tests
, você também poderá gerar a versão mais recente usando o Arquétipo de Projetos do AEM.
Para Java e WebDriver, use o código de exemplo do repositório de exemplos de teste do AEM.
Para outras linguagens de programação, consulte a seção Criação de testes de interface deste documento para configurar o projeto de teste.
Garanta que o teste da interface esteja ativado de acordo com a seção Adesão do cliente deste documento.
Desenvolver os casos de teste e executar os testes localmente.
Confirmar seu código no repositório do Cloud Manager e executar um pipeline do Cloud Manager.
Um projeto Maven gera um contexto de compilação do Docker. Este contexto de construção do Docker descreve como criar uma imagem do Docker que contenha os testes de interface, que o Cloud Manager usa para gerar uma imagem do Docker contendo os testes de interface reais.
Esta seção descreve as etapas necessárias para adicionar um projeto de testes de interface ao seu repositório.
O Arquétipo de projeto do AEM pode gerar um projeto de testes de interface, que é compatível com a descrição a seguir, caso você não tenha requisitos especiais para a linguagem de programação.
Para gerar um contexto de compilação do Docker, você precisa de um módulo Maven que:
Dockerfile
e qualquer outro arquivo necessário para criar a imagem do Docker em seus testes.ui-test-docker-context
.A maneira mais simples de fazer isso é configurar o Plug-in de compilação do Maven para criar o arquivo de contexto de compilação do Docker e atribuir o classificador correto a ele.
Você pode compilar testes de interface do usuário com diferentes tecnologias e estruturas, mas esta seção presume que o projeto seja apresentado de uma maneira semelhante à descrita a seguir.
├── Dockerfile
├── assembly-ui-test-docker-context.xml
├── pom.xml
├── test-module
│ ├── package.json
│ ├── index.js
│ └── wdio.conf.js
└── wait-for-grid.sh
O arquivo pom.xml
controla a compilação Maven. Adicione uma execução ao Plug-in de compilação do Maven semelhante ao mostrado a seguir.
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<descriptors>
<descriptor>${project.basedir}/assembly-ui-test-docker-context.xml</descriptor>
</descriptors>
<tarLongFileMode>gnu</tarLongFileMode>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
Esta execução instrui o Plug-in de compilação Maven a criar um arquivo com base nas instruções contidas em assembly-ui-test-docker-context.xml
, chamado de descritor de compilação no jargão do plug-in. O descritor de compilação lista todos os arquivos que devem fazer parte do arquivamento.
<assembly>
<id>ui-test-docker-context</id>
<includeBaseDirectory>false</includeBaseDirectory>
<formats>
<format>tar.gz</format>
</formats>
<fileSets>
<fileSet>
<directory>${basedir}</directory>
<includes>
<include>Dockerfile</include>
<include>wait-for-grid.sh</include>
</includes>
</fileSet>
<fileSet>
<directory>${basedir}/test-module</directory>
<excludes>
<exclude>node/**</exclude>
<exclude>node_modules/**</exclude>
<exclude>reports/**</exclude>
</excludes>
</fileSet>
</fileSets>
</assembly>
O descritor de compilação instrui o plug-in a criar um arquivamento do tipo .tar.gz
e atribuir o classificador ui-test-docker-context
a ele. Além disso, ele lista os arquivos que devem ser incluídos no arquivamento, incluindo os descritos a seguir.
Dockerfile
, obrigatório para criar a imagem do Dockerwait-for-grid.sh
, cujos objetivos são descritos abaixotest-module
O descritor de compilação também exclui alguns arquivos que podem ser gerados durante a execução local dos testes de interface do usuário. Isso garante que um arquivo menor seja gerado, e consequentemente, resulta em compilações mais rápidas.
O arquivamento que contém o contexto de compilação do Docker é selecionado automaticamente pelo Cloud Manager, que criará a imagem do Docker contendo seus testes durante os pipelines de implantação. Eventualmente, o Cloud Manager executará a imagem do Docker para executar os testes de interface do usuário em seu aplicativo.
A compilação deve produzir zero ou um arquivamento. Se produzir zero arquivamento, a etapa de teste será aprovada por padrão. Se a compilação produzir mais de um arquivamento, o arquivamento selecionado será não determinístico.
Para que o Cloud Manager compile e execute seus testes de interface do usuário, é necessário aderir a esse recurso adicionando um arquivo ao repositório.
testing.properties
.ui-tests.version=1
.pom.xml
do submódulo de testes de interface.tar.gz
.A compilação dos testes de interface do usuário será ignorada se esse arquivo não estiver presente.
Para incluir um arquivo testing.properties
no artefato de compilação, adicione a instrução include
no arquivo assembly-ui-test-docker-context.xml
.
[...]
<includes>
<include>Dockerfile</include>
<include>wait-for-grid.sh</include>
<include>testing.properties</include> <!-- opt-in test module in Cloud Manager -->
</includes>
[...]
Se o seu projeto não incluir essa linha, será necessário editar o arquivo para aderir ao teste de interface do usuário.
O arquivo pode conter uma linha aconselhando a não editá-la. Isso se deve ao fato de ele ter sido introduzido em seu projeto antes da adesão ao teste de interface do usuário e os clientes não terem a intenção de editar o arquivo. Pode ser ignorado com segurança.
Se estiver usando os exemplos fornecidos pela Adobe:
Para a pasta ui.tests
baseada em JavaScript, gerada com base no Arquétipo de projeto do AEM, você pode executar o comando abaixo para adicionar a configuração necessária.
echo "ui-tests.version=1" > testing.properties
if ! grep -q "testing.properties" "assembly-ui-test-docker-context.xml"; then
awk -v line=' <include>testing.properties</include>' '/<include>wait-for-grid.sh<\/include>/ { printf "%s\n%s\n", $0, line; next }; 1' assembly-ui-test-docker-context.xml > assembly-ui-test-docker-context.xml.new && mv assembly-ui-test-docker-context.xml.new assembly-ui-test-docker-context.xml
fi
As amostras de teste Cypress e Java Selenium fornecidas pelo Adobe já têm o sinalizador de aceitação definido.
Esta seção descreve as convenções que a imagem do Docker que contém seus testes de interface do usuário deve seguir. A imagem do Docker é criada a partir do contexto de compilação do Docker descrito na seção anterior.
As variáveis de ambiente a seguir serão passadas para a imagem do Docker no tempo de execução, dependendo da sua estrutura.
Variável | Exemplos | Descrição | Estrutura de testes |
---|---|---|---|
SELENIUM_BASE_URL |
http://my-ip:4444 |
A URL do servidor Selenium | Somente selênio |
SELENIUM_BROWSER |
chrome |
A implementação do navegador usada pelo servidor Selenium | Somente selênio |
AEM_AUTHOR_URL |
http://my-ip:4502/context-path |
A URL da instância do autor do AEM | Todos |
AEM_AUTHOR_USERNAME |
admin |
O nome de usuário para fazer logon na instância de autor do AEM | Todos |
AEM_AUTHOR_PASSWORD |
admin |
A senha para fazer logon na instância de autor do AEM | Todos |
AEM_PUBLISH_URL |
http://my-ip:4503/context-path |
O URL da instância de publicação do AEM | Todos |
AEM_PUBLISH_USERNAME |
admin |
O nome de usuário para fazer logon na instância de publicação do AEM | Todos |
AEM_PUBLISH_PASSWORD |
admin |
A senha para fazer logon na instância de publicação do AEM | Todos |
REPORTS_PATH |
/usr/src/app/reports |
O caminho onde o relatório XML dos resultados do teste deve ser salvo | Todos |
UPLOAD_URL |
http://upload-host:9090/upload |
O URL onde o arquivo deve ser carregado para torná-lo acessível à estrutura de teste | Todos |
Os exemplos de teste da Adobe fornecem funções auxiliares para acessar os parâmetros de configuração:
Cypress.env('VARIABLE_NAME')
A imagem do Docker deve gerar relatórios de teste no formato XML JUnit e salvá-los no caminho especificado pela variável de ambiente REPORTS_PATH
. O formato XML JUnit é um formato amplamente usado para relatar os resultados de testes. Se a imagem do Docker usar Java e Maven, os módulos de teste padrão, como o Plug-in Maven Surefire e o Plug-in Maven Failsafe poderão gerar os relatórios imediatamente.
Se a imagem do Docker for implementada com outras linguagens de programação ou executores de teste, verifique a documentação das ferramentas escolhidas para saber como gerar relatórios XML JUnit.
O resultado da etapa de teste da interface é avaliado somente com base nos relatórios de teste. Certifique-se de que o relatório seja gerado adequadamente para a execução do teste.
Use asserções em vez de apenas registrar um erro no STDERR ou retornar um código de saída diferente de zero, caso contrário, o pipeline de implantação poderá continuar normalmente.
Para executar os testes funcionais no computador local, crie um usuário com permissões de administrador para alcançar o mesmo comportamento.
Tipo | Valor | Descrição |
---|---|---|
CPU | 2.0 | Quantidade de tempo de CPU reservado por execução de teste |
Memória | 1Gi | Quantidade de memória alocada para o teste, valor em gibibytes |
Tempo limite | 30 min | A duração após a qual o teste será encerrado. |
Duração recomendada | 15 min | A Adobe recomenda gravar os testes para não demorar mais do que esse tempo. |
Se você precisar de mais recursos, crie um caso de Atendimento ao cliente e descreva seu caso de uso. O Adobe analisará sua solicitação e fornecerá a assistência apropriada.
Esta seção só se aplica quando o Selenium é a infraestrutura de teste escolhida.
Antes de os testes começarem, é responsabilidade da imagem do Docker garantir que o servidor Selenium esteja funcionando. Aguardar o serviço Selenium é um processo de duas etapas.
SELENIUM_BASE_URL
.Quando o endpoint de status do Selenium responder com uma resposta positiva, os testes poderão ser iniciados.
Os exemplos de teste de interface da Adobe lidam com isso por meio do script wait-for-grid.sh
, que é executado na inicialização do Docker e inicia a execução do teste real somente depois que a grade está pronta.
A imagem Docker pode gerar saídas de teste adicionais (por exemplo, capturas de tela ou vídeos) e salvá-las no caminho especificado pela variável de ambiente REPORTS_PATH
. Qualquer arquivo encontrado abaixo de REPORTS_PATH
é incluído no arquivo de resultados de teste.
Os exemplos de teste fornecidos pela Adobe criam, por padrão, capturas de tela de qualquer teste com falha.
Você pode usar as funções auxiliares para criar capturas de tela nos testes.
Se um arquivo de resultados de teste for criado durante a execução de um teste de interface, você poderá baixá-lo do Cloud Manager usando o botão Download Details
na etapa Testes de interface personalizados.
Os testes às vezes devem carregar arquivos no aplicativo que está sendo testado. Para manter a implantação do Selenium flexível em relação aos testes, não é possível fazer upload de um ativo diretamente no Selenium. Em vez disso, o upload de um arquivo exige as etapas descritas a seguir.
UPLOAD_URL
.
curl -X POST ${UPLOAD_URL} -F "data=@file.txt"
.200 OK
do tipo text/plain
.
<input>
para testar os uploads de arquivo em seu aplicativo.Antes de ativar os testes de interface em um pipeline do Cloud Manager, é recomendável executá-los localmente
no SDK do AEM as a Cloud Service
ou em uma instância real do AEM as a Cloud Service.
Abra um shell e navegue até a pasta ui.tests/test-module
no repositório
Instalar o Cypress e outros pré-requisitos
npm install
Definir as variáveis de ambiente necessárias para a execução do teste
export AEM_AUTHOR_URL=https://author-<program-id>-<environment-id>.adobeaemcloud.com
export AEM_AUTHOR_USERNAME=<user>
export AEM_AUTHOR_PASSWORD=<password>
export AEM_PUBLISH_URL=https://publish-<program-id>-<environment-id>.adobeaemcloud.com
export AEM_PUBLISH_USERNAME=<user>
export AEM_PUBLISH_PASSWORD=<password>
export REPORTS_PATH=target/
Executar testes com um dos comandos a seguir
npm test # Using default Cypress browser
npm run test-chrome # Using Google Chrome browser
npm run test-firefox # Using Firefox browser
Os arquivos de log serão armazenados na pasta target/
do repositório.
Para obter detalhes, consulte Repositório de amostras de teste do AEM.
Abra um shell e navegue até a pasta ui.tests
no repositório
Execute o comando abaixo para iniciar os testes usando o Maven
mvn verify -Pui-tests-local-execution \
-DAEM_AUTHOR_URL=https://author-<program-id>-<environment-id>.adobeaemcloud.com \
-DAEM_AUTHOR_USERNAME=<user> \
-DAEM_AUTHOR_PASSWORD=<password> \
-DAEM_PUBLISH_URL=https://publish-<program-id>-<environment-id>.adobeaemcloud.com \
-DAEM_PUBLISH_USERNAME=<user> \
-DAEM_PUBLISH_PASSWORD=<password>
target/reports
do repositórioPara obter detalhes, consulte Repositório do Arquétipo de Projeto AEM.
Abra um shell e navegue até a pasta ui.tests/test-module
no repositório
Execute os comandos abaixo para iniciar os testes usando o Maven
# Start selenium docker image (for x64 CPUs)
docker run --platform linux/amd64 -d -p 4444:4444 selenium/standalone-chrome-debug:latest
# Start selenium docker image (for ARM CPUs)
docker run -d -p 4444:4444 seleniarm/standalone-chromium
# Run the tests using the previously started Selenium instance
mvn verify -Pui-tests-local-execution -DSELENIUM_BASE_URL=http://<server>:4444
Os arquivos de log serão armazenados na pasta target/reports
do repositório.
Para obter detalhes, consulte Repositório de amostras de teste do AEM.