博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
测试用例设计-接口参数基础类验证测试 自动生成测试用例
阅读量:5263 次
发布时间:2019-06-14

本文共 3332 字,大约阅读时间需要 11 分钟。

 

项目中,api的请求参数基本都是json格式

请求参数 类型 基本 string,int,bool,datetime,decimal,泛型,集合

假定一个api的请求参数为以下json格式的字符串,基本包含了常用的类型

dic1 = """{
"a": [{"aa": "string"}], "b": ["string"], "c": "string", "d": "bool", "e": "int", "f": {"ff": "string", "gg": "int"} }"""
需要对每一个参数做基础验证,比如说string类型的参数传"",NULL,特殊字符,超长字符等等 需要对每个参数依次替换,生成对应的测试用例 先指定每个类型的需要测试的范围
def get_type_base_value(_type):     """根据类型获取基础测试的值"""     if _type == 'string':         #  string类型测试,空,NULL,特殊字符,脚本,正常字符,超长字符         return ["", None, "!@#$%^&*()_+<>?:{}|~`", "
alert(0)
", "test_string","qwertyuiooasdfghjklzxcvbnmazxwsedrtfrrfugyyyfyhjjjkgughsdjgagfjdbdbsddkakdfhakjnnnnnnnnnnnnnkjguyy234567iujwertyuiosdfghjkxcvbmsdfghjkqwertyuizxcvbnasdfghjwertyui234tydfgcvdfrc c1qaz2wsx3edc4rfv5tgb6yhn7ujm8ik9ol0pqwertyuiopdfghjklzxcvbnm"] elif _type == 'time': # 时间类型测试 错误的年,月,日,非时间类值, 当前时间 return ["0000-01-01", "1600-01-01", "2010-13-30", "2010-02-30", "not_time", time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())] elif _type == 'int': # 整型测试 非数字类型,溢出, 0 return ["not_int", 12567890123456781234567123451234567, -12345678912345678912345678901234567, 0] elif _type == 'decimal': # 浮点测试 非数字类型,溢出, 0 return ["not_decimal", 12567890123456781234567123451234567.88, -12345678912345678912345678901234567.50, 0.00] elif _type == 'bool': # 布尔类型 非布尔类型, True, False return ["not_bool", True, False] else: # 递归方法 return recursive_case(_type)
然后开始替换参数值
def create_base_case(_source):   return_list = []    for k, v in _source.items():     for _value in get_type_base_value(v):             dic_cp2 = copy.deepcopy(_source)             dic_cp2[k] = _value             return_list.append(dic_cp2)     #  改成 return_list.append(replace_default(dic_cp2))   非测试参数替换成替换默认值   return return_list
简单类型都被替换了,复杂类型则需要递归替换里面的参数
def recursive_case(_type):     """递归,返回特殊类型的取值范围"""     if isinstance(_type, list):         new_list = []         if isinstance(_type[0], dict):             t_value_list = create_base_case(_type[0])  # 基础测试用例设计             for t_value in t_value_list:                 new_list.append([t_value])         else:             for _value in get_type_base_value(_type[0]):                 new_list.append([_value])         return new_list     elif isinstance(_type, dict):         return create_base_case(_type)     else:         return [None] 除却需要测试的值,其他类型全部替换成默认值
def replace_default(dic):     """替换成默认值"""     for k, v in dic.items():         if isinstance(v, list):             if isinstance(v[0], dict):                 dic[k] = [replace_default(v[0])]             else:                 dic[k] = [default_value(v[0])]         elif isinstance(v, dict):             dic[k] = replace_default(v)         else:             dic[k] = default_value(v)     return dic def default_value(_type):     if _type == 'string':         return "default_string"     elif _type == 'time':         return time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())     elif _type == 'int':         return 0     elif _type == 'decimal':         return 0.00     elif _type == 'bool':         return True     else:         return _type
测试一下
case_list2 = create_base_case(dic1) print(len(case_list2)) for case in case_list2:     print(case)

实际应用

 

 

 

 
  
 

转载于:https://www.cnblogs.com/twofool/p/10396710.html

你可能感兴趣的文章
BZOJ4552 HEOI/TJOI2016 排序 线段树、二分答案
查看>>
13. 用Roberts、Sobel、Prewitt和Laplace算子对一幅灰度图像进行边缘检测。观察异同。...
查看>>
Web 安全入门-书籍及建议
查看>>
prim算法基础详解(无向赋权图的最小生成树MST)
查看>>
vijos1404 遭遇战
查看>>
Androidstudio创建项目jdk版本问题
查看>>
WCF 第五章 行为 实现事务(操作行为)
查看>>
WCF 第七章 寄宿 在一个IIS寄宿服务中开启ASMX特性
查看>>
jsp小测文件上传+servlet+分页 47/32(继续努力!)
查看>>
K - Leapin' Lizards - HDU 2732(最大流)
查看>>
987654321 problem - SGU 107(找规律)
查看>>
如何学习算法
查看>>
MAVEN设置HTTP代理
查看>>
Android ListView分页加载时图片显示问题
查看>>
秋季学习总结
查看>>
LoadRunner12 Java Vuser API语法举例
查看>>
VS2013中如何解决error C4996: 'fopen'问题
查看>>
VS2013 中 CString类型转换为LPCSTR类型
查看>>
输入一个整形数组,求数组中连续的子数组使其和最大
查看>>
九大内置对象!!!
查看>>