fix circular reference in utils and testcase module

This commit is contained in:
debugtalk
2017-11-02 12:45:59 +08:00
parent 6f04f5008a
commit 5fd4e28d34
7 changed files with 132 additions and 125 deletions

View File

@@ -1,9 +1,16 @@
#coding: utf-8 #coding: utf-8
import json
try: try:
FileNotFoundError = FileNotFoundError FileNotFoundError = FileNotFoundError
except NameError: except NameError:
FileNotFoundError = IOError FileNotFoundError = IOError
try:
JSONDecodeError = json.decoder.JSONDecodeError
except AttributeError:
JSONDecodeError = ValueError
class MyBaseError(BaseException): class MyBaseError(BaseException):
pass pass

View File

@@ -1,8 +1,11 @@
import ast import ast
import codecs
import json
import logging import logging
import os import os
import re import re
import yaml
from ate import exception, utils from ate import exception, utils
variable_regexp = r"\$([\w_]+)" variable_regexp = r"\$([\w_]+)"
@@ -16,6 +19,38 @@ test_def_overall_dict = {
testcases_cache_mapping = {} testcases_cache_mapping = {}
def load_yaml_file(yaml_file):
""" load yaml file and check file content format
"""
with codecs.open(yaml_file, 'r+', encoding='utf-8') as stream:
yaml_content = yaml.load(stream)
check_format(yaml_file, yaml_content)
return yaml_content
def load_json_file(json_file):
""" load json file and check file content format
"""
with codecs.open(json_file, encoding='utf-8') as data_file:
try:
json_content = json.load(data_file)
except exception.JSONDecodeError:
err_msg = "JSONDecodeError: JSON file format error: {}".format(json_file)
logging.error(err_msg)
raise exception.FileFormatError(err_msg)
check_format(json_file, json_content)
return json_content
def load_tests(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
return []
def extract_variables(content): def extract_variables(content):
""" extract all variable names from content, which is in format $variable """ extract all variable names from content, which is in format $variable
@param (str) content @param (str) content
@@ -191,7 +226,7 @@ def load_test_file(file_path):
"api": {}, "api": {},
"testcases": [] "testcases": []
} }
tests_list = utils.load_tests(file_path) tests_list = load_tests(file_path)
for item in tests_list: for item in tests_list:
for key in item: for key in item:

View File

