Pergunta

Digamos que tenho 100 casos de teste para executar, nos quais os casos de teste 24, 38 e 99 são interdependentes.Então é possível que, enquanto o 99º caso de teste estiver sendo executado, você descubra o status de um caso de teste executado anteriormente (digamos, o 24º ou o 38º caso de teste)?No meu caso, o 99º caso de teste depende do status do 38º e do 24º caso de teste e, portanto, se o 24º ou o 38º falhar, eu gostaria que o 99º caso de teste NÃO fosse executado e, assim, me poupasse muito de tempo.Por favor, explique com algum exemplo, se possível.Desde já, obrigado!

Foi útil?

Solução

Depois que o robô começa a funcionar, não há como pular um teste com base em alguma condição.Acho que este é um dos pontos fracos do robô, mas os designers realmente não gosto da noção de testes ignorados.Além disso, não existe uma maneira integrada de um teste depender de outro.A a solicitação de recurso para esse mesmo recurso foi recusada.

No entanto, o robô é muito extensível e um recurso introduzido na versão 2.8.5 torna mais fácil escrever uma palavra-chave que falhará se outro teste falhar. biblioteca para atuar como ouvinte.Com isso, uma biblioteca pode acompanhar o status de aprovação/reprovação de cada teste.Com esse conhecimento, você pode criar uma palavra-chave que falhe imediatamente se algum outro teste falhar.

A ideia básica é armazenar em cache o status de aprovação/reprovação à medida que cada teste termina (por meio do especial _end_test método).Em seguida, use esse valor para determinar se falhará imediatamente ou não.

Aqui está um exemplo de como usar essa palavra-chave:

*** Settings ***
| Library | /path/to/DependencyLibrary.py

*** Test Cases ***
| Example of a failing test
| | fail | this test has failed

| Example of a dependent test
| | [Setup] | Require test case | Example of a failing test
| | log | hello, world

Aqui está a definição da biblioteca:

from robot.libraries.BuiltIn import BuiltIn

class DependencyLibrary(object):
    ROBOT_LISTENER_API_VERSION = 2
    ROBOT_LIBRARY_SCOPE = "GLOBAL"

    def __init__(self):
        self.ROBOT_LIBRARY_LISTENER = self
        self.test_status = {}

    def require_test_case(self, name):
        key = name.lower()
        if (key not in self.test_status):
            BuiltIn().fail("required test case can't be found: '%s'" % name)

        if (self.test_status[key] != "PASS"):
            BuiltIn().fail("required test case failed: '%s'" % name)

        return True

    def _end_test(self, name, attrs):
        self.test_status[name.lower()] = attrs["status"]

Outras dicas

Para resolver esse problema estou usando algo assim:

Run Keyword if  '${PREV TEST STATUS}'=='PASSED'  myKeyword

então talvez isso também possa ser usado para você.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top