2017-05-18 15 views
0

Ich bin neu in PYTEST Framework und ich frage mich, ob es eine Standard-Ansatz meine Pytests Parameter von anderen Skript erhalten. Ich denke, die am weitesten verbreitete Praxis ist @pytest.fixture zu schreiben, die wie folgt aussieht:Python Pytest - Empfangen von Testparametern von außerhalb

@pytest.fixture 
def param(request): 
device = request.config.getoption("--parameter") 
if parameter == 'A': 
    return value_a 
else: 
    return default_value 

Und läuft meinen Test mit dem Befehl py.test --parameter=value_a

Aber wenn mein Test muss viele Parameter (wird dieser Befehl von einem anderen Skript ausgeführt), sagen wir zum Beispiel 10, das wäre ein langer Befehl. Also frage ich, was ist der Standard-Ansatz in einer solchen Situation - stelle ich eine Art XML-Datei oder ein serialisiertes Wörterbuch mit Parametern und meinem Gerät zur Verfügung, um die Parameter von ihnen zu übernehmen.

Auch wie mein anderes Skript wird wissen, welche Art von Parametern zu meinem Test zur Verfügung stellen - sollte test_parameters Konfigurationsdatei oder einige fest codierte Daten in meiner conftest.py, die die Informationen für die Parameter enthält, oder sollte ich get verwenden sie durch Lesen der Signatur der Tests mit from inspect import signature.

EDITED

Hier ist eine Probe meiner Tests

class TestH5Client: 
    # runs before everything else in the class 
    def setup_class(cls, ip="11.111.111.111", 
        browserType="Chrome", 
        port="4444", 
        client_url="https://somelink.com/", 
        username="some_username", 
        hpassword="some_pass"): 

     cls.driver = get_remote_webdriver(ip, port, browserType) 
     cls.driver.implicitly_wait(60) 
     cls.client_url = client_url 
     cls.username = username 
     cls.password = password 

    def teardown_class(cls): 
     cls.driver.quit() 

    def test_login_logout(self): 
     # opening web_client 
     self.driver.set_page_load_timeout(60) 
     self.driver.get(self.h5_client_url) 

     # opening web_client log-in window 
     self.driver.set_page_load_timeout(60) 
     self.driver.find_element_by_css_selector("div.gettingStarted p:nth-child(4) a:nth-child(1)").click() 

     # log in into the client 
     self.driver.find_element_by_id("username").send_keys(self.h5_username) 
     self.driver.find_element_by_id("password").send_keys(self.h5_password) 
     self.driver.set_page_load_timeout(60) 
     self.driver.find_element_by_id("submit").click() 

     # clicking on the app_menu so the logout link appears 
     self.driver.implicitly_wait(60) 
     self.driver.find_element_by_id("action-userMenu").click() 

     # clicking on the logout link 
     self.driver.implicitly_wait(60) 
     self.driver.find_element_by_css_selector("#vui-actions-menu li:nth-child(3)").click() 

     assert "Login" in self.driver.title 

    def test_open_welcome_page(self): 
     """fast selenium test for local testing""" 
     self.driver.set_page_load_timeout(20) 
     self.driver.get(self.h5_client_url) 
     assert "Welcome" in self.driver.title 

    def test_selenium_fail(self): 
     """quick test of selenium failure for local testing""" 
     self.driver.set_page_load_timeout(20) 
     self.driver.get(self.h5_client_url) 
     assert "NotInHere" in self.driver.title 

ich alle diese Parameter müssen von einem externen Python-Framework bietet Prüfparameter zur Verfügung gestellt werden. Und ich muss wissen, wie dieses Framework den Namen der Parameter erhalten soll und wie man diese Tests mit diesen Parametern ausführt.

+0

Bitte geben Sie ein konkretes Beispiel für das Problem an, mit dem Sie konfrontiert werden – e4c5

+0

Sind die Parameter wirklich variabel oder sind sie wirklich nur eine Reihe von Konfigurationen, wie ein Dev-Server, ein Server, ein Prod-Server? –

+0

@Austin Hastings Sie werden jede Woche geändert :) –

Antwort

1

Angesichts Ihrer Antworten in den Kommentaren ändern sich die Daten wöchentlich.

Also würde ich vorschlagen, in einem einzigen Parameter, den Pfad zu einer Datei übergeben, die den Rest Ihrer Informationen angibt.

Verwenden Sie den Parsing-Mechanismus, den Sie bereits anderweitig verwenden - XML, Json, was auch immer - oder verwenden Sie etwas Einfaches wie einen Konfigurationsdatei-Reader.

Erstellen Sie ein Fixture mit Session-Bereich (wie this) und geben Sie es entweder einige sinnvolle Standardwerte, oder es wird heftig fehlgeschlagen, wenn es keine gültige Parameterdatei erhält.