har文件转为Request数据

回顾

这一节我们就来聊聊har文件转pity用例的上半部分:har转RequestInfo

Har文件分析

har文件,相信经常用Chrome浏览器的都知道,浏览器录制的数据可以转换为har文件,来看下面一张图:

在这里插入图片描述

上面是我录制了掘金平台的相关接口,我们在任意处鼠标右键,或者点击这个下载按钮,都能够把这些请求保存为har文件。
在这里插入图片描述

我们知道写用例是一件很麻烦的事情,假设一个链路有5个接口,假设你在测试一个用户领券买东西的流程,你可能会经历以下步骤:

1.用户登录
2.用户去领券中心领取100-2的优惠券
3.用户搜索符合优惠券的商品,并将它加入购物车
4.用户去购物车结算,生成订单(并使用此优惠券)
5.用户支付

可以看到,这个链路其实就不太短,如果我们在不熟悉这几个接口参数的情况下,我们要对照接口文档,去造对应的参数,甚至可能造了一会发现case还是没跑通。

那如果以上场景,你在浏览器操作的时候,就能帮你汇总这些接口,并抓取下来,你写用例的时候只需要把固定的参数比如账号,商品id等参数化,那会不会非常友好,高效,而且链路肯定是通的,因为你在浏览器已经完成过这样的流程了。

所以这就是为什么,我们要支持用例录制的原因,因为雀氏方便,雀氏蟀啊!

好像有点扯远了,我们继续聊这个har的事情。总之har就是chrome tools帮我们录制好我们发出的请求,剩下的筛选,生成用例就得靠我们自己了。
来看看har文件里面的内容吧:
在这里插入图片描述

可以看到,他其实是一个JSON数据,所以我们用JSON库解析它就好了。

XHR和Fetch

虽然js/css/img等等请求也算http请求,但一般来说与服务端交互的还得是xhr和fetch。fetch可以理解为二代xhr(ajax)。
所以我们只需要获取这2种类型的数据即可。

而且它把request和response的数据都分开了,我们可以很方便地读取。
编写Convetor

app/core/request/convertor.py

author = “woody”

from typing import List

from app.core.request.request import RequestInfo

“”"
request转换器,支持har到
“”"

class Convertor(object):

@staticmethod
def convert(file, regex: str = None) -> List[RequestInfo]:
    raise NotImplementedError

复制代码
内容很简单,并且支持正则,目的是为了过滤不要的url,或者说是为了筛选出想要的接口。
当然这都是抽象接口,接着我们来写具体的实现。
编写HarConvetor

app/core/request/har_convertor.py

import json
import re
from typing import List

from app.core.request.convertor import Convertor
from app.core.request.request import RequestInfo
from app.excpetions.convert.ConvertException import HarConvertException

