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

主要讲解内容有三部分:

调试、环境变量、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)
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值