机器人框架:配置文件

时间:2017-10-02 18:51:29

标签: robotframework

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

${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

我希望能够做的一件事是更改其中一些属性,具体取决于脚本的执行位置。示例:jenkins

一种简单的方法,可以说如下:

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

如果我在本地计算机上调用此文件,我想传入一个参数以确保$ {DATABASE_IP}等于127.0.0.1。当詹金斯做到这一点时,我希望将这个值指向其他地方。

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

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

3 个答案:

答案 0 :(得分:4)

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更多测试)

参数文件的一个缺点是,您无法根据先前变量的值定义变量(即:您不能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" )。我没有发现这是一个很大的问题。

变量文件

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

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

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

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

资源文件

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

例如,您可以导入如下资源文件:

$ robot --variable environment=local  ...

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

@font-face {
  font-family: 'FONTNAME';
  src:  url('../FONTNAME.woff') format('woff');

  font-weight: normal;
  font-style: normal;
}

答案 1 :(得分:0)

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

$ robot --variable environment=local 

不是为我工作。在查看了机器人帮助文件之后,我们知道应该通过:而不是=传递变量值。

所以我尝试了:

$ robot --variable environment:local

对我有用。

答案 2 :(得分:0)

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

var test = (from t in db.SL24ToolLists
    join l in db.SL24ToolLocations on t.ToolNumber equals l.ToolNumber

    orderby t.ToolNumber

    select new { ToolNumber = t.ToolNumber, ToolLocation = l.Location }
);

如果 config 是一个子目录。