diff --git a/ate/__init__.py b/ate/__init__.py new file mode 100644 index 00000000..e69de29b diff --git a/ate/exception.py b/ate/exception.py new file mode 100644 index 00000000..6c747377 --- /dev/null +++ b/ate/exception.py @@ -0,0 +1,16 @@ +#coding: utf-8 +from termcolor import colored + +class MyBaseError(BaseException): + def __init__(self, msg): + self.msg = msg + self.color_msg = colored(msg, 'red', attrs=['bold']) + + def __repr__(self): + return self.msg + + def __str__(self): + return self.color_msg + +class ParamsError(MyBaseError): + pass diff --git a/ate/utils.py b/ate/utils.py new file mode 100644 index 00000000..e5ebb75c --- /dev/null +++ b/ate/utils.py @@ -0,0 +1,22 @@ +import json +import yaml +import os.path +from ate.exception import ParamsError + +def load_yaml_file(yaml_file): + with open(yaml_file, 'r+') as stream: + return yaml.load(stream) + +def load_json_file(json_file): + with open(json_file) as data_file: + return json.load(data_file) + +def load_testcases(testcase_file_path): + file_suffix = os.path.splitext(testcase_file_path)[1] + if file_suffix == '.json': + return load_json_file(testcase_file_path) + elif file_suffix in ['.yaml', '.yml']: + return load_yaml_file(testcase_file_path) + else: + # '' or other suffix + raise ParamsError("Bad testcase file name!") diff --git a/test/data/demo.json b/test/data/demo.json new file mode 100644 index 00000000..f011c9ed --- /dev/null +++ b/test/data/demo.json @@ -0,0 +1,43 @@ +[ + { + "name": "create user which does not exist", + "request": { + "url": "http://127.0.0.1:5000/api/users/1000", + "method": "POST", + "headers": { + "content-type": "application/json" + }, + "cookies": {}, + "json": { + "name": "user1", + "password": "123456" + } + }, + "response": { + "status_code": 201, + "headers": { + "Content-Type": "application/json" + } + } + }, + { + "name": "create user which existed", + "request": { + "url": "http://127.0.0.1:5000/api/users/1000", + "method": "POST", + "headers": { + "content-type": "application/json" + }, + "json": { + "name": "user1", + "password": "123456" + } + }, + "response": { + "status_code": 500, + "headers": { + "Content-Type": "application/json" + } + } + } +] \ No newline at end of file diff --git a/test/data/demo.yml b/test/data/demo.yml new file mode 100644 index 00000000..242663a4 --- /dev/null +++ b/test/data/demo.yml @@ -0,0 +1,29 @@ +- + name: create user which does not exist + request: + url: http://127.0.0.1:5000/api/users/1000 + method: POST + headers: + Content-Type: application/json + json: + name: user1 + password: 123456 + response: + status_code: 201 + headers: + Content-Type: application/json + +- + name: create user which existed + request: + url: http://127.0.0.1:5000/api/users/1000 + method: POST + headers: + Content-Type: application/json + json: + name: user1 + password: 123456 + response: + status_code: 500 + headers: + Content-Type: application/json \ No newline at end of file diff --git a/test/test_utils.py b/test/test_utils.py new file mode 100644 index 00000000..e87007e5 --- /dev/null +++ b/test/test_utils.py @@ -0,0 +1,31 @@ +import os +import unittest +from ate import utils +from ate import exception + +class TestUtils(unittest.TestCase): + + def test_load_testcases_bad_filepath(self): + testcase_file_path = os.path.join(os.getcwd(), 'test/data/demo') + with self.assertRaises(exception.ParamsError): + utils.load_testcases(testcase_file_path) + + def test_load_json_testcases(self): + testcase_file_path = os.path.join(os.getcwd(), 'test/data/demo.json') + testcases = utils.load_testcases(testcase_file_path) + self.assertEqual(len(testcases), 2) + self.assertIn('name', testcases[0]) + self.assertIn('request', testcases[0]) + self.assertIn('response', testcases[0]) + self.assertIn('url', testcases[0]['request']) + self.assertIn('method', testcases[0]['request']) + + def test_load_yaml_testcases(self): + testcase_file_path = os.path.join(os.getcwd(), 'test/data/demo.yml') + testcases = utils.load_testcases(testcase_file_path) + self.assertEqual(len(testcases), 2) + self.assertIn('name', testcases[0]) + self.assertIn('request', testcases[0]) + self.assertIn('response', testcases[0]) + self.assertIn('url', testcases[0]['request']) + self.assertIn('method', testcases[0]['request'])