等峰也等你

博客园 首页 新随笔 联系 订阅 管理

多协议封装应用场景

 
  • 问题:
    • 响应值不统一
      • 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)
posted on 2024-01-17 18:48  等峰也等你  阅读(13)  评论(0编辑  收藏  举报