通过Har生成测试脚本 (LR 为例)
作者:网络转载 发布时间:[ 2016/9/7 14:53:39 ] 推荐标签:接口测试 脚本 测试用例
前言
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()
相关推荐
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11