parse_parameters: add csv support

This commit is contained in:
debugtalk
2018-08-22 18:35:15 +08:00
parent c8bb8b6fb3
commit 31f72356dd
4 changed files with 47 additions and 103 deletions

View File

@@ -5,72 +5,6 @@ import copy
from httprunner import exceptions, logger, parser, utils
from httprunner.compat import OrderedDict
# def parse_parameters(parameters, testset_path=None):
# """ parse parameters and generate cartesian product.
# Args:
# parameters (list) parameters: parameter name and value in list
# parameter value may be in three types:
# (1) data list, e.g. ["iOS/10.1", "iOS/10.2", "iOS/10.3"]
# (2) call built-in parameterize function, "${parameterize(account.csv)}"
# (3) call custom function in debugtalk.py, "${gen_app_version()}"
# testset_path (str): testset file path, used for locating csv file and debugtalk.py
# Returns:
# list: cartesian product list
# Examples:
# >>> parameters = [
# {"user_agent": ["iOS/10.1", "iOS/10.2", "iOS/10.3"]},
# {"username-password": "${parameterize(account.csv)}"},
# {"app_version": "${gen_app_version()}"}
# ]
# >>> parse_parameters(parameters)
# """
# testcase_parser = TestcaseParser(file_path=testset_path)
# parsed_parameters_list = []
# for parameter in parameters:
# parameter_name, parameter_content = list(parameter.items())[0]
# parameter_name_list = parameter_name.split("-")
# if isinstance(parameter_content, list):
# # (1) data list
# # e.g. {"app_version": ["2.8.5", "2.8.6"]}
# # => [{"app_version": "2.8.5", "app_version": "2.8.6"}]
# # e.g. {"username-password": [["user1", "111111"], ["test2", "222222"]}
# # => [{"username": "user1", "password": "111111"}, {"username": "user2", "password": "222222"}]
# parameter_content_list = []
# for parameter_item in parameter_content:
# if not isinstance(parameter_item, (list, tuple)):
# # "2.8.5" => ["2.8.5"]
# parameter_item = [parameter_item]
# # ["app_version"], ["2.8.5"] => {"app_version": "2.8.5"}
# # ["username", "password"], ["user1", "111111"] => {"username": "user1", "password": "111111"}
# parameter_content_dict = dict(zip(parameter_name_list, parameter_item))
# parameter_content_list.append(parameter_content_dict)
# else:
# # (2) & (3)
# parsed_parameter_content = testcase_parser.eval_content_with_bindings(parameter_content)
# # e.g. [{'app_version': '2.8.5'}, {'app_version': '2.8.6'}]
# # e.g. [{"username": "user1", "password": "111111"}, {"username": "user2", "password": "222222"}]
# if not isinstance(parsed_parameter_content, list):
# raise exceptions.ParamsError("parameters syntax error!")
# parameter_content_list = [
# # get subset by parameter name
# {key: parameter_item[key] for key in parameter_name_list}
# for parameter_item in parsed_parameter_content
# ]
# parsed_parameters_list.append(parameter_content_list)
# return utils.gen_cartesian_product(*parsed_parameters_list)
class Context(object):
""" Manages context functions and variables.