@@ -1,9 +1,7 @@
import codecs
import hashlib import hashlib
import hmac import hmac
import imp import imp
import importlib import importlib
import json
import logging import logging
import os.path import os.path
import random import random
@@ -13,7 +11,7 @@ import types
from collections import OrderedDict from collections import OrderedDict
import yaml import yaml
from ate import exception, testcase from ate import exception
from requests.structures import CaseInsensitiveDict from requests.structures import CaseInsensitiveDict
try: try:
@@ -41,38 +39,6 @@ def get_sign(*args):
sign = hmac.new(sign_key, content, hashlib.sha1).hexdigest() sign = hmac.new(sign_key, content, hashlib.sha1).hexdigest()
return sign return sign
def load_yaml_file(yaml_file):
""" load yaml file and check file content format
"""
with codecs.open(yaml_file, 'r+', encoding='utf-8') as stream:
yaml_content = yaml.load(stream)
testcase.check_format(yaml_file, yaml_content)
return yaml_content
def load_json_file(json_file):
""" load json file and check file content format
"""
with codecs.open(json_file, encoding='utf-8') as data_file:
try:
json_content = json.load(data_file)
except json.decoder.JSONDecodeError:
err_msg = "JSONDecodeError: JSON file format error: {}".format(json_file)
logging.error(err_msg)
raise exception.FileFormatError(err_msg)
testcase.check_format(json_file, json_content)
return json_content
def load_tests(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
return []
def load_folder_files(folder_path, recursive=True): def load_folder_files(folder_path, recursive=True):
""" load folder path, return all files in list format. """ load folder path, return all files in list format.
@param @param

View File

@@ -2,7 +2,7 @@ import os
import time import time
import unittest import unittest
from ate import runner, utils from ate import runner, testcase, utils
from ate.context import Context from ate.context import Context
from ate.exception import ParamsError from ate.exception import ParamsError
@@ -12,7 +12,7 @@ class VariableBindsUnittest(unittest.TestCase):
def setUp(self): def setUp(self):
self.context = Context() self.context = Context()
testcase_file_path = os.path.join(os.getcwd(), 'tests/data/demo_binds.yml') testcase_file_path = os.path.join(os.getcwd(), 'tests/data/demo_binds.yml')
self.testcases = utils.load_tests(testcase_file_path) self.testcases = testcase.load_tests(testcase_file_path)
def test_context_init_functions(self): def test_context_init_functions(self):
self.assertIn("get_timestamp", self.context.testset_functions_config) self.assertIn("get_timestamp", self.context.testset_functions_config)

View File

@@ -1,7 +1,6 @@
import os import os
import requests from ate import exception, runner, testcase
from ate import exception, runner, testcase, utils
from tests.base import ApiServerUnittest from tests.base import ApiServerUnittest
@@ -26,18 +25,18 @@ class TestRunner(ApiServerUnittest):
def test_run_single_testcase(self): def test_run_single_testcase(self):
for testcase_file_path in self.testcase_file_path_list: for testcase_file_path in self.testcase_file_path_list:
testcases = utils.load_tests(testcase_file_path) testcases = testcase.load_tests(testcase_file_path)
testcase = testcases[0]["test"] test = testcases[0]["test"]
self.assertTrue(self.test_runner._run_test(testcase)) self.assertTrue(self.test_runner._run_test(test))
testcase = testcases[1]["test"] test = testcases[1]["test"]
self.assertTrue(self.test_runner._run_test(testcase)) self.assertTrue(self.test_runner._run_test(test))
testcase = testcases[2]["test"] test = testcases[2]["test"]
self.assertTrue(self.test_runner._run_test(testcase)) self.assertTrue(self.test_runner._run_test(test))
def test_run_single_testcase_fail(self): def test_run_single_testcase_fail(self):
testcase = { test = {
"name": "get token", "name": "get token",
"request": { "request": {
"url": "http://127.0.0.1:5000/api/get-token", "url": "http://127.0.0.1:5000/api/get-token",
@@ -63,7 +62,7 @@ class TestRunner(ApiServerUnittest):
} }
with self.assertRaises(exception.ValidationError): with self.assertRaises(exception.ValidationError):
self.test_runner._run_test(testcase) self.test_runner._run_test(test)
def test_run_testset_hardcode(self): def test_run_testset_hardcode(self):
for testcase_file_path in self.testcase_file_path_list: for testcase_file_path in self.testcase_file_path_list:

View File

@@ -3,11 +3,86 @@ import time
import unittest import unittest
from ate import testcase from ate import testcase
from ate.exception import ParamsError, ApiNotFound from ate.exception import ApiNotFound, FileFormatError, ParamsError
class TestcaseParserUnittest(unittest.TestCase): class TestcaseParserUnittest(unittest.TestCase):
def test_load_testcases_bad_filepath(self):
testcase_file_path = os.path.join(os.getcwd(), 'tests/data/demo')
self.assertEqual(testcase.load_tests(testcase_file_path), [])
def test_load_json_testcases(self):
testcase_file_path = os.path.join(
os.getcwd(), 'tests/data/demo_testset_hardcode.json')
testcases = testcase.load_tests(testcase_file_path)
self.assertEqual(len(testcases), 3)
test = testcases[0]["test"]
self.assertIn('name', test)
self.assertIn('request', test)
self.assertIn('url', test['request'])
self.assertIn('method', test['request'])
def test_load_yaml_testcases(self):
testcase_file_path = os.path.join(
os.getcwd(), 'tests/data/demo_testset_hardcode.yml')
testcases = testcase.load_tests(testcase_file_path)
self.assertEqual(len(testcases), 3)
test = testcases[0]["test"]
self.assertIn('name', test)
self.assertIn('request', test)
self.assertIn('url', test['request'])
self.assertIn('method', test['request'])
def test_load_yaml_file_file_format_error(self):
yaml_tmp_file = "tests/data/tmp.yml"
# create empty yaml file
with open(yaml_tmp_file, 'w') as f:
f.write("")
with self.assertRaises(FileFormatError):
testcase.load_yaml_file(yaml_tmp_file)
os.remove(yaml_tmp_file)
# create invalid format yaml file
with open(yaml_tmp_file, 'w') as f:
f.write("abc")
with self.assertRaises(FileFormatError):
testcase.load_yaml_file(yaml_tmp_file)
os.remove(yaml_tmp_file)
def test_load_json_file_file_format_error(self):
json_tmp_file = "tests/data/tmp.json"
# create empty file
with open(json_tmp_file, 'w') as f:
f.write("")
with self.assertRaises(FileFormatError):
testcase.load_json_file(json_tmp_file)
os.remove(json_tmp_file)
# create empty json file
with open(json_tmp_file, 'w') as f:
f.write("{}")
with self.assertRaises(FileFormatError):
testcase.load_json_file(json_tmp_file)
os.remove(json_tmp_file)
# create invalid format json file
with open(json_tmp_file, 'w') as f:
f.write("abc")
with self.assertRaises(FileFormatError):
testcase.load_json_file(json_tmp_file)
os.remove(json_tmp_file)
def test_extract_variables(self): def test_extract_variables(self):
self.assertEqual( self.assertEqual(
testcase.extract_variables("$var"), testcase.extract_variables("$var"),

View File

@@ -8,81 +8,6 @@ from tests.base import ApiServerUnittest
class TestUtils(ApiServerUnittest): class TestUtils(ApiServerUnittest):
def test_load_testcases_bad_filepath(self):
testcase_file_path = os.path.join(os.getcwd(), 'tests/data/demo')
self.assertEqual(utils.load_tests(testcase_file_path), [])
def test_load_json_testcases(self):
testcase_file_path = os.path.join(
os.getcwd(), 'tests/data/demo_testset_hardcode.json')
testcases = utils.load_tests(testcase_file_path)
self.assertEqual(len(testcases), 3)
testcase = testcases[0]["test"]
self.assertIn('name', testcase)
self.assertIn('request', testcase)
self.assertIn('url', testcase['request'])
self.assertIn('method', testcase['request'])
def test_load_yaml_testcases(self):
testcase_file_path = os.path.join(
os.getcwd(), 'tests/data/demo_testset_hardcode.yml')
testcases = utils.load_tests(testcase_file_path)
self.assertEqual(len(testcases), 3)
testcase = testcases[0]["test"]
self.assertIn('name', testcase)
self.assertIn('request', testcase)
self.assertIn('url', testcase['request'])
self.assertIn('method', testcase['request'])
def test_load_yaml_file_file_format_error(self):
yaml_tmp_file = "tests/data/tmp.yml"
# create empty yaml file
with open(yaml_tmp_file, 'w') as f:
f.write("")
with self.assertRaises(exception.FileFormatError):
utils.load_yaml_file(yaml_tmp_file)
os.remove(yaml_tmp_file)
# create invalid format yaml file
with open(yaml_tmp_file, 'w') as f:
f.write("abc")
with self.assertRaises(exception.FileFormatError):
utils.load_yaml_file(yaml_tmp_file)
os.remove(yaml_tmp_file)
def test_load_json_file_file_format_error(self):
json_tmp_file = "tests/data/tmp.json"
# create empty file
with open(json_tmp_file, 'w') as f:
f.write("")
with self.assertRaises(exception.FileFormatError):
utils.load_json_file(json_tmp_file)
os.remove(json_tmp_file)
# create empty json file
with open(json_tmp_file, 'w') as f:
f.write("{}")
with self.assertRaises(exception.FileFormatError):
utils.load_json_file(json_tmp_file)
os.remove(json_tmp_file)
# create invalid format json file
with open(json_tmp_file, 'w') as f:
f.write("abc")
with self.assertRaises(exception.FileFormatError):
utils.load_json_file(json_tmp_file)
os.remove(json_tmp_file)
def test_load_folder_files(self): def test_load_folder_files(self):
folder = os.path.join(os.getcwd(), 'tests') folder = os.path.join(os.getcwd(), 'tests')
file1 = os.path.join(os.getcwd(), 'tests', 'test_utils.py') file1 = os.path.join(os.getcwd(), 'tests', 'test_utils.py')