-
Notifications
You must be signed in to change notification settings - Fork 1
/
convert-har-to-flow.py
72 lines (63 loc) · 2.36 KB
/
convert-har-to-flow.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
import json
import yaml
import sys
from urllib.parse import urlparse
from datetime import datetime
import config
def convert(input_har,output_yrml):
with open(input_har,"r",encoding="utf8") as har_file:
json_text = har_file.read()
root_url = None
all_data = json.loads(json_text)
entries = all_data["log"]["entries"]
# print(entries[0])
last_time = None
cenario = []
for entry in entries:
request = entry["request"]
method = request["method"]
url = request["url"]
if not root_url:
parsed_uri = urlparse(url )
root_url = '{uri.scheme}://{uri.netloc}'.format(uri=parsed_uri)
url = urlparse(url ).path
if len([x for x in config.IGNORE_EXT if x in url]):
continue
#Add think between requests
if config.CONVERT_THINK:
time = datetime.strptime(entry["startedDateTime"], "%Y-%m-%dT%H:%M:%S.%f%z")
think =(time - last_time).total_seconds() if last_time else 0
last_time = time
if think > 0.5:
cenario.append({"think":think})
query_strings = request["queryString"]
item_data = {"url":url}
item = {}
item[method.lower()] = item_data
if "postData" in request and "json" in request["postData"]["mimeType"]:
json_data = json.loads(request["postData"]["text"])
item_data["json"] = json_data
if "postData" in request and "x-www-form-urlencoded" in request["postData"]["mimeType"]:
form_data_params = {}
for param in request["postData"]["params"]:
form_data_params[param["name"]] = param["value"]
item_data["formData"] = form_data_params
if query_strings:
queries = {}
for query_string in query_strings:
queries[query_string["name"]] = query_string["value"]
item_data["qs"] = queries
cenario.append(item)
with open(output_yrml, 'w') as file:
documents = yaml.dump({
"config":{
"target":root_url,
"phases":[{
"duration":10,
"arrivalRate":1
}]
},
"scenarios":[{"flow":cenario}]
}, file)
if __name__ == "__main__":
convert(sys.argv[1],sys.argv[2])