Domanda

Se dici che ho un test di 100 test da eseguire in quale caso di prova n. 24, 38 e 99 sono interdipendenti.Quindi è possibile che mentre il 99 ° test è stato eseguito, scopri lo stato di un test custodia eseguito in precedenza (ad esempio il 24 ° o 38 ° caso di test)? Nel mio caso, il 99 ° caso di prova dipende dallo stato del 38 ° e dal 24 ° caso di prova e quindi, se il 24 ° o il 38 ° fallisce, vorrei che il 99 ° test caso non venga eseguito affatto e quindi salvarmi moltodi tempo. Si prega di spiegare un qualche esempio se possibile.Grazie in anticipo!

È stato utile?

Soluzione

Una volta che il robot inizia a funzionare, non c'è modo di saltare un test in base a qualche condizione. Penso che questa sia una delle debolezze del robot, ma i progettisti davvero non mi sembra come la nozione di test saltati . Inoltre, non c'è modo integrato per un test per dipendere da un altro. A La richiesta di funzionalità per questa caratteristica è stata rifiutata .

Tuttavia, il robot è molto estensibile e una funzione introdotta nella versione 2.8.5 semplifica la scrittura di una parola chiave che fallirà se un altro test è fallito. Questa funzione è la capacità di Biblioteca per fungere da ascoltatore . Con questo, una libreria può tenere traccia dello stato Pass / Fail di ciascun test. Con quella conoscenza, è possibile creare una parola chiave che non riesce immediatamente se qualche altro test fallisce.

L'idea di base è, cache Lo stato del passaggio / fallito come ogni test termina (tramite il metodo speciale _end_test). Quindi, utilizzare questo valore per determinare se fallire immediatamente o meno.

Ecco un esempio di come usare una parola chiave:

*** 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
.

Ecco la definizione della 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"]
.

Altri suggerimenti

Per risolvere questo problema sto usando qualcosa del genere:

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

Quindi forse questo sarà utilizzabile anche per te.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top