0

Ich habe mehrere Testklassen und eine Basistest-Klasse in Python. Testklassen erbt von der Basistestklasse.Wie man die Konfigurationsdatei als eine Eingabe liest, wenn der Python-Code von der Befehlszeile aus ausgeführt wird

Ich möchte die Testklasse von der Kommandozeile ausführen und es benötigt einige Eingabeparameter, diese Eingabeparameter sollten in einer Konfigurationsdatei gespeichert werden. Diese Konfigurationsdatei kann als Eingabe von der Befehlszeile bereitgestellt werden.

Wie kann ich dies erreichen, um es über die Befehlszeile bereitzustellen und dann die Konfigurationsdatei analysieren. Ich muss in der Basistest-Klasse parsen, da dies für alle Testklassen verwendet wird.

Test-Klasse: Sie können den Inhalt ignorieren, wenn sie, wie es nur eine Beispielklasse

from selenium import webdriver 
import unittest 

class TestCase(): 

    def setUp(self): 
     super().setUp() 

    def test(self): 
     baseUrl = "https://www.google.com" 
     driver = webdriver.Firefox() 
     driver.get(baseUrl) 
     elementByXpath = driver.find_element_by_xpath("//input[@id='name']") 

     if elementByXpath is not None: 
      print("We found an element by XPATH") 

if __name__ == '__main__': 
    unittest.main(verbosity=2) 
    result = unittest.TestResult() 

BaseTestCase ist nicht viel Sinn machen:

class BaseTestCase(): 

    def __init__(self): 
     pass 

    def setUp(self): 
     # In the setup() or __init__(), config file should be parsed 
     self.login.login("admin", "admin") 

    def tearDown(self): 
     self.log.info("Driver quit, session closed") 

Die Datei, die aus laufen wird Die Befehlszeile wird die Testklasse sein. Etwas wie dieses: python testcase.py --configfile

Ich bin ziemlich neu zu Python, jede Hilfe in diesem wird sehr geschätzt.

Ich habe früher mit Java und TestNG gearbeitet, wo es wirklich einfach ist. Wir können beliebige Konfigurationen in der TestNG XML-Datei selbst bereitstellen.

Ich benutze Unittest von Python, jeder Vorschlag, welcher Rahmen besser als Unittest sein kann, wird auch toll sein.

Dies ist für ein GUI Test Framework und ich muss Tests auf verschiedenen Browsern und Plattform ausführen.

+0

Verwenden Sie eine ‚ConfigParser‘ eine Konfigurationsdatei zu analysieren.Verwenden Sie für mehrere Browser und Plattformen entweder BrowserStack oder weisen Sie Workern manuell eine Jenkins-Instanz zu. – Abhinav

+0

Wenn Sie mehr Informationen über das, was Sie analysieren möchten, bereitstellen, würden Sie sicher die richtige Antwort erhalten. – Abhinav

+0

@ a_bhi_9 Ich muss die Werte in der Konfigurationsdatei analysieren und sie dann zur Basis-Testklasse liefern, die Werte wären Browsername, Betriebssystemname oder alles, was ich nur in der Basis-Testklasse Browser-Stack und Jenkins verwenden möchte kann nichts machen, wenn der Code nicht weiß, welchen Browser er aufrufen soll. –

Antwort

0

Verwenden Sie eine Hierarchie wie unten.

` 
| 
|- TestModule 
     | 
     |- main.py (your entry point to the test) 
     |- conf.ini 
     |- parse_config.py 

Hier, Sie in der parse_config.py Sie rufen Sie Ihren SafeConfigParser auf dem conf.ini. Übergeben Sie den Pfad als Zeichenfolge an den Konfigurationsparser.

Instanziieren Sie die Klasse, die Sie in der Datei parse_config im Setup (oder entweder before_all hook) des Test-Runner vornehmen.

class ParseConfig(object): 
    def __init__(self): 
     self.base_url = None 
     .... 

    def parse_file(self): 
     parser = SafeConfigParser() 
     parser.read("config.ini") 
     self.base_url = parser.get("section", "url") 
     .... 

Hoffnung haben Sie eine ungefähre Vorstellung davon bekommen, was

EDIT

Im In Ihrem main.py

from parse_config import ParseConfig 
... 
... 
ParseConfig().parse_cli() 
ParseConfig().parse_file() 
... 
... 

import argparse 

class ParseConfig(object): 
    def __init__(self): 
     self.base_url = None 
     self.file_name = None 

     self.parse_cli() # This will parse the config file name from CLI 
     self.parse_file() # This will parse the config file whose name you provide 

    def parse_cli(self): 
     parser = argparse.ArgumentParser(description="Parse conf file") 
     parser.add_argument("--conf", "-c", metavar="Conf", help="Config file name") 
     args = parser.parse_args() 
     self.file_name = args.conf 

    def parse_file(self): 
     parser = SafeConfigParser() 
     parser.read(self.file_name) 
     self.base_url = parser.get("section", "url") 
     .... 

getan werden soll

Auf diese Weise können Sie mehrere Konfigurationsdateinamen analysieren lassen.

nun Ihr Skript aufrufen wie

python main.py -c conf.ini 
+0

Ich möchte Konfigurationsdatei von der Befehlszeile bereitstellen (ich erwähnte das). Wenn ich eine Konfigurationsdatei mit definiertem Wert habe, hat es keinen Sinn, eine zu haben. Ich möchte, dass das Framework flexibel ist, so dass es die von mir bereitgestellten Dateien lesen kann. Ich werde viele Testdateien und einen Basistest haben, der alle Einstellungen vornehmen kann. Von wo kann ich die Konfigurationsdatei bereitstellen, damit ich alle Testdateien ausführen kann? Setup sollte nur an einem Ort durchgeführt werden, Basistest. –

+0

Verwenden Sie das gleiche Prinzip, verwenden Sie den ArgumentParser, um den Dateinamen zu analysieren, den Sie über die Befehlszeile übergeben, und verwenden Sie dann den Konfigurations-Parser, um die angegebene Datei zu analysieren. Brauchen Sie etwas Code? – Abhinav

+0

Es wird hilfreich sein, wenn Sie ein Beispiel als Antwort geben können, es wird mir helfen zu verstehen, was Sie versuchen zu erklären –

Verwandte Themen