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()
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
下一篇: apb协议的一些特点