欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-03-15 15:13:31
主要讲解内容有三部分:调试、环境变量、XML格式断言1.添加调试信息在调试代码时,引入loguru打印日志,因为看了httprunner源码发现作者使用loguru.logger进行日志打印,所以可在debugtalk.py中沿用此模块来进行日志打印from loguru import logger使用print未必会打印,但是使用logger.info会将信息打印到命令行中,格式为: logger.info()2.环境变量使用将系统级别的信息设置在环境变量中,可供全部用例使用命名格式:...

主要讲解内容有三部分:

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

1.添加调试信息

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

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

from loguru import logger

使用print未必会打印,但是使用logger.info会将信息打印到命令行中,格式为: logger.info()
httprunner3.x--调试、环境变量、XML格式断言

2.环境变量使用

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

命名格式:

key=value 

key:value

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

调用格式:

${ENV(key)}

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

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

例如服务器连接(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

相关标签: python httprunner