如何使Robot Framework函数接受参数作为字符串而不是默认的unicode类型

时间:2013-12-02 13:12:36

标签: python unicode robotframework configparser

我正在编写一个新的RF库,需要使用字符串参数,因为我使用的(预先存在的)Python库需要字符串,而不是unicode。 当然,在调用仅支持字符串的现有函数之前,我可以将每个unicode转换为字符串。

import ConfigParser

class RFConfigParser:

def get (self,section, option):
    print type (section) #prints unicode
    section = str (section) #works but I dont want to do this
    return self._config.get (section, option) #this pre-existing function expect a string input

问题是我有很多类似的函数,在每个函数中我都要将这个unicode称为字符串转换马戏团。

是否有直接的方法这样做,以便RF功能将直接接受字符串格式

另一个问题是默认的unicode支持Robot Framework功能还是RIDE功能? (我正在使用RIDE,这就是我遇到这个问题的原因)

2 个答案:

答案 0 :(得分:6)

在将这些Unicode字符串传递给库之前,可以使用Evaluate关键字将这些Unicode字符串强制转换为普通字符串。

这样的事情:

lib.py:

def foo(foo):
    print type(foo)

的test.txt

*** Settings ***
Library           lib.py

*** Test Cases ***
demo
    ${bar}    Evaluate    str('bar')
    foo    ${bar}

最佳解决方案取决于具体情况。也许一个解决方案是编写一个关键字,为您执行该转换,然后调用库函数。也许最好的选择仍然是修改你的库以接受Unicode字符串。这取决于。

答案 1 :(得分:0)

如果您使用的是远程库,请注意RobotFramework会检查要通过XmlRpc传输的数据的内容:

def _handle_binary_result(self, result):
    if not self._contains_binary(result):
        return result
    try:
        result = str(result)
    ...

如果数据恰好只包含ASCII,它将传输一个字符串,如果数据不能用ASCII编码,它将传输二进制数据。我不知道你如何强制执行unicode结果类型,并避免来自比较操作的抱怨,例如应该等于关于不同的数据类型:

Argument types are: <type 'str'> <type 'unicode'>

如果在我的远程库中,我会执行以下操作:

return unicode(result, 'utf-8')

对于给定的输入,接收不同类型的结果

return unicode(u'test', 'utf-8')  --> 'test'
return unicode(u'ü', 'utf-8')     --> u'ü'