make variables in testcase template compatible with mapping style:

new mapping style:
"variables": {
    "a": 1,
    "b": 2
}

Also, the former list style is still valid:
"variables": [
    {"a": 1},
    {"b": 2}
]
This commit is contained in:
debugtalk
2018-11-28 12:11:50 +08:00
parent a205e8964c
commit c17d7c4f82
20 changed files with 141 additions and 142 deletions

View File

@@ -9,7 +9,7 @@ import sys
import yaml
from httprunner import exceptions, logger, parser, utils, validator
from httprunner.compat import OrderedDict
###############################################################################
## file loader

View File

@@ -3,7 +3,6 @@
import ast
import os
import re
from collections import OrderedDict
from httprunner import exceptions, utils
from httprunner.compat import basestring, builtin_str, numeric_types, str
@@ -524,7 +523,7 @@ def parse_data(content, variables_mapping=None, functions_mapping=None):
for item in content
]
if isinstance(content, (dict, OrderedDict)):
if isinstance(content, dict):
parsed_content = {}
for key, value in content.items():
parsed_key = parse_data(key, variables_mapping, functions_mapping)

View File

@@ -11,7 +11,7 @@ import string
from datetime import datetime
from httprunner import exceptions, logger
from httprunner.compat import OrderedDict, basestring, is_py2
from httprunner.compat import basestring, is_py2
from httprunner.exceptions import ParamsError
absolute_http_url_regexp = re.compile(r"^https?://", re.I)
@@ -265,10 +265,10 @@ def ensure_mapping_format(variables):
""" ensure variables are in mapping format.
Args:
variables (list/dict/OrderedDict): original variables
variables (list/dict): original variables
Returns:
OrderedDict: ensured variables in OrderedDict
dict: ensured variables in dict format
Examples:
>>> variables = [
@@ -276,19 +276,17 @@ def ensure_mapping_format(variables):
{"b": 2}
]
>>> print(ensure_mapping_format(variables))
OrderDict(
{
"a": 1,
"b": 2
}
)
{
"a": 1,
"b": 2
}
"""
if isinstance(variables, list):
variables_ordered_dict = OrderedDict()
variables_ordered_dict = {}
for map_dict in variables:
variables_ordered_dict.update(map_dict)
elif isinstance(variables, (OrderedDict, dict)):
elif isinstance(variables, dict):
variables_ordered_dict = variables
else:
raise exceptions.ParamsError("variables format error!")
@@ -377,17 +375,17 @@ def extend_variables(raw_variables, override_variables):
override_variables (list):
Returns:
OrderedDict: extended variables mapping
dict: extended variables mapping
Examples:
>>> raw_variables = [{"var1": "val1"}, {"var2": "val2"}]
>>> override_variables = [{"var1": "val111"}, {"var3": "val3"}]
>>> extend_variables(raw_variables, override_variables)
OrderedDict([
('var1', 'val111'),
('var2', 'val2'),
('var3', 'val3')
])
{
'var1', 'val111',
'var2', 'val2',
'var3', 'val3'
}
"""
if not raw_variables:

View File

@@ -2,10 +2,11 @@
id: get_token
name: get token
variables:
- user_agent: XXX
- device_sn: API_XXX
- os_platform: XXX
- app_version: XXX
user_agent: XXX
device_sn: API_XXX
os_platform: XXX
app_version: XXX
request:
url: /api/get-token
method: POST
@@ -26,10 +27,10 @@
- api:
id: create_user
variables:
- user_name: user0
- user_password: "000000"
- uid: 9000
- token: XXX
user_name: user0
user_password: "000000"
uid: 9000
token: XXX
request:
url: /api/users/$uid
method: POST
@@ -46,8 +47,8 @@
- api:
id: get_user
variables:
- uid: 9000
- token: XXX
uid: 9000
token: XXX
request:
url: /api/users/$uid
method: GET
@@ -61,10 +62,10 @@
- api:
id: update_user
variables:
- user_name: user0
- user_password: "000000"
- uid: 9000
- token: XXX
user_name: user0
user_password: "000000"
uid: 9000
token: XXX
request:
url: /api/users/$uid
method: PUT
@@ -81,8 +82,8 @@
- api:
id: delete_user
variables:
- uid: 9000
- token: XXX
uid: 9000
token: XXX
request:
url: /api/users/$uid
method: DELETE
@@ -96,7 +97,7 @@
- api:
id: get_users
variables:
- token: XXX
token: XXX
request:
url: /api/users
method: GET
@@ -110,7 +111,7 @@
- api:
id: reset_all
variables:
- token: XXX
token: XXX
request:
url: /api/reset-all
method: GET
@@ -125,7 +126,7 @@
- api:
id: get_headers
variables:
- n_secs: 1
n_secs: 1
request:
url: /headers
headers:

View File

@@ -2,10 +2,10 @@
- config:
name: "user management testcase."
variables:
- user_agent: 'iOS/10.3'
- device_sn: ${gen_random_string(15)}
- os_platform: 'ios'
- app_version: '2.8.6'
user_agent: 'iOS/10.3'
device_sn: ${gen_random_string(15)}
os_platform: 'ios'
app_version: '2.8.6'
parameters:
- user_agent: ['iOS', 'android']
request:

View File

@@ -1,10 +1,10 @@
bind_variables:
variables:
- TOKEN: "debugtalk"
- token: $TOKEN
TOKEN: "debugtalk"
token: $TOKEN
builtin_functions:
variables:
- length: ${len(debugtalk)}
- smallest: ${min(2, 3, 8)}
- largest: ${max(2, 3, 8)}
length: ${len(debugtalk)}
smallest: ${min(2, 3, 8)}
largest: ${max(2, 3, 8)}

View File

@@ -1,16 +1,16 @@
- config:
name: "user management testcase."
parameters:
- user_agent: ["iOS/10.1", "iOS/10.2", "iOS/10.3"]
- username-password:
user_agent: ["iOS/10.1", "iOS/10.2", "iOS/10.3"]
username-password:
- ["test1","111111"]
- ["test2","222222"]
variables:
- username: test1
- user_agent: "iOS/10.1"
- device_sn: ${gen_random_string(15)}
- os_platform: 'ios'
- app_version: 2.8.5
username: test1
user_agent: "iOS/10.1"
device_sn: ${gen_random_string(15)}
os_platform: 'ios'
app_version: 2.8.5
base_url: ${get_base_url()}
output:
- token

View File

@@ -1,9 +1,9 @@
- config:
name: "123$var_a"
variables:
- var_a: 0
- var_c: "${sum_two(1, 2)}"
- PROJECT_KEY: ${ENV(PROJECT_KEY)}
var_a: 0
var_c: "${sum_two(1, 2)}"
PROJECT_KEY: ${ENV(PROJECT_KEY)}
# parameters:
# - "var_a-var_b":
# - [11, 21]

View File

@@ -12,8 +12,8 @@
json:
sign: f1219719911caae89ccc301679857ebfda115ca2
variables:
- expect_status_code: 200
- token_len: 16
expect_status_code: 200
token_len: 16
extract:
- token: content.token
validate:

View File

@@ -1,10 +1,10 @@
- config:
name: "create user testcases."
variables:
- user_agent: 'iOS/10.3'
- device_sn: ${gen_random_string(15)}
- os_platform: 'ios'
- app_version: '2.8.6'
user_agent: 'iOS/10.3'
device_sn: ${gen_random_string(15)}
os_platform: 'ios'
app_version: '2.8.6'
base_url: ${get_base_url()}
- test:
@@ -28,8 +28,8 @@
- test:
name: create user which does not exist
variables:
- user_name: "user1"
- user_password: "123456"
user_name: "user1"
user_password: "123456"
request:
url: /api/users/1000
method: POST

View File

@@ -12,8 +12,8 @@
json:
sign: f1219719911caae89ccc301679857ebfda115ca2
variables:
- expect_status_code: 200
- token_len: 16
expect_status_code: 200
token_len: 16
extract:
- token: content.token
validate:

View File

@@ -1,10 +1,10 @@
- config:
name: "user management testcase."
variables:
- user_agent: 'iOS/10.3'
- device_sn: ${gen_random_string(15)}
- os_platform: 'ios'
- app_version: '2.8.6'
user_agent: 'iOS/10.3'
device_sn: ${gen_random_string(15)}
os_platform: 'ios'
app_version: '2.8.6'
base_url: ${get_base_url()}
output:
- token
@@ -23,7 +23,7 @@
name: reset all users
api: reset_all
variables:
- token: $token
token: $token
validate:
- {"check": "status_code", "expect": 200}
- {"check": "content.success", "expect": true}
@@ -32,8 +32,8 @@
name: get user that does not exist
api: get_user
variables:
- uid: 1000
- token: $token
uid: 1000
token: $token
validate:
- {"check": "status_code", "expect": 404}
- {"check": "content.success", "expect": false}
@@ -41,10 +41,10 @@
- test:
name: create user which does not exist
variables:
- uid: 1000
- user_name: "user1"
- user_password: "123456"
- token: $token
uid: 1000
user_name: "user1"
user_password: "123456"
token: $token
api: create_user
validate:
- {"check": "status_code", "expect": 201}
@@ -54,8 +54,8 @@
name: get user that has been created
api: get_user
variables:
- uid: 1000
- token: $token
uid: 1000
token: $token
validate:
- {"check": "status_code", "expect": 200}
- {"check": "content.success", "expect": true}
@@ -64,10 +64,10 @@
- test:
name: create user which exists
variables:
- uid: 1000
- user_name: "user1"
- user_password: "123456"
- token: $token
uid: 1000
user_name: "user1"
user_password: "123456"
token: $token
api: create_user
validate:
- {"check": "status_code", "expect": 500}
@@ -76,10 +76,10 @@
- test:
name: update user which exists
variables:
- uid: 1000
- user_name: "user1"
- user_password: "654321"
- token: $token
uid: 1000
user_name: "user1"
user_password: "654321"
token: $token
api: update_user
validate:
- {"check": "status_code", "expect": 200}
@@ -89,8 +89,8 @@
name: get user that has been updated
api: get_user
variables:
- uid: 1000
- token: $token
uid: 1000
token: $token
validate:
- {"check": "status_code", "expect": 200}
- {"check": "content.success", "expect": true}
@@ -100,7 +100,7 @@
name: get users
api: get_users
variables:
- token: $token
token: $token
validate:
- {"check": "status_code", "expect": 200}
- {"check": "content.count", "expect": 1}
@@ -109,8 +109,8 @@
name: delete user that exists
api: delete_user
variables:
- uid: 1000
- token: $token
uid: 1000
token: $token
validate:
- {"check": "status_code", "expect": 200}
- {"check": "content.success", "expect": true}
@@ -119,7 +119,7 @@
name: get users
api: get_users
variables:
- token: $token
token: $token
validate:
- {"check": "status_code", "expect": 200}
- {"check": "content.count", "expect": 0}
@@ -127,10 +127,10 @@
- test:
name: create user which has been deleted
variables:
- uid: 1000
- user_name: "user1"
- user_password: "123456"
- token: $token
uid: 1000
user_name: "user1"
user_password: "123456"
token: $token
api: create_user
validate:
- {"check": "status_code", "expect": 201}
@@ -140,7 +140,7 @@
name: get users
api: get_users
variables:
- token: $token
token: $token
validate:
- {"check": "status_code", "expect": 200}
- {"check": "content.count", "expect": 1}

View File

@@ -1,16 +1,16 @@
- config:
name: "create user testcases."
variables:
- device_sn: 'HZfFBh6tU59EdXJ'
device_sn: 'HZfFBh6tU59EdXJ'
base_url: ${get_base_url()}
- test:
name: get token
variables:
- user_agent: 'iOS/10.3'
- os_platform: 'ios'
- app_version: '2.8.6'
- sign: f1219719911caae89ccc301679857ebfda115ca2
user_agent: 'iOS/10.3'
os_platform: 'ios'
app_version: '2.8.6'
sign: f1219719911caae89ccc301679857ebfda115ca2
request:
url: /api/get-token
method: POST
@@ -31,8 +31,8 @@
- test:
name: create user which does not exist
variables:
- user_name: "user1"
- user_password: "123456"
user_name: "user1"
user_password: "123456"
request:
url: /api/users/1000
method: POST

View File

@@ -5,10 +5,10 @@
- test:
name: upload file
variables:
- field_name: "file"
- file_path: "LICENSE"
- file_type: "text/html"
- multipart_encoder: ${multipart_encoder($field_name, $file_path, $file_type)}
field_name: "file"
file_path: "LICENSE"
file_type: "text/html"
multipart_encoder: ${multipart_encoder($field_name, $file_path, $file_type)}
request:
url: /post
method: POST

View File

@@ -419,7 +419,7 @@ class TestApi(ApiServerUnittest):
self.assertEqual(len(testcase_tests), 2)
self.assertIn("api", testcase_tests[0])
self.assertEqual(testcase_tests[0]["name"], "get token (setup)")
self.assertIsInstance(testcase_tests[0]["variables"], list)
self.assertIsInstance(testcase_tests[0]["variables"], dict)
self.assertIn("api_def", testcase_tests[0])
self.assertEqual(testcase_tests[0]["api_def"]["request"]["url"], "/api/get-token")

View File

@@ -247,11 +247,11 @@ class TestModuleLoader(unittest.TestCase):
tests_mapping["project_mapping"]["functions"]
)
self.assertEqual(
testcases[0]["config"]["variables"][1]["var_c"],
testcases[0]["config"]["variables"]["var_c"],
"${sum_two(1, 2)}"
)
self.assertEqual(
testcases[0]["config"]["variables"][2]["PROJECT_KEY"],
testcases[0]["config"]["variables"]["PROJECT_KEY"],
"${ENV(PROJECT_KEY)}"
)
@@ -287,7 +287,7 @@ class TestSuiteLoader(unittest.TestCase):
raw_testcase = loader.load_file("tests/testsuites/create_users.yml")
testcase = loader.load_testcase(raw_testcase)
self.assertEqual(testcase["config"]["name"], "create users with uid")
self.assertIn("device_sn", testcase["config"]["variables"][0])
self.assertIn("device_sn", testcase["config"]["variables"])
self.assertEqual(len(testcase["tests"]), 2)
self.assertEqual(testcase["tests"][0]["name"], "create user 1000 and check result.")
self.assertEqual(testcase["tests"][0]["testcase_def"]["config"]["name"], "create user and check result.")
@@ -378,7 +378,7 @@ class TestSuiteLoader(unittest.TestCase):
tests_mapping = loader.load_tests(path)
project_mapping = tests_mapping["project_mapping"]
testcases_list = tests_mapping["testcases"]
self.assertIn({'device_sn': '${gen_random_string(15)}'}, testcases_list[0]["config"]["variables"])
self.assertIn('device_sn', testcases_list[0]["config"]["variables"])
self.assertIn("gen_md5", project_mapping["functions"])
self.assertIn("base_url", testcases_list[0]["config"])
test_dict0 = testcases_list[0]["tests"][0]
@@ -405,7 +405,7 @@ class TestSuiteLoader(unittest.TestCase):
)
self.assertEqual(
{'device_sn': '${gen_random_string(15)}'},
testcases_list[0]["config"]["variables"][0]
testcases_list[0]["config"]["variables"]
)
testcase0 = testcases_list[0]["tests"][0]
self.assertEqual(
@@ -424,7 +424,7 @@ class TestSuiteLoader(unittest.TestCase):
)
self.assertEqual(
{'uid': 1001},
testcase1["variables"][0]
testcase1["variables"]
)
def test_load_folder_content(self):

View File

@@ -435,11 +435,11 @@ class TestParser(unittest.TestCase):
tests_mapping = loader.load_tests(testcase_file_path)
testcases = tests_mapping["testcases"]
self.assertEqual(
testcases[0]["config"]["variables"][1]["var_c"],
testcases[0]["config"]["variables"]["var_c"],
"${sum_two(1, 2)}"
)
self.assertEqual(
testcases[0]["config"]["variables"][2]["PROJECT_KEY"],
testcases[0]["config"]["variables"]["PROJECT_KEY"],
"${ENV(PROJECT_KEY)}"
)
parser.parse_tests(tests_mapping)
@@ -478,6 +478,7 @@ class TestParser(unittest.TestCase):
}
parser.parse_tests(tests_mapping)
test_dict1_variables = tests_mapping["testcases"][0]["tests"][0]["variables"]
self.assertEqual(test_dict1_variables["creator"], "user_test_001")
self.assertEqual(test_dict1_variables["username"], "user_test_001")
def test_parse_environ(self):

View File

@@ -3,8 +3,8 @@
name: "create user and check result."
id: create_and_check
variables:
- uid: 9001
- device_sn: "TESTCASE_CREATE_XXX"
uid: 9001
device_sn: "TESTCASE_CREATE_XXX"
base_url: "http://127.0.0.1:5000"
- test:
@@ -17,8 +17,8 @@
name: make sure user $uid does not exist
api: get_user
variables:
- uid: $uid
- token: $token
uid: $uid
token: $token
validate:
- eq: ["status_code", 404]
- eq: ["content.success", false]
@@ -27,10 +27,10 @@
name: create user $uid
api: create_user
variables:
- user_name: "user1"
- user_password: "123456"
- uid: $uid
- token: $token
user_name: "user1"
user_password: "123456"
uid: $uid
token: $token
validate:
- eq: ["status_code", 201]
- eq: ["content.success", true]
@@ -39,8 +39,8 @@
name: check if user $uid exists
api: get_user
variables:
- uid: $uid
- token: $token
uid: $uid
token: $token
validate:
- eq: ["status_code", 200]
- eq: ["content.success", true]

View File

@@ -2,10 +2,10 @@
name: "setup and reset all."
id: setup_and_reset
variables:
- user_agent: 'iOS/10.3'
- device_sn: "TESTCASE_SETUP_XXX"
- os_platform: 'ios'
- app_version: '2.8.6'
user_agent: 'iOS/10.3'
device_sn: "TESTCASE_SETUP_XXX"
os_platform: 'ios'
app_version: '2.8.6'
base_url: "http://127.0.0.1:5000"
verify: False
output:
@@ -15,10 +15,10 @@
name: get token (setup)
api: get_token
variables:
- user_agent: 'iOS/10.3'
- device_sn: $device_sn
- os_platform: 'ios'
- app_version: '2.8.6'
user_agent: 'iOS/10.3'
device_sn: $device_sn
os_platform: 'ios'
app_version: '2.8.6'
extract:
- token: content.token
validate:
@@ -29,4 +29,4 @@
name: reset all users
api: reset_all
variables:
- token: $token
token: $token

View File

@@ -1,17 +1,17 @@
- config:
name: create users with uid
variables:
- device_sn: ${gen_random_string(15)}
device_sn: ${gen_random_string(15)}
base_url: "http://127.0.0.1:5000"
- test:
name: create user 1000 and check result.
testcase: testcases/create_and_check.yml
variables:
- uid: 1000
uid: 1000
- test:
name: create user 1001 and check result.
testcase: testcases/create_and_check.yml
variables:
- uid: 1001
uid: 1001