add comparators

This commit is contained in:
debugtalk
2017-06-29 16:13:20 +08:00
parent d065864e4b
commit 2a904ec36a
3 changed files with 50 additions and 24 deletions

View File

@@ -92,13 +92,13 @@ class ResponseObject(object):
except KeyError: except KeyError:
raise exception.ParamsError("invalid validator %s" % validator_key) raise exception.ParamsError("invalid validator %s" % validator_key)
difference_exist = utils.compare( match_expected = utils.match_expected(
value, value,
validator_dict["expected"], validator_dict["expected"],
validator_dict["comparator"] validator_dict["comparator"]
) )
if difference_exist: if not match_expected:
diff_content_dict[validator_key] = validator_dict diff_content_dict[validator_key] = validator_dict
self.success = False if diff_content_dict else True self.success = False if diff_content_dict else True

View File

@@ -181,24 +181,36 @@ def query_json(json_content, query, delimiter='.'):
return json_content return json_content
def diff_json(current_json, expected_json): def match_expected(value, expected, comparator="eq"):
json_diff = {} """ check if value matches expected value.
@param value: value that get from response.
for key, expected_value in expected_json.items(): @param expected: expected result described in testcase
value = current_json.get(key, None) @param comparator: compare method
if str(value) != str(expected_value): """
json_diff[key] = {
'value': value,
'expected': expected_value
}
return json_diff
def compare(value, expected, comparator="eq"):
try: try:
if comparator in ["eq", "=="]: if comparator in ["eq", "equals", "=="]:
assert value == expected assert value == expected
elif comparator in ["str_eq", "string_equals"]:
assert str(value) == str(expected)
elif comparator in ["ne", "not_equals"]:
assert value != expected
elif comparator in ["len_eq", "length_equal", "count_eq"]:
assert len(value) == len(expected)
elif comparator in ["lt", "less_than"]:
assert value < expected
elif comparator in ["le", "less_than_or_equals"]:
assert value <= expected
elif comparator in ["gt", "greater_than"]:
assert value > expected
elif comparator in ["ge", "greater_than_or_equals"]:
assert value >= expected
elif comparator in ["contains"]:
assert expected in value
elif comparator in ["contained_by"]:
assert value in expected
elif comparator in ["regex"]:
assert re.match(expected, value)
return False
except AssertionError:
return True return True
except AssertionError:
return False

View File

@@ -178,9 +178,23 @@ class TestUtils(ApiServerUnittest):
self.assertEqual(result, "Leo") self.assertEqual(result, "Leo")
def test_compare(self): def test_compare(self):
self.assertEqual(utils.compare(1, 1, "eq"), False) self.assertTrue(utils.match_expected(1, 1, "eq"))
self.assertEqual(utils.compare("abc", "abc", "eq"), False) self.assertTrue(utils.match_expected("abc", "abc", "eq"))
self.assertEqual(utils.compare("abc", "abc"), False) self.assertTrue(utils.match_expected("abc", "abc"))
self.assertFalse(utils.match_expected(123, "123", "eq"))
self.assertFalse(utils.match_expected(123, "123"))
self.assertEqual(utils.compare(123, "123", "eq"), True) self.assertTrue(utils.match_expected("123", "345", "len_eq"))
self.assertEqual(utils.compare(123, "123"), True) self.assertTrue(utils.match_expected(123, "123", "str_eq"))
self.assertTrue(utils.match_expected(123, "123", "ne"))
self.assertTrue(utils.match_expected(1, 2, "lt"))
self.assertTrue(utils.match_expected(1, 1, "le"))
self.assertTrue(utils.match_expected(2, 1, "gt"))
self.assertTrue(utils.match_expected(1, 1, "ge"))
self.assertTrue(utils.match_expected("123abc456", "3ab", "contains"))
self.assertTrue(utils.match_expected("3ab", "123abc456", "contained_by"))
self.assertTrue(utils.match_expected("123abc456", "^123.*456$", "regex"))
self.assertFalse(utils.match_expected("123abc456", "^12b.*456$", "regex"))