Preparando testes do Appium para upload

Importante

O Visual Studio App Center está programado para ser desativado em 31 de março de 2025. Embora você possa continuar a usar o Visual Studio App Center até que ele seja totalmente desativado, há várias alternativas recomendadas para as quais você pode considerar migrar.

Saiba mais sobre linhas do tempo e alternativas de suporte.

As etapas para preparar um aplicativo e seu conjunto de testes para upload variam dependendo da estrutura de teste. Este guia explica como preparar testes do Appium usando Java com JUnit para upload no App Center. Para obter diretrizes sobre como criar testes do Appium, consulte a documentação do Appium.

Observe as seguintes limitações para o suporte ao Appium:

Observação

Há suporte para o contexto do WebView, do Chrome Web Driver e do navegador Chrome com browserName funcionalidade!

  • Não há suporte para TestNG (há suporte apenas para testes JUnit).
  • Não há suporte para Android 4.2 ou anterior. Não há suporte para o driver UIAutomator preterido.
  • Não há suporte para o iOS 9.2.1 ou anterior. Não há suporte para o driver iOS UIAutomation preterido.
  • Não há suporte para JUnit @Category attribute. (Pode usar Incluir/Excluir em vez disso)
  • A versão do Maven deve ser pelo menos 3.3.9.
  • A versão atual do Appium é a 1.22.0. Ele é atualizado regularmente com novas versões.
  • Há suporte para o JUnit 4.9 – 4.12; não damos suporte ao JUnit 5.
  • Os testes devem ser direcionados precisamente a um aplicativo. (MobileCapabilityType.FULL_RESET tem suporte)

Observação

Em alguns casos, os testes ainda poderão funcionar no App Center se estiverem usando ferramentas ou recursos sem suporte. No entanto, essa funcionalidade sem suporte não é QA'd em atualizações futuras e pode ser interrompida sem aviso.

Pré-requisitos

Os testes serão executados usando o Maven Surefire, que exige que os testes sigam determinadas convenções de nomenclatura:

"**/Test*.java" - includes all of its subdirectories and all Java filenames that start with "Test".
"**/*Test.java" - includes all of its subdirectories and all Java filenames that end with "Test".
"**/*Tests.java" - includes all of its subdirectories and all Java filenames that end with "Tests".
"**/*TestCase.java" - includes all of its subdirectories and all Java filenames that end with "TestCase".

Antes de tentar carregar no Teste do App Center, verifique se a execução de testes localmente em seu computador usando o Maven funciona:

➜  AppiumTest git:(main) ✗ mvn verify
...
Running MainTest
started: SimpleTest (MainTest)
Setting up capabilities
failed
finished
Tests run: 2, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 0.728 sec <<< FAILURE!
SimpleTest(MainTest)  Time elapsed: 0.594 sec  <<< ERROR!
...

Se você não conseguir executar os testes usando a linha de comando localmente, os testes também não funcionarão no Teste do App Center.

1. Alterações no sistema de build

Etapa 1 – Adicionar dependência

Você precisará adicionar uma dependência para as extensões de teste do Appium:

<dependency>
    <groupId>com.microsoft.appcenter</groupId>
    <artifactId>appium-test-extension</artifactId>
    <version>1.6</version>
</dependency>

Esse código garantirá que os drivers Android e iOS aprimorados estejam disponíveis em tempo de compilação. Os drivers aprimorados são fornecidos principalmente para habilitar o label recurso. Confira a Etapa 4 para obter mais detalhes sobre o label recurso.

Etapa 2 – Adicionar perfil de upload

Copie este snippet para o <profiles> na pom.xml marca . Se não houver nenhuma <profiles> seção em seu pom, faça uma. O perfil, quando ativado, empacotará suas classes de teste e todas as dependências na target/upload pasta, prontas para serem carregadas em Teste.

2. Alterações nos testes

Etapa 1 – Adicionar importações

Importe esses pacotes para suas classes de teste:

import com.microsoft.appcenter.appium.Factory;
import com.microsoft.appcenter.appium.EnhancedAndroidDriver;
import org.junit.rules.TestWatcher;
import org.junit.Rule;

Etapa 2 – Instanciar o TestWatcher

Insira essa declaração em cada uma de suas classes de teste:

    @Rule
    public TestWatcher watcher = Factory.createWatcher();

Etapa 3 – Atualizar sua declaração de driver

Substitua sua declaração de AndroidDriver<MobileElement> por EnhancedAndroidDriver<MobileElement> ou IOSDriver<MobileElement> por EnhancedIOSDriver<MobileElement>

    private static EnhancedAndroidDriver<MobileElement> driver;

Etapa 4 – Atualizar suas instanciações de driver

Substitua a maneira como você cria uma instância do driver, de modo que as linhas na forma de:

    driver = new AndroidDriver<MobileElement>(url, capabilities);

... são alterados para:

    driver = Factory.createAndroidDriver(url, capabilities);

O uso desses drivers ainda permitirá que você execute seus testes localmente sem modificações adicionais, mas permite que você "rotule" as etapas de teste em sua execução de teste usando driver.label("text"). O texto e uma captura de tela do dispositivo estarão visíveis no relatório de teste no App Center.

É recomendável chamar driver.label no @After método , que usa uma captura de tela do estado final do aplicativo. Um método de exemplo @After para um teste pode ser semelhante a este código:

    @After
    public void TearDown(){
        driver.label("Stopping App");
        driver.quit();
    }

3. Carregar no Teste do App Center

Etapas para carregar um teste:

  1. Gere um comando de upload de teste do App Center usando as instruções em iniciar uma execução de teste.

  2. Empacote suas classes de teste e todas as dependências na target/upload pasta :

    mvn -DskipTests -P prepare-for-upload package
    
  3. Execute o comando upload:

    appcenter test run appium --app "APP_ID" --devices "DEVICE_SET_ID" --app-path PATH_TO_FILE.apk  --test-series "main" --locale "en_US" --build-dir target/upload
    

4. Solução de problemas de desempenho

Os testes em dispositivos no App Center serão executados um pouco mais lentos do que em um dispositivo local. Normalmente, a execução mais lenta é superada por ter mais dispositivos disponíveis, permitindo execuções de teste paralelas.

Há três main fontes de execuções de teste mais lentas: re-assinatura, reinstalação e tarefas de rede.

Assinar novamente (no iOS)

Antes de ser instalado no dispositivo iOS, seu aplicativo passa por um processo chamado re-assinatura. Esse processo é necessário para fazer com que o perfil de provisionamento corresponda ao dispositivo na nuvem. A recontratação leva algum tempo, normalmente cerca de 1 a 2 minutos. Raramente, a reassinação também causa degradação do desempenho porque os aplicativos reassinados são armazenados em cache. O processo demorado será executado apenas uma vez por binário.

Se a configuração de Entrega Contínua atualizar a versão do IPA antes de compilar e testar, o binário será diferente para cada teste e a penalidade de reassinagem ocorrerá com mais frequência.

Reinstalação

Em uma nuvem de dispositivo compartilhado, é importante garantir que os dispositivos sejam limpos entre cada teste. O próximo cliente que usa o dispositivo pode ser alguém de outra organização. No Teste do App Center, o aplicativo é desinstalado automaticamente após a conclusão da execução do teste.

É possível omitir MobileCapabilityType.FULL_RESET e definir MobileCapabilityType.NO_RESET como true para acelerar a execução do teste. Consulte Redefinir Estratégias para obter detalhes.

Tarefas de rede

As tarefas de rede local são mais rápidas porque o servidor está mais próximo e mais dedicado ao host remoto.