一、测试数据动态生成
动态生成手机号码,来完成完全自动化的回归测试
1. 随机库random
1.1 生成[0-1)
之间的随机浮点数(左闭右开)
import random
random.random()
输出:
0.8825516238816438
random.random()
输出:
0.6465163461469168
1.2 生成[a,b]
之间的随机整数(左闭右闭)
random.randint(1,10)
输出:
4
random.randint(-10,10)
-9
1.3 生成[a,b)
之间的随机整数(左闭右开)
random.randrange(-1,1)
输出:
-1
1.4 在一个序列中随机选择一个元素
# 有一个列表,要求随机抽取其中一个元素
ls = list('abcdefg') # 0-len(ls)-1
index = random.randrange(0,len(ls))
ls[index]
输出:
'b'
random.choice(ls)
输出:
'b'
dir(random)
查看random方法的使用
['BPF',
'LOG4',
'NV_MAGICCONST',
'RECIP_BPF',
'Random',
'SG_MAGICCONST',
'SystemRandom',
'TWOPI',
'_Sequence',
'_Set',
'__all__',
'__builtins__',
'__cached__',
'__doc__',
'__file__',
'__loader__',
'__name__',
'__package__',
'__spec__',
'_accumulate',
'_acos',
'_bisect',
'_ceil',
'_cos',
'_e',
'_exp',
'_floor',
'_inst',
'_log',
'_os',
'_pi',
'_random',
'_repeat',
'_sha512',
'_sin',
'_sqrt',
'_test',
'_test_generator',
'_urandom',
'_warn',
'betavariate',
'choice',
'choices',
'expovariate',
'gammavariate',
'gauss',
'getrandbits',
'getstate',
'lognormvariate',
'normalvariate',
'paretovariate',
'randbytes',
'randint',
'random',
'randrange',
'sample',
'seed',
'setstate',
'shuffle',
'triangular',
'uniform',
'vonmisesvariate',
'weibullvariate']
2. 封装生成手机号码的函数
功能分析:
随机生成符合规则的手机号码
目前手机号码的不严格规则如下:
A. 11位数字
B. 第一位是1
C. 第二位数字是3-9具体项目要结合后台代码规则进行处理
生成手机号码要没有使用过 需要到数据库中去校验
#!/usr/bin/env python
# -*- coding: utf-8 -*-
# @Time : 2021/11/11 20:51
# @Author : shisuiyi
# @File : data_handler.py
# @Software: win10 Tensorflow1.13.1 python3.9
# 测试数据处理模块
def general_phone():
"""
随机生成手机号码
@return:
"""
# phone = ['1', str(random.randint(3, 9))]
# for _ in range(9):
# phone.append(str(random.randint(0, 9)))
# return ''.join(phone) # str.join(item)
phone = ['158']
for _ in range(8):
phone.append(random.choice('0123456789'))
return ''.join(phone)
if __name__ == '__main__':
# res = get_data_from_excel(setting.TEST_DATA_FILE)
# print(res)
print(general_phone())
2.2 Faker库
pip install faker
import faker
f = faker.Faker(locale='zh-cn') # 设置地区
f.phone_number()
输出:
'13708890210'
f.name()
输出:
'王玉梅'
f.address()
输出:
'山东省琳市东城黄路W座 542406'
f.ipv4()
输出:
'174.75.64.215'
3. 应用到项目中
3.1 思路
在用例数据中添加生成手机号码的标志位,设计这个标志位为
$特殊的变量名$
,例如生成手机号码的标志位为
$phone_number$
什么字段里有可能有这个标志
request_data
sql
url
检查用例数据,如果出现了标志则动态生成对应数据并替换
3.2 用例数据修改
excle
测试用例中的request_data内容
{
"headers": {"X-Lemonban-Media-Type": "lemonban.v1"},
"json": {"mobile_phone":$phone_number$,"pwd":"12345678"}
}
替换手机号:
@list_data(cases)
def test_register(self, item):
logger.info('>>>>>>>用例{}开始执行>>>>>>>>'.format(item['title']))
# 1. 处理测试数据
# 是否有动态生成手机号码
item = json.dumps(item)
if '$phone_number$' in item:
phone = generate_no_use_phone()
item = item.replace('$phone_number$', phone)
item = json.loads(item)
# 把请求参数处理好,request_data是一个json字符串,怎么通过封装好的发送请求的函数发送
# expect_data也是一个json字符串,也需要loads成python对象
request_data = json.loads(item['request_data'])
expect_data = json.loads(item['expect_data'])
评论