def execExchange(tracer, exchange, context): try: tracer.trace('create request') request = makeRequest(val(exchange,'request'), context) tracer.trace('log request') logYaml(tracer.requestLog(), request) tracer.trace('validate request') result = valid(request, val(exchange,'request','schema')) tracer.check('request valid', result) tracer.trace('send request') response = sendRequest(request) tracer.trace('log response') logYaml(tracer.responseLog(), response) tracer.trace('validate response') result = valid(response, val(exchange,'response','schema')) tracer.check('response valid', result) tracer.trace('normalize response') actual = normalize(response, lowerHeaders(val(exchange,'response'))) tracer.trace('log actual') logYaml(tracer.actualLog(), actual) tracer.trace('load expected') expect = loadYaml(tracer.expectSource()) tracer.trace('log expect') logYaml(tracer.expectLog(), expect) tracer.trace('compare actual to expected') result = compare(actual, tracer.expectLog()) tracer.check('actual match', result) return { 'request': request, 'response': response } except Exception as e: tracer.fail(e) return {} finally: tracer.done()
def compare(actual, expectPath): if os.path.exists(expectPath): expect = loadYaml(expectPath) if expect != actual: return "Did not match" return None
tracer.trace('compare actual to expected') result = compare(actual, tracer.expectLog()) tracer.check('actual match', result) return {'request': request, 'response': response} except Exception as e: tracer.fail(e) return {} finally: tracer.done() def execCase(tracer, case, context): for name, exchange in case.items(): context[name] = execExchange(tracer.case(name), exchange, context) # print(json.dumps(context[name])) def execSuite(suite, env, verbose): for name, case in suite.items(): execCase(CaseTracer(name, verbose), case, { 'env': env, 'os': os.environ }) context = loadYaml(sys.argv[1]) execSuite(context['suite'], context['env'], context['verbose'])