多协议封装应用场景
- 问题:
- 响应值不统一
- json
- xml
- 断言比较困难
- 响应值不统一
解决方案:获得的响应信息全部转换为结构化的数据进行处理
解决方案
participant 请求 as req
participant 响应 as res
participant xml_响应 as xml_res
participant 其他格式的响应 as json_res
scale 800
req -> res: 发起请求获取响应
res -> xml_res: 获得xml响应
res -> json_res: 获得其他响应
xml_res -> 断言: 使用xml断言方式断言
json_res -> 断言: 使用其他断言方式断言
participant 请求 as req
participant 响应 as res
participant xml_响应 as xml_res
participant 其他格式响应 as json_res
scale 800
req -> res: 发起请求获取响应
res -> xml_res: 获得xml响应
res -> json_res: 获得其他格式响应
xml_res -> json: 转换成json格式
json_res -> json: 转换成json格式
json -> 断言: 完成断言
实战演示
实战目标: 对响应值做二次封装,可以使用统一提取方式完成断言
xml 转换 dict(Python)
- 环境准备: pip install xmltodict
- 依赖包版本: 0.13
import json
import xmltodict
import requests
def test_xml_res():
"""
xml转换为json
:return:
"""
res = requests.get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss")
dict_res = xmltodict.parse(res.text)
多协议封装(Python)
def response_to_dict(response: Response):
"""
获取 Response对象,将多种响应格式统一转换为dict
:param response:
:return:
"""
res_text = response.text
if res_text.startswith("<?xml"):
final_res = xmltodict.parse(res_text)
else:
final_res = response.json()
return final_res
# 测试响应是否可以转换为dict
def test_response_to_dict():
"""
xml转换为json
:return:
"""
# res = requests.get("https://www.nasa.gov/rss/dyn/lg_image_of_the_day.rss")
res = requests.get("https://httpbin.ceshiren.com/get")
r = response_to_dict(res)
assert isinstance(r, dict)