配置解析Robotframework

时间:2017-12-06 21:51:00

标签: python robotframework configparser

我有一个使用python和Robotframework脚本混合实现的项目。我的项目Config.ini文件中存储了一堆配置项,如下所示:

[Environment]
Username: username@mail.com
Password: testpassword

[WebUI]
login_url:        http://testsite.net/

Python能够使用ConfigManager对象解释上述变量,如下所示:

class MyConfigManager(ConfigManager):
    """
    Class to hold all config values in form of variables.
    """

def __init__(self):
    super().__init__("dispatch/config.ini")
    self._android = Android(self._config)

@property
def username(self):
    return self._config.get(_env_section, "Username")

@property
def password(self):
    return self._config.get(_env_section, "Password")

config = MyConfigManager()

是否可以将Robotframework中的config.ini导入为变量文件并使用这些值?我正在尝试不为我的机器人脚本提供另一个变量文件。

编辑:

我试图用我的机器人文件做这样的事情:

*** Settings ***
Documentation   WebUI Login Tests
Library         SeleniumLibrary
Resource        common_keywords.robot
Variables       config.ini
# ^ will this work?  
Default Tags    Smoke
Suite Setup     Set Selenium Timeout        15seconds
Suite Teardown  Close Browser

*** Variables ***

${login_button}     class:auth0-lock-submit



*** Test Cases ***
TC001_Login_Test
    [Documentation]     Open login page, login with credentials in arguments.
    Open Browser Confirm Login Page     chrome      ${login_url}
    Provide Input Text          name:email          ${username}
    Provide Input Text          name:password       ${password}
    Find Element And Click      ${login_button}
# the three vars ${login_url},  ${username}, ${password} would be from 
# config.ini but this isnt working. What am I doing wrong? or is not
# possible to do this?  

2 个答案:

答案 0 :(得分:5)

机器人框架变量文件可以是python代码,因为它们是python,你可以以任何你想要的方式创建变量。

您只需要创建一个返回键/值对字典的python函数。每个键都将成为机器人变量。

例如,对于问题中的数据,如果要创建${CONFIG.Environment.username}之类的变量,可以这样做:

import ConfigParser
def get_variables(varname, filename):
    config = ConfigParser.ConfigParser()
    config.read(filename)

    variables = {}
    for section in config.sections():
        for key, value in config.items(section):
            var = "%s.%s.%s" % (varname, section, key)
            variables[var] = value
    return variables

将其保存到名为“ConfigVariables.py”的文件中,并将其放在测试可以找到的位置。然后你可以像这样使用它:

*** Settings ***
Variables  ConfigVariables.py  CONFIG  /tmp/Config.ini

*** Test cases ***
Example
    should be equal  ${CONFIG.Environment.username}  username@mail.com
    should be equal  ${CONFIG.Environment.password}  testpassword
    should be equal  ${CONFIG.WebUI.login_url}       http://testsite.net/

使用函数定义变量在机器人框架用户指南的标题为Variable Files

的部分中进行了描述。

答案 1 :(得分:0)

您仍然可以按以下方式使用config.ini文件:

[Environment]
Username = username@mail.com
Password = testpassword

[WebUI]
login_url =        http://testsite.net/

并且简单地创建一个python文件'MyVariables.py来获取变量,如下所示:

import sys
import os
import ConfigParser


try:
    dir_path = os.path.dirname(os.path.realpath(__file__))
    config_file = os.path.join(dir_path,'config.ini')

    config = ConfigParser.ConfigParser()
    config.read(config_file)

    login_url = config.get('WebUI','login_url')    
    Username = config.get('Environment','Username')
    Password= config.get('Environment','Password')


except (ConfigParser.Error, ConfigParser.NoSectionError, ConfigParser.NoOptionError) as e:
    sys.stderr.write("Error: {0}.\n".format(e))
    sys.exit()

请注意,您已在py文件上定义了与在配置文件上命名的变量相同的变量,该变量指向相应的部分,例如,在python文件中,我们使用配置文件部分“ WebUI”和变量“ login_url”

在机器人文件上,您只需要在设置上设置变量文件,就可以在测试用例上使用已定义的变量:

*** Settings ***
Library                 Selenium2Library
Variables               MyVariables.py


*** Test Cases ***
Testing Variables
    log variables

您的报告将类似于:

  

15:02:41.615信息$ {login_url} = http://testsite.net/
  15:02:41.616 INFO $ {Password} = testpassword
  15:02:41.616信息$ {Username} = username@mail.com