【问题标题】:How to read the config file as an input when running the python code from command line从命令行运行python代码时如何读取配置文件作为输入
【发布时间】:2016-05-30 22:22:58
【问题描述】:

我在 python 中有多个测试类和一个 basetest 类。 测试类继承自 basetest 类。

我想从命令行运行测试类,它需要一些输入参数,这些输入参数应该存储在配置文件中。该配置文件可以作为命令行的输入提供。

我怎样才能做到这一点,从命令行提供它,然后解析配置文件。我需要在 basetest 类中进行解析,因为这将用于所有测试类。

测试类:如果内容没有多大意义,您可以忽略它们,因为它只是一个示例类

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()

基本测试用例:

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")

将从命令行运行的文件将是测试类。 像这样的东西: python testcase.py --configfile

我对 python 很陌生,非常感谢任何帮助。

我曾经使用 Java 和 TestNG,这真的很容易。我们可以在 TestNG xml 文件本身中提供任何配置。

我正在使用 python 中的 unittest,任何关于哪个框架可以比 unittest 更好的建议也很好。

这是一个 GUI 测试框架,我需要在不同的浏览器和平台上运行测试。

【问题讨论】:

  • 使用“ConfigParser”解析配置文件。对于多个浏览器和平台,请尝试使用 BrowserStack 之类的工具或在 Jenkins 实例上手动分配工作人员。
  • 提供更多关于您要解析的内容的信息肯定会帮助您获得正确的响应。
  • @a_bhi_9 我需要解析配置文件中的值,然后将它们提供给基础测试类,这些值可以是浏览器名称、操作系统名称,甚至是我只想在基础中使用的任何内容如果代码不知道要调出哪个浏览器,测试类 Browser stack 和 Jenkins 什么都做不了。
  • 用你需要的所有配置制作一个“.cfg”或“.ini”文件。然后使用“ConfigParser”库来解析它。我认为您应该参考 Python 文档尝试编写一些解析器代码,如果它不起作用,请寻求更多帮助。
  • @a_bhi_9,对不起,我认为您没有理解这个问题。我知道ini文件和配置解析器。我已经写过一篇了。我想问的是,我在哪里读取 .ini 文件中的值。我需要使用 python unittest __main__() 方法运行测试。将读取哪个位置的 .ini 文件以及如何从命令行提供该文件。那么如何将这些值传递给 BaseTest,因为我需要 BaseTest 中的值。

标签: python selenium selenium-webdriver pytest python-unittest


【解决方案1】:

使用如下层次结构。

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

现在在这里,您在parse_config.py 上拨打您的SafeConfigParser conf.ini。将其路径作为字符串传递给配置解析器。

在测试运行器的设置(或 before_all 挂钩)中实例化您在 parse_config 文件中创建的类。

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")
        ....

希望您大致了解要做什么

编辑

parse_conf.py

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")
        ....

在你的main.py

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

这样你可以解析多个配置文件名。

现在调用你的脚本,

python main.py -c conf.ini

【讨论】:

  • 我想从命令行提供配置文件(我提到过这个)。如果我有一个具有定义值的配置文件,那么没有任何意义。我希望框架灵活,以便它可以读取我从外部提供的文件。我将有许多测试文件和一个可以完成所有设置的基本测试。从哪里可以提供配置文件,以便我可以运行所有测试文件?设置只能在一个地方完成,basetest。
  • 使用相同的原理,使用 ArgumentParser 解析您通过命令行传递的文件名,然后使用 config parser 解析给定的文件。需要一些代码吗?
  • 如果你能举一些例子作为答案会很有帮助,它将帮助我理解你想要解释的内容
猜你喜欢
  • 1970-01-01
  • 2010-10-29
  • 2021-07-19
  • 1970-01-01
  • 1970-01-01
  • 2014-03-08
  • 2016-05-09
  • 1970-01-01
  • 2013-07-06
相关资源
最近更新 更多