From 6bf51f60a971834e07174d7d4851580c2ea5567b Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 15 Nov 2021 18:50:09 +0800 Subject: [PATCH] 1 --- bin/mock | 2 +- scripts/postman/mocking.py | 95 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) diff --git a/bin/mock b/bin/mock index bb4a7e7..38b182a 100755 --- a/bin/mock +++ b/bin/mock @@ -2,7 +2,7 @@ import os import sys -sys.path.append( os.path.dirname(os.path.abspath(__file__)) + '/../scripts/postman') +sys.path.append(os.path.dirname(os.path.abspath(__file__)) + '/../scripts/postman') import mocking diff --git a/scripts/postman/mocking.py b/scripts/postman/mocking.py index 7a2d760..212cae2 100644 --- a/scripts/postman/mocking.py +++ b/scripts/postman/mocking.py @@ -1,6 +1,9 @@ # -*- coding: utf-8 -*- +import os +import sys import json +from urllib import parse as urlparse class Mocking(object): @@ -9,3 +12,95 @@ class Mocking(object): def convert(self): self._env = json.loads(open(self._workDir + 'env.json', 'r').read()) + self._projObj = { + 'info': { + '_postman_id': '', + 'name': self._env['name'], + 'schema': 'https://schema.getpostman.com/json/collection/v2.1.0/collection.json' + }, + 'variable': self._env['variables'], + 'item': [] + } + sys.path.append(self._workDir + 'collections') + for file in os.listdir(self._workDir + 'collections'): + if file[0:1] == '_': + continue + m = __import__(file.replace('.py', '')) + for name in dir(m): + if name[0:1] != '_': + c = getattr(m, name)() + self._convertCollection(c) + self._out() + + def _out(self): + wf = open(self._workDir + self._env['name'] + '.postman.json', 'w') + wf.write(json.dumps(self._projObj, indent = 4)) + wf.close() + + def _convertCollection(self, c): + for item in c.items: + itemObj = { + 'name': item.get('name', ''), + 'event': [], + 'request': { + 'method': item.get('method', 'GET'), + 'header': [], + 'url': { + 'raw': self._getRaw(item), + 'protocol': self._getProtocol(item['url']), + 'host': self._getHost(item['url']), + 'path': self._getPath(item['url']), + 'query': [] + } + }, + 'response': [] + } + if 'prerequest' in item: + itemObj['event'].append({ + 'listen': 'prerequest', + 'script': { + 'exec': [ + item['prerequest'].strip() + ], + 'type': 'text/javascript' + } + }) + if 'test' in item: + itemObj['event'].append({ + 'listen': 'test', + 'script': { + 'exec': [ + item['test'].strip() + ], + 'type': 'text/javascript' + } + }) + for param in item['params']: + itemObj['request']['url']['query'].append({ + 'key': param[0], + 'value': param[1], + }) + self._projObj['item'].append(itemObj) + + def _getRaw(self, item): + raw = item['url'] + for param in item['params']: + if raw.index('?') == -1: + raw += '?' + if raw[-1] in ('&', '?'): + raw += param[0] + '=' + param[1] + else: + raw += '&' + param[0] + '=' + param[1] + return raw + + def _getProtocol(self, url): + parsed_tuple = urlparse.urlparse(url) + return parsed_tuple.scheme + + def _getHost(self, url): + parsed_tuple = urlparse.urlparse(url) + return [parsed_tuple.netloc] + + def _getPath(self, url): + parsed_tuple = urlparse.urlparse(url) + return [path for path in parsed_tuple.path.split('/') if path != '']