Teste funcional de Java™
Saiba como preparar testes funcionais de Java™ para o AEM as a Cloud Service
Introdução aos testes funcionais getting-started-functional-tests
Após a criação de um novo repositório de código no Cloud Manager, uma pasta chamada it.tests
é criada automaticamente com exemplos de casos de teste.
it.tests
, você também poderá gerar a versão mais recente usando o Arquétipo de projeto do AEM.Depois de obter o conteúdo da pasta it.tests
, você poderá usá-la como base para os seus próprios testes e, em seguida:
- Desenvolver os seus casos de teste.
- Executar os testes localmente.
- Confirmar seu código no repositório do Cloud Manager e executar um pipeline do Cloud Manager.
Gravação de testes funcionais personalizados writing-functional-tests
As mesmas ferramentas que a Adobe usa para gravar testes funcionais do produto podem ser usadas para gravar seus testes funcionais personalizados. Use os testes funcionais do produto no GitHub como exemplo para gravar seus testes.
O código do teste funcional personalizado é o código Java™ localizado na pasta it.tests
do projeto. Ele deve produzir um único JAR com todos os testes funcionais. Se a compilação produzir mais de um JAR de teste, o JAR selecionado será não determinístico. Se produzir zero JAR de teste, a etapa de teste será aprovada por padrão. Consulte o Arquétipo de Projetos AEM para ver exemplos de testes.
Os testes são executados na infraestrutura de testes mantida pela Adobe, incluindo pelo menos duas instâncias de autor, duas instâncias de publicação e uma configuração do Dispatcher. Essa configuração significa que seus testes funcionais personalizados são executados em toda a pilha do AEM.
Estrutura de testes funcionais functional-tests-structure
Os testes funcionais personalizados precisam ser compactados como um arquivo JAR separado produzido pela mesma build do Maven que os artefatos a serem implantados no AEM. Em geral, essa build seria um módulo do Maven separado. O arquivo JAR resultante deve conter todas as dependências necessárias e geralmente é criado usando o maven-assembly-plugin
com o descritor jar-with-dependencies
.
Além disso, o JAR deve ter a o cabeçalho de manifesto Cloud-Manager-TestType
definido como integration-test
.
O código a seguir é um exemplo de configuração de maven-assembly-plugin
.
<build>
<plugins>
<!-- Create self-contained jar with dependencies -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-assembly-plugin</artifactId>
<version>3.1.0</version>
<configuration>
<descriptorRefs>
<descriptorRef>jar-with-dependencies</descriptorRef>
</descriptorRefs>
<archive>
<manifestEntries>
<Cloud-Manager-TestType>integration-test</Cloud-Manager-TestType>
</manifestEntries>
</archive>
</configuration>
<executions>
<execution>
<id>make-assembly</id>
<phase>package</phase>
<goals>
<goal>single</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
Neste arquivo JAR, os nomes de classe dos testes reais a serem executados devem terminar em IT
.
Por exemplo, uma classe chamada com.myco.tests.aem.it.ExampleIT
seria executada, mas uma chamada com.myco.tests.aem.it.ExampleTest
não.
Além disso, para excluir o código de teste da verificação de abrangência da verificação de código, o código de teste deve estar abaixo de um pacote chamado it
(o filtro de exclusão de abrangência é **/it/**/*.java
).
As classes de teste precisam ser testes JUnit normais. A infraestrutura de teste é projetada e configurada para ser compatível com as convenções usadas pela biblioteca de testes aem-testing-clients
. Os desenvolvedores são incentivados a usar essa biblioteca e a seguir suas práticas recomendadas.
Consulte aem-testing-clients
repositório do GitHub para obter mais detalhes.
Pré-requisitos prerequisites
- Os testes no Cloud Manager são executados usando um usuário administrador técnico.
- A infraestrutura em container com escopo para testes funcionais apresenta os seguintes limites:
Dependências
- aem-cloud-testing-clients:
As próximas alterações na infraestrutura contida usada para executar testes funcionais exigirão que a biblioteca aem-cloud-testing-clients usada em seu teste funcional personalizado seja atualizada para pelo menos a versão 1.2.1
Verifique se sua dependência em it.tests/pom.xml
foi atualizada.
<dependency>
<groupId>com.adobe.cq</groupId>
<artifactId>aem-cloud-testing-clients</artifactId>
<version>1.2.1</version>
</dependency>
Falha ao atualizar a biblioteca de dependências resultará em falhas de pipeline na etapa "Teste funcional personalizado".
Execução local de testes local-test-execution
Antes de ativar testes funcionais em um pipeline do Cloud Manager, é recomendável executar os testes funcionais localmente usando o SDK do AEM as a Cloud Service ou uma instância real do AEM as a Cloud Service.
Executando em um IDE running-in-an-ide
Como as classes de teste são testes JUnit, elas podem ser executadas a partir dos principais IDEs Java™, como Eclipse, IntelliJ, e NetBeans. Como os testes funcionais do produto e os testes funcionais personalizados se baseiam na mesma tecnologia, ambos podem ser executados localmente copiando os testes de produto aos seus testes personalizados.
No entanto, ao executá-los, será necessário definir uma variedade de propriedades do sistema esperadas pela biblioteca aem-testing-clients
(e os Clientes de teste do Sling subjacentes).
As propriedades do sistema são mostradas a seguir.
sling.it.instances
2
2
sling.it.instance.url.1
http://localhost:4502
sling.it.instance.runmode.1
author
author
sling.it.instance.adminUser.1
admin
sling.it.instance.adminPassword.1
sling.it.instance.url.2
http://localhost:4503
sling.it.instance.runmode.2
publish
publish
sling.it.instance.adminUser.2
admin
sling.it.instance.adminPassword.2
Execução de todos os testes usando Maven using-maven
-
Abra um shell e navegue até a pasta
it.tests
no seu repositório. -
Execute o seguinte comando fornecendo os parâmetros necessários para iniciar os testes usando o Maven.
mvn verify -Plocal \
-Dit.author.url=https://author-<program-id>-<environment-id>.adobeaemcloud.com \
-Dit.author.user=<user> \
-Dit.author.password=<password> \
-Dit.publish.url=https://publish-<program-id>-<environment-id>.adobeaemcloud.com \
-Dit.publish.user=<user> \
-Dit.publish.password=<password>