通过Har生成测试脚本 (LR 为例)

Irene ·
更新时间:2024-11-11
· 915 次阅读

  前言   HTTP Archive (HAR) format 是http协议交互的归档格式。   这个格式在本质上是utf8格式的json字符串,存储着所有的http请求和http响应的数据,包括所有的head和body。   如何获取HAR格式   一般,很多proxy类的工具,如fiddler,charles,原来一直以为charles不支持保存为har格式,后来才知道是在 export 菜单里面:

  通过代理和反向代理获取http报文   在charles中,支持代理,反向代理,端口转发 这三种主要的方法获取交互的报文。   1. 代理模式:这个是普通的代理,proxy模式,浏览器都支持。   2. 反向代理:简单说是代理服务器,对于不支持设置代理的应用,如接口类,可以通过这个来获取报文。

  3. 端口转发:这个功能更强大,基于tcp,udp层的,对于Socket类的都能录到报文。一般如果不知道是什么协议的, 可以用这个,如果判断是http协议的, 好用反向代理模式的,这样可以更直观的看到解析后的报文。   解析har   通过代理和反向代理的方式,可以获取到http报文,导出为har格式后,进行解析,可以直接生成测试脚本,以生成loadrunner 脚本为例。   基于python的脚本如下:   #!/usr/bin/env python   # -*- coding: utf-8 -*-   from optparse import OptionParser   import os   import sys   import json   # check env   if sys.version_info < (3, 4):   raise RuntimeError('At least Python 3.4 is required.')   restype = ('js', 'css', 'jpg', 'gif', 'ico', 'png')   def list2dic(headers):   header_dic = dict()   for head in headers:   if head['name'] in header_dic:   header_dic[head['name']] = header_dic[head['name']] + ',' + head['value']   else:   header_dic[head['name']] = head['value']   return header_dic   def dictoand(dct):   res_list = list()   for tp in dct:   res_list.append('%s=%s' % (tp['name'], tp['value']))   return '&'.join(res_list)   def dict2lr(lrsc):   tmpl = '''   web_custom_request("%(name)s",   "URL=%(url)s",   "Method=%(method)s",   "Resource=%(res)s",   "Referer=%(referer)s",   "EncType=%(enctype)s",   "Body=%(body)s",   LAST);'''   # url   url = lrsc['url']   method = lrsc['method']   name = url.split('/')[-1]   name = name.split('?')[0]   suff = url.split('.')[-1]   # Resource type   global restype   res = '0'   if suff in restype:   res = '1'   # Content-Type   enctype = ''   if 'Content-Type' in lrsc:   enctype = lrsc['Content-Type']   # Referer   referer = ''   if 'Referer' in lrsc:   referer = lrsc['Referer']   # Body   body = ''   if 'posttext' in lrsc:   body = lrsc['posttext']   elif 'postparams' in lrsc:   body = dictoand(lrsc['postparams'])   body = body.replace('"', '\"')   res = tmpl % {'name': name, 'url': url, 'method': method, 'enctype': enctype, 'referer': referer, 'res': res,   'body': body}   # Head   if 'SOAPAction' in lrsc:   res = (" " + ' web_add_header("SOAPAction", "%s")' + "; " + res) % lrsc['SOAPAction']   return res   def parhar(harfile):   res = list()   try:   FH = open(harfile, mode='r', encoding='utf-8', closefd=True)   all = json.load(FH)   FH.close()   except Exception as ex:   print('Open har file errr: %s' % ex)   quit()   har_ver = all['log']['version']   creater = all['log']['creator']['name']   entries = all['log']['entries']   ct = len(entries)   for et in entries:   stm = et['startedDateTime']   req = et['request']   rsp = et['response']   lrsc = dict()



测试脚本 lr 脚本 测试

需要 登录 后方可回复, 如果你还没有账号请 注册新账号