httprunner/har2case

firefox导出的har和fiddler导出的har有些区别,其中fiddler导出har是可以转换的,firefox不行,具体情况下面详述。

aspstar opened this issue · 2 comments

har2case在转换FIREFOX或谷歌浏览器导出的HAR时报错,报错信息如下:

post_data = utils.x_www_form_urlencoded(post_data)
  File "c:\Python33\lib\site-packages\har2case\utils.py", line 50, in x_www_form
_urlencoded
    for key, value in origin_dict.items()
AttributeError: 'str' object has no attribute 'items'

发现问题出在 解析"text": "operation=goLoginSelectPage"时,utils.x_www_form_urlencoded(post_data) 报错了。主要原因是firefox或谷歌浏览器导出的HAR与FIDDLER有些不同如下所示:

谷歌:

          "headersSize": 684,
          "bodySize": 27,
          "postData": {
            "mimeType": "application/x-www-form-urlencoded",
            "text": "operation=goLoginSelectPage",
            "params": [
              {
                "name": "operation",
                "value": "goLoginSelectPage"
              }

fiddler:

"postData":{"params":[{"name":"operation", "value":"goLoginSelectPage"}], "mimeType":"application/x-www-form-urlencoded"}, "method":"POST", "queryString":[]}

附上两段导出的har,需要把txt文件名改成har
fiddler.txt
firefox.txt

改了一下utils.py的源代码,不报错了,明天验证一下,真实测试有没有影响。

    # modify this code for fix firefox & google export har convert case fail by wang
    re=origin_dict
    try:
        re="&".join([
            "{}={}".format(key, value)
            for key, value in origin_dict.items()
        ])
    except:
        pass
    return re
    # return "&".join([
    #     "{}={}".format(key, value)
    #     for key, value in origin_dict.items()
    # ])

@aspstar 本地试了下你上传的那两个文件,都是可以成功转换的。
看了下你贴出来的代码片段,不是最新的,你升级到最新版后再试下。