首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何从命令行将dict传递给Robot Framework变量

如何从命令行将dict传递给Robot Framework变量
EN

Stack Overflow用户
提问于 2018-06-05 03:48:53
回答 2查看 6.1K关注 0票数 0

我尝试使用可选的关键字参数range、domain和timeout从我的RF文件中运行python测试中的main()。如果我在RF文件中对参数进行硬编码,测试就能正常工作,但我希望能够从命令行设置它们。我希望能够运行的RF文件给任何,所有,或没有上面列出的3个参数与类似于robot -v dict_args:range=5_domain=4 -E space=_ run_test.robot的东西。根据文档,“只有标量变量可以使用这种语法设置,并且它们只能获取字符串值”,但是我在这里见过能够为列表(How to pass a list as command line argument in robot framework.?)编写变通方法的人。我还没能在字典上找到任何东西,任何建议/帮助都将不胜感激。

run_test.robot:

代码语言:javascript
复制
*** Settings ***

Library    my_test
Library    Process

*** Test Cases ***
Run RNTester
    Run Program    ${dict-args}


*** Keywords ***
Run Program
    [Arguments]    &{configuration}
    main    &{configuration}

my_test.py:

代码语言:javascript
复制
def main(**kwargs):
    #process args
    if 'range' in kwargs:
        range_ = kwargs['range'].split(':')
        range_ = list(map(int,range_))
        if len(range_) == 1:
            range_.insert(0,0)
        test_count = range_[1] - range_[0]
    else:
        range_ = None
        test_count = 0

    if 'domain' in kwargs:
        domain = kwargs['domain'].split(',')
    else:
        domain = None

    if 'timeout' in kwargs:
        timeout = int(kwargs['timeout'])
    else:
        timeout = 30

    run_test(domain, range_, test_count, timeout)

修复了按照@jil的建议编辑我的代码以写入yaml文件。添加了一个YAMLCreator.py来制作我的RF文件导入的yaml文件。这是我现在所拥有的

run_test.robot:

代码语言:javascript
复制
*** Settings ***

Library    my_test
Variables    ${testname}.yaml

*** Test Cases ***

Run RNTester
    Run Program    &{test_name}


*** Keywords ***
Run Program
    [Arguments]    &{configuration}
    main    &{configuration}

YAMLCreator.py:

代码语言:javascript
复制
import yaml
import sys

def make_dict(**kwargs):

    data = dict()
    for key in kwargs:
        value = kwargs[key]
        data[key] = value
    return data

if __name__ == '__main__':

    args = sys.argv
    test_name = args[1]
    data = make_dict(**dict(arg.split('=') for arg in args[2:]))

    test_name_dict=dict()
    test_name_dict[test_name] = data

    with open(test_name + '.yaml', 'w') as outfile:
        yaml.dump(test_name_dict, outfile, default_flow_style=False)
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50687810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档