python-3.x – 在RobotFramework中截断Post Request的日志记录

我正在使用机器人框架的Requests库将文件上传到服务器.文件RequestsKeywords.py有一行

    logger.info('Post Request using : alias=%s, uri=%s, data=%s, headers=%s, files=%s, allow_redirects=%s '
                % (alias, uri, dataStr, headers, files, redir))

这会在我的日志文件中打印出请求中的上传文件的全部内容.现在我可以通过更改日志级别来删除此日志,但是,我的目标是能够查看日志但只是将其截断为80个字符,因此我不会浏览十六进制值的行.知道如何做到这一点?

最佳答案 解决方案是创建一个包装器方法,该方法将临时禁用日志记录,并在完成后启用它.

流程是 – 获取RequestsLibrary的实例,使用参数“ERROR”调用RF的Set Log Level(因此,如果需要,至少会出现错误),调用原始关键字,将日志级别设置回原来的状态,然后返回结果.

这是它在python中的样子:

from robot.libraries.BuiltIn import BuiltIn


def post_request_no_log(*args, **kwargs):
    req_lib = BuiltIn().get_library_instance('RequestsLibrary')
    current_level = BuiltIn().set_log_level('ERROR')
    try:
        result = req_lib.post_request(*args, **kwargs)
    except Exception as ex:
        raise ex
    finally:
        BuiltIn().set_log_level(current_level)

    return result

同样,在robotframework语法中:

Post Request With No Logging
    [Documentation]     Runs RequestsLibrary's Post Request, with its logging surpressed
    [Arguments]     @{args}     &{kwargs}
    ${current level}=       Set Log Level   ERROR
    ${result}=      Post Request    @{args}     &{kwargs}

    [Return]    ${result}
    [Teardown]      Set Log Level   ${current level}

python的版本速度要快几毫秒 – 不需要解析&匹配RF语法中的文本,在大量使用时可能会加起来.

点赞