class HarConvertor(Convertor):
@staticmethod
def convert(file, regex: str = None) -> List[RequestInfo]:
try:
with open(file, “r”, encoding=“utf-8”) as f:
ans = []
flag = None
if regex is not None:
flag = re.compile(regex)
# 加载har请求数据
data = json.load(f)
entries = data.get(“log”, {}).get(“entries”)
if not entries:
raise HarConvertException(“entries数据为空”)
for entry in entries:
# 如果是fetch或xhr接口,说明是http请求(暂不支持js)
if entry.get(“_resourceType”).lower() in (“fetch”, “xhr”):
info = RequestInfo()
request_data = entry.get(“request”)
info.url = request_data.get(“url”)
if flag is not None and not re.findall(flag, info.url):
# 由于不符合预期的url,所以过滤掉
continue
response_data = entry.get(“response”)
info.body = HarConvertor.get_body(request_data)
info.status_code = response_data.get(“status”)
info.request_method = request_data.get(“method”)
info.request_headers = HarConvertor.get_kv(request_data)
info.response_headers = HarConvertor.get_kv(response_data)
info.cookies = HarConvertor.get_kv(response_data, “cookies”)
info.request_cookies = HarConvertor.get_kv(request_data, “cookies”)
info.response_content = response_data.get(“content”, {}).get(“text”)
ans.append(info)
return ans
except HarConvertException as e:
raise HarConvertException(f"har文件转换异常: {e}“)
except Exception as e:
raise HarConvertException(f"har文件转换失败: {e}”)

@staticmethod
def get_kv(request_data: dict, key: str = "headers") -> dict:
    """
    通过response/request获取header信息
    :param key:
    :param request_data:
    :return:
    """
    headers = request_data.get(key)
    result = dict()
    for h in headers:
        result[h.get("name")] = h.get("value")
    return result

@staticmethod
def get_body(request_data: dict):
    data = request_data.get("postData", {})
    return data.get("text")

if name == “main”:
requests = HarConvertor.convert(“./pity.fun.har”, “juejin.cn”)
print(requests)

复制代码
这里主要做了2个事情,读取+转换,首先我们将读取的har利用json.load转为Python数据。
接着去找到对应的请求数组: entries, 遍历之。
接着就是拼接为我们自己的RequestInfo了,到这里我们的转换工作就完成了,我们还自定义了HarConvertException, 是为了更好地区别异常类型。
这样设计的好处是,以后如果要支持hab, hba, hxr各种格式的时候,我们只需要实现convert方法即可。
接着就是我们最重要的转换环节了,可能需要博主费点脑子了。大家做好心理准备~

### 回答1: 华军软件园的"har文件解析工具"是一款非常实用的工具,它可以帮助用户对HAR(HTTP Archive)文件进行解析和分析。 首先,HAR文件是一种用于记录Web浏览器与服务器之间交互的文件格式。其中包含了请求和响应的详细信息,如URL、请求方法、请求头、请求参数、响应状态码、响应头、响应体等等。通过解析HAR文件,我们可以获得有关网页加载性能、网络请求响应时间、错误信息等数据,从而对网站性能进行评估和优化。 华军的"har文件解析工具"能够将HAR文件导入,然后以可视化的方式展示出各个请求和响应的详细信息。用户可以方便地查看每个请求的响应时间、大小和状态码,以及请求头、响应头的具体内容。此外,该工具还提供了一些分析功能,如统计各个域名的请求数量和响应时间、计算网页加载时间等,帮助用户更好地评估网站性能。 此外,"har文件解析工具"还支持导出数据,用户可以将解析后的数据HAR文件的形式保存下来,方便日后查看和比较。同时,该工具也支持与其他常用性能分析工具的集成,如Google Chrome的开发者工具和火狐浏览器的Firebug插件等,通过与这些工具的结合,可以更加全面地分析和优化网站的性能。 总之,华军软件园的"har文件解析工具"为我们提供了一种简单、直观的方式来解析和分析HAR文件,帮助我们更好地评估和优化网站性能,是一款非常实用的工具。 ### 回答2: 华军软件园是一个专业的软件下载网站,提供了丰富的软件资源供用户下载使用。而HAR文件解析工具,是一种用于解析HAR(HTTP Archive)文件的软件工具。 HAR文件是记录浏览器与服务器之间通信的网络日志文件。它记录了浏览器发送的HTTP请求和服务器返回的HTTP响应,包括请求头、响应头、请求参数、响应内容等信息。通过解析HAR文件,我们可以对网络请求进行分析、调试、优化,从而提升网络性能和用户体验。 华军软件园提供的HAR文件解析工具可以帮助用户打开、解析和分析HAR文件。它具有以下主要功能: 1. 打开HAR文件:用户可以从本地计算机选择HAR文件,然后通过工具打开。 2. 解析HAR文件:工具会读取HAR文件中的数据,并将其解析为可读的形式,以便用户能够查看和分析其中的内容。 3. 分析网络请求:工具会将HAR文件中的各个网络请求展示出来,包括请求的URL、请求方法、请求头等信息,方便用户进行分析。 4. 查看请求和响应详情:用户可以选择某个网络请求,查看该请求和对应的响应的详细信息,包括请求参数、响应状态码、响应头、响应内容等。 5. 导出数据:工具支持将解析后的HAR文件数据导出为其他格式,比如JSON、CSV等,以便用户进行进一步的数据处理和分析。 总之,华军软件园提供的HAR文件解析工具是一个便捷、高效的软件工具,可以帮助用户解析HAR文件并分析其中的网络请求,从而提升网络性能和优化用户体验。 ### 回答3: 华军软件园是一家知名的软件下载平台,提供了广泛的软件资源供用户下载和使用。对于HAR文件解析工具,华军软件园也提供了相应的下载和推荐服务。 HAR文件是HTTP归档文件的缩写,它记录了浏览器与服务器之间的网络交互信息,包括网络请求、响应、头部信息、Cookie等。HAR文件解析工具可以将HAR文件解析成更易读、更易理解的格式,便于开发人员、网络分析师等进行网络性能分析、调试以及异常排查等工作。 华军软件园中推荐的HAR文件解析工具通常具有以下特点:实用、易用、功能丰富。这些工具可以帮助用户快速分析和定位网络请求的性能问题,利于优化网页性能,提升用户体验。 在华军软件园中,用户可以根据自己需求选择适合的HAR文件解析工具进行下载和使用。在选择之前,用户可以查看软件的评价、推荐指数和用户评论等信息,从而了解软件的质量和可靠性。 总之,华军软件园作为一家专业的软件下载平台,为用户提供了各种类型的软件资源,包括HAR文件解析工具。用户可以在华军网上找到适合自己的HAR文件解析工具,并通过下载和使用这些工具来实现对HAR文件的解析和处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值