httprunner3.x--调试、环境变量、XML格式断言

2022-07-28,,,,

主要讲解内容有三部分:

调试环境变量、XML格式断言

1.添加调试信息

在调试代码时,引入loguru打印日志,因为看了httprunner源码发现作者使用loguru.logger进行日志打印,

所以可在debugtalk.py中沿用此模块来进行日志打印

from loguru import logger

使用print未必会打印,但是使用logger.info会将信息打印到命令行中,格式为: logger.info()

2.环境变量使用

将系统级别的信息设置在环境变量中,可供全部用例使用

命名格式:

key=value 

key:value

调用格式:

${ENV(key)}

针对环境变量为列表信息的可以先设置为字符串,再进行字符串转列表操作

例如服务器连接(ip|port|user|pwd):192.168.xxx.xxx|22|admin|admin

代码实现时,将字符串按“|”来进行切割,将结果保存在列表中。

def load_file_to_service(serviceInfo, local_path, remote_path):
    """
    :param serviceInfo: 服务器信息格式:ip|port|user|pwd
    :param local_path: 本地路径
    :param remote_path: 远程路径
    :return:
    """
    info = serviceInfo.split("|")
    t = paramiko.Transport(info[0], int(info[1]))
    t.connect(username=info[2], password=info[3])
    sftp = paramiko.SFTPClient.from_transport(t)
    sftp.put(local_path, remote_path)  # 上传文件到远程机
    sftp.close()

3.xml报文断言实现

通过实践,我提供两种方案

方案一:将xml报文内容作为整体( 定义变量:xmlinfo <BatchNotifyRsp><ResultCode>0</ResultCode><ResultDec></ResultDec></BatchNotifyRsp>),进行断言操作

config:
    name: "batch user order sync interface"
    base_url: ${ENV(49_HOST)}
    verify: False
    variables:
        localpath: "D:\\work\\wy_only\\CtIntfDemo\\data\\update.txt"
        remotepath: "/iot/Filesync/User_20201027150556_7169060048412345.txt"
        49serv: ${ENV(49_SERV)}
        oracle1: ${ENV(oracle11)}
        xmlinfo: '<BatchNotifyRsp><ResultCode>0</ResultCode><ResultDec></ResultDec></BatchNotifyRsp>'

断言:

    variables:
        file_path: "data\\batchOrderSync.xml"
        m_encoder: ${get_file_std($file_path)}
        retbody: ${str_bytes($xmlinfo)} # 将str格式转化为bytes格式
    request:
        method: POST
        url: /Sync/BatchOperatorNotify/User
        headers:
            Content-Type: application/xml
        data: $m_encoder
    validate:
        - eq: ["status_code", 200]
        # - eq: [body.BatchNotifyRsp.ResultCode, "0"]
        - eq: [body, $retbody]   #直接断言返回xml整体

方法:

def str_bytes(str):
    """
    :param str:字符串
    :return:bytes类型
    """
    return bytes(str, encoding="utf8")

方案二:将xml报文内容转为json格式,再将返回结果赋值为转化后的json,最后进行json格式断言。

因为teardown_hooks机制,会在断言之前执行。所以才有第二种方案。

teardown_hooks:
    - ${teardown_hook_xml_json($response)}

断言:

validate:
    - eq: ["status_code", 200]
    - eq: [body.BatchNotifyRsp.ResultCode, "0"]
    #- eq: [body, $retbody]   #直接断言返回xml整体

方法:

def xml_to_json(xml_str):
    # parse是的xml解析器
    xml_parse = xmltodict.parse(xml_str)
    # json库dumps()是将dict转化成json格式,loads()是将json转化成dict格式。
    # dumps()方法的ident=1,格式化json
    json_str = json.dumps(xml_parse, indent=1)
    return json_str


def teardown_hook_xml_json(response):
    """
    将xml报文内容转化为json格式内容,并将返回内容替换成json格式
    :param response: 返回报文对象
    """
    jsoninfo = xml_to_json(response.body)
    response.body = json.loads(jsoninfo)

本文地址:https://blog.csdn.net/wangying202/article/details/109636132

《httprunner3.x--调试、环境变量、XML格式断言.doc》

下载本文的Word格式文档,以方便收藏与打印。