随机字符的场景大致有以下场景:
1.产生随机字符串 无数字
2.产生随机长度的字符串 无数字、有数字
3.产生随机手机号
4.产生随机n位的数字
5.产生随机n以内的数字
随机使用的两种思路如下:
一:使用random.randint(0,n)
定义一个字符数据源的数组,要产生多长的字符串就循环调用多少次random.randint(0,n),n=数据源数组的长度,在这个数据源数组中选择随机位置的字符,然后进行拼接返回
def generate_random_str(randomlength=16):
"""
生成一个指定长度的随机字符串
"""
random_str =''
base_str ='abcdefghigklmnopqrstuvwxyzabcdefghigklmnopqrstuvwxyz0123456789'
length =len(base_str) -1
for i in range(randomlength):
random_str =base_str[random.randint(0, length)]
return random_str
if __name__ == '__main__':
print(generate_random_str(30))
二:使用random.choice随机选择,需要多少长度就随机多少次
这里补充以下choice的用法:
random.choice() 在参数中随机产生返回一个对象 参数可以使list,也可以是string、元祖
import random
random.choice([1, 2, 3, 5, 9]) #返回5
random.choice('a string') #返回n
def getrandom(randomlength=16):
"""
生成一个指定长度的随机字符串
"""
digits=0123456789
ascii_letters=abcdefghigklmnopqrstuvwxyzabcdefghijklmnopqrstuvwxyz
str_list =[random.choice(digits ascii_letters) for i in range(randomlength)]
random_str =''.join(str_list)
return random_str
最后,使用了dict字典实现按照mode按使用场景生成不同的字符串
def getrandomstring(mode="mixdigitletter", len=15):
#按照不同模式生成随机字符串
upperletter = "abcdefghijklmnopqrstuvwxyz"
lowerletter = "abcdefghigklmnopqrstuvwxyz"
digits="0123456789"
wpecialcharacters = "!@#$%&_-. ="
randommap ={"digit":digits,"upper":upperletter,"lower":lowerletter,"mixdigitletter":upperletter lowerletter digits,"mixletter":upperletter lowerletter,"mixdigitlettercharcter":upperletter lowerletter digits wpecialcharacters}
return getrandom(randommap[mode],len)
对于第5中产生随机n以内的数字,直接使用random.randomint(0,n)即可
如,产生100以内的整数
print(random.randint(0,100))
三、使用faker库产生随机数据
有时我们测试用例中会用到一些测试数据,比如人员信息(姓名、地址、邮箱、电话),可能姓名、地址这种不太好随机,生产数据又需要做脱敏处理
faker提供的强大的随机能力,支持生成多种语言的随机信息(姓名、地址、邮箱、电话、密码、一段文字、一句话等待),非常好用
from faker import faker
faker = faker(locale='zh_cn')
for i in range(10):
print(faker.name() ',' faker.address() ',' faker.email() ',' faker.phone_number())
print(faker.password())
结果
faker使用参考:
https://www.coonote.com/python-note/python-faker.html