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 Projetos 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 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 criação, 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-clientsrepositó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 para a execução de testes funcionais exigem a atualização da biblioteca aem-cloud-testing-clients nos testes funcionais personalizados para a versão 1.2.1 ou superior. Verifique se a dependência no arquivo it.tests/pom.xml foi atualizada adequadamente.
<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ência pode 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 das 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.instances2.2sling.it.instance.url.1http://localhost:4502sling.it.instance.runmode.1author.authorsling.it.instance.adminUser.1adminsling.it.instance.adminPassword.1sling.it.instance.url.2http://localhost:4503sling.it.instance.runmode.2publish.publishsling.it.instance.adminUser.2adminsling.it.instance.adminPassword.2Execução de todos os testes usando Maven using-maven
-
Abra um shell e navegue até a pasta
it.testsno 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>