【问题标题】:Robot Framework : Configuration Profiles机器人框架:配置文件
【发布时间】:2018-03-13 21:33:53
【问题描述】:

我有一个配置文件正在读入我的机器人测试用例。该配置文件包含以下变量:

${DATABASE_IP}                   127.0.0.1
${ORACLE_SYSTEM_ID}              xe
${ORACLE_DATABASE_URL}           jdbc:oracle:thin:@${DATABASE_IP}:1521:${ORACLE_SYSTEM_ID}
${ORACLE_DATABASE_USER}          cooluser
${ORACLE_DATABASE_PASSWORD}      coolpassword
${ORACLE_DATABASE_DRIVER}        oracle.jdbc.driver.OracleDriver

我想做的一件事是更改其中一些属性,具体取决于脚本的执行位置。示例:詹金斯

看这个的简单方法如下:

我有一个名为 database_test.robot 的测试文件。

如果我在本地机器上调用此文件,我想传入一个参数以确保 ${DATABASE_IP} 等于 127.0.0.1 。当 Jenkins 这样做时,我希望该值指向其他地方。

类似的东西已经存在于 maven 中,您可以在运行时指定配置文件。例如: mvn verify -Plocal-config ; mvn verify -Pjenkins-config

我查看了机器人框架文档,但似乎无法实现类似的东西。我看到的换出属性的唯一方法是删除旧的并替换为新的。注意:我有数百个不同的属性,除了 Jenkins 和 local 之外的其他几个环境会采用不同的值。

【问题讨论】:

    标签: robotframework


    【解决方案1】:

    Robot 为您提供了至少三种解决此问题的方法:argument filesvariable filesresource files。在每种情况下,您都可以通过命令行参数指定要使用的环境设置。

    参数文件

    参数文件,顾名思义,就是机器人可以从中读取参数的文件。它们是指定一组命令行参数的便捷方式。

    例如,您可以创建一个“环境”文件夹,其中包含每个环境的参数文件(production.args、staging.args、local.args),并在该文件中设置所有变量的值.

    例如,您可以创建一个名为 local.args 的文件,其内容如下:

    --variable DATABASE_IP:127.0.0.1
    --variable ORACLE_SYSTEM_ID:xe
    --variable ORACLE_DATABASE_URL:jdbc:oracle:thin:@127.0.0.1:1521:xe
    --variable ORACLE_DATABASE_USER:cooluser
    --variable ORACLE_DATABASE_PASSWORD:coolpassword
    --variable ORACLE_DATABASE_DRIVER:oracle.jdbc.driver.OracleDriver
    

    然后,要使用此配置运行,您将使用 -A--argumentfile 选项:

    robot --argumentfile environments/local.args ...
    

    使用参数文件的好处是,当您只需要更改一个值时,您可以在命令行上覆盖单个值:

    robot --argumentfile environments/local.args --variable ORACLE_DATABASE_USER:anotheruser
    

    此外,您还可以使用参数文件指定任何其他命令行参数。例如,如果您总是想忽略 CI 服务器上已知被破坏的测试,您可以包含类似 --exclude known-broken 的内容(其中 known-broken 是您已应用于一个或多个测试的标签)

    参数文件的一个缺点是您不能根据先前变量的值定义变量(即:您不能这样做--variable FOOBAR=${FOO}bar)。我发现这不是什么大问题。

    变量文件

    变量文件以类似的方式工作,但允许您使用 python 定义变量。可变文件的优点是你可以做任何 python 让你做的事情。例如,您可以自动确定本地数据库的 IP,或者根据运行时条件选择性地打开或关闭功能。

    定义变量文件的最简单方法是简单地创建 python 变量,机器人将通过导入文件找到该变量。

    例如,变量的变量文件可能如下所示:

    DATABASE_IP = "127.0.0.1"
    ORACLE_SYSTEM_ID = "xe"
    ORACLE_DATABASE_URL = "      jdbc:oracle:thin:@%s:1521:%s % (DATABASE_IP, ORACLE_SYSTEM_ID)
    ORACLE_DATABASE_USER} = "cooluser"
    ORACLE_DATABASE_PASSWORD} = "coolpassword"
    ORACLE_DATABASE_DRIVER} = "oracle.jdbc.driver.OracleDriver"
    

    资源文件

    与其他两个解决方案非常相似,您可以为每个环境拥有单独的资源文件。由于机器人允许您在套件内的资源文件路径中使用变量,因此您可以使用变量来定义要使用的资源文件。

    例如,您可以像这样导入资源文件:

    # some_tests.robot
    *** Settings ***
    Resource  config/${environment}.robot
    

    然后,您可以像往常一样为每个环境创建一个配置文件(例如:config/local.robot、config/staging.robot 等)。然后,当你运行机器人时,你可以告诉它使用哪个资源文件:

    $ robot --variable environment=local  ...
    

    【讨论】:

      【解决方案2】:

      我尝试了使用资源文件的第三个选项,但上面给出了命令行参数声明:

      $ robot --variable environment=local 
      

      对我不起作用。查看机器人帮助文件后,才知道变量值应该通过:而不是=

      所以我尝试了:

      $ robot --variable environment:local
      

      它对我有用。

      【讨论】:

        【解决方案3】:

        为子目录指定资源路径的正确方法是:

        Resource                ../config/${environment}.robot
        

        如果 config 是子目录。

        【讨论】:

        • 它没有刹车,只是帖子前面的一个错字:资源变量路径需要写为:Resource ../config/${environment}.robot。不是资源配置/${environment}.robot。如果你的根目录中有一个配置目录。
        猜你喜欢
        • 2018-04-25
        • 2016-05-19
        • 2013-02-13
        • 1970-01-01
        • 1970-01-01
        • 2022-09-23
        • 2021-11-23
        • 2016-11-08
        • 2023-03-30
        相关资源
        最近更新 更多