Fork us

Configurando Suíte de Testes

Nós já falamos sobre a configuração de contextos múltiplos para uma única suíte de testes em um capítulo anterior. Agora é a hora de falarmos sobre suíte de testes mesmo. Uma suíte de teste representa um grupo de funcionalidades concretas juntas com a informação de como as testar.

Com suítes você pode configurar o Behat para testar diferentes tipos de funcionalidades utilizando diferentes tipos de contextos e fazendo-o em uma única execução. Suítes de Testes são realmente poderosas e o behat.yml faz delas muito mais poderosas:

# behat.yml

default:
    suites:
        principal_features:
            paths:    [ %paths.base%/features/principal ]
            contexts: [ PrincipalContext ]
        usario_features:
            paths:    [ %paths.base%/features/web ]
            filters:  { role: usuario }
            contexts: [ UsuarioContext ]
        administrador_features:
            paths:    [ %paths.base%/features/web ]
            filters:  { role: administrador }
            contexts: [ AdministradorContext ]

Caminhos de Suíte

Uma das configurações mais óbvias das suítes é a configuração de caminhos:

# behat.yml

default:
    suites:
        principal_features:
            paths:
                - %paths.base%/features
                - %paths.base%/test/features
                - %paths.base%/vendor/.../features

Como você pode imaginar, esta opção diz ao Behat onde é para buscar as funcionalidades de teste. Você poderia, por exemplo, dizer ao Behat para procurar no arquivo features/web por funcionalidades e testá-los com WebContext:

# behat.yml

default:
    suites:
        web_features:
            paths:    [ %paths.base%/features/web ]
            contexts: [ WebContext ]

Você então pode precisar também descrever alguma funcionalidade para uma API-específica em features/api e testá-las com um ApiContext. Fácil:

# behat.yml

default:
    suites:
        web_features:
            paths:    [ %paths.base%/features/web ]
            contexts: [ WebContext ]
        api_features:
            paths:    [ %paths.base%/features/api ]
            contexts: [ ApiContext ]

Isto fará com que o Behat:

  1. Encontre todas as funcionalidades em features/web e testá-las usando sua WebContext.
  2. Encontre todas as funcionalidades em features/api e testá-las usando sua ApiContext.

Note

%paths.base% é uma variável especial em behat.yml que se refere ao arquivo em que o behat.yml está armazenado.

As suítes Path-Based são um fácil modo de testar aplicações altamente modulares onde as funcionalidades são entregues por componentes altamente desacoplados. Com suítes você pode testar todos eles juntos.

Filtros de Suíte

Além de ser capaz de executar funcionalidades de diretórios diferentes, nós podemos executar cenários do mesmo diretório, mas filtrado por critério específico. O analisador do Gherkin vem empacotado com uma coleção de filtros legais tais como filtros de tags e nome. Você pode utilizar estes filtros ao executar funcionalidades com uma tag (ou nome) específica em contextos específicos:

# behat.yml

default:
    suites:
        web_features:
            paths:    [ %paths.base%/features ]
            contexts: [ WebContext ]
            filters:
                tags: @web
        api_features:
            paths:    [ %paths.base%/features ]
            contexts: [ ApiContext ]
            filters:
                tags: @api

Esta configuração irá dizer ao Behat para executar funcionalidades e cenários com a tag @web em WebContext e funcionalidades e cenários com a tag @api em ApiContext. Mesmo se todos eles estão armazenados no mesmo arquivo. Achou isso legal? Isso ficará ainda mais, por que o Gherkin 4+ (usado no Behat 3+) trouxe um filtro muito especial role. Que significa, que você agora pode ter uma boa suíte baseada em ator:

# behat.yml

default:
    suites:
        usuario_features:
            paths:    [ %paths.base%/features ]
            contexts: [ UsuarioContext ]
            filters:
                role: usuario
        administrador_features:
            paths:    [ %paths.base%/features ]
            contexts: [ AdministradorContext ]
            filters:
                role: administrador

Uma Função filtro olha para o bloco da descrição da funcionalidade:

Funcionalidade: Registrando usuários
  A fim de ajudar mais pessoas a utilizarem nosso sistema
  Como um administrador
  Eu preciso ser capaz de registrar mais usuários

Ele procura por um padrão Como um... e supõe um ator a partir dele. Ele então filtra funcionalidades que não tenham um ator no conjunto. No caso do nosso exemplo, isso basicamente significa que a funcionalidade descrita a partir da perspectiva do ator usuário irá ser testada em UsarioContext e funcionalidades descritas a partir da perspectiva do ator administrador serão testadas em AdministradorContext. mesmo se eles estiverem no mesmo arquivo.

Contextos de Suítes

São capazes de especificar um conjunto de funcionalidades com um conjunto de contextos para estas funcionalidades dentro da suíte tem um efeito colateral muito interessante. Você pode especificar as mesmas funcionalidades em duas suítes diferentes sendo testadas por contextos diferentes ou o mesmo contexto configurado diferentemente. Isto basicamente significa que você pode utilizar o mesmo subconjunto de funcionalidades para desenvolver diferentes camadas da sua aplicação com o Behat:

# behat.yml

default:
    suites:
        domain_features:
            paths:    [ %paths.base%/features ]
            contexts: [ DomainContext ]
        web_features:
            paths:    [ %paths.base%/features ]
            contexts: [ WebContext ]
            filters:
                tags: @web

Neste caso, o Behat irá primeiramente executar todas as funcionalidades de features/ do arquivo DomainContext e em seguida somente aqueles com a tag @web em WebContext.

Executando Suítes

Por padrão, quando você executa o Behat ele irá executar todas as suítes registradas uma a uma. Se ao invés disso você quiser executar uma única suíte, utilize a opção --suite:

$ vendor/bin/behat --suite=web_features

Inicialização de Suíte

Suítes são a principal parte do Behat. Qualquer funcionalidade do Behat sabe sobre elas e pode lhe dar uma mão com elas. Por exemplo, se você definir suas suítes em behat.yml antes de executar --init, ele realmente irá criar os arquivos e suítes que você configurou, ao invés do padrão.