自动化测试时,有如下一些情况:
- 注册账号时,如果已经注册过的账号,再次运行脚本时就会失败。
为了避免这种情况,我们可以使用时间戳或者随机函数增加一些随机内容。- 界面上有很多数据,我们不关注具体数据的执行结果,只关注操作过程。
我们就可以批量提取数据(find_elements),然后随机选择一条数据操作。
这些情况都会用到随机函数库。
Python 中的随机函数库 random
,提供了各种随机数据生成(int、float、string、list等)。
random
库是 Python 自带的一个标准库。直接引入即可使用。
import random
该库中主要函数如下:
random()
生成一个0 ~ 1
之间的随机浮点数,范围 0 <= n < 1.0
。
注意,函数名也叫 random, 和库名一样。
>>> random.random()
0.5449476270094615
uniform(a, b)
uniform 方法, 返回 a 到 b
之间的随机浮点数,范围 [a, b] 或 [a, b),取决于四舍五入,a不一定要比b小。
>>> random.uniform(50, 100)
76.81733455677832
>>> random.uniform(100, 50)
52.98730193316595
randint(a, b)
randint 方法, 返回a 到 b
之间的整数,范围 [a, b],注意:传入参数必须是整数,a 一定要比 b 小。
>>> random.randint(50, 100)
54
>>> random.randint(100, 50)
# ValueError: empty range for randrange() (100,51, -49)
randrange([start], stop[, step])
randrange 函数返回一个区间内的整数,可以设置step。
注意,只能传入整数。
random.randrange(10, 100, 2)
16
# 结果相当于从[10, 12, 14, 16, … 96, 98]序列中获取一个随机数。
start
和 stop
参数是可选参数。
>>>random.randrange(100)
58
# 随机取 0 到 100 中的一个整数
>>> random.randrange(80, 100)
99
# 随机取 80 到 100 之间的一个整数
choice(sequence)
choice 从序列 sequence
中随机获取一个元素,list,tuple,字符串
都属于序列。
random.randrange(10, 100, 2) 在结果上与 random.choice(range(10, 100, 2) 等效。
>>> random.choice(("stone", "scissors", "paper"))
'stone'
# 从元组中取值
>>> random.choice(["stone", "scissors", "paper"])
'scissors'
# 从列表中取值
>>> random.choice("Random")
'm'
# 从字符串中取值
shuffle(x)
shuffle 用于将列表x
中的元素打乱,俗称为洗牌。会修改原有序列。
>>> poker = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
>>> random.shuffle(poker)
>>> poker
['4', '10', '8', '3', 'J', '6', '2', '7', '9', 'Q', '5', 'K', 'A']
sample(sequence, k)
sample 函数从指定序列中随机获取k个元素作为一个列表返回,sample函数不会修改原有序列。
>>> poker = ["A", "2", "3", "4", "5", "6", "7", "8", "9", "10", "J", "Q", "K"]
>>> random.sample(poker, 5)
['4', '3', '10', '2', 'Q']
可以借助 String 模块中定义的字符串常量来生成随机的字符串。
>>> import string
>>> string.digits
'0123456789'
# 数字
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
# 大小写字母
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
# 特殊符号
随机生成账号:
import string
import random
def generate_user(n):
'''生成长度为 n 的随机账号'''
# 数字+大小写字母组合
s = string.digits + string.ascii_letters
words = random.sample(s, n)
return ''.join(words)
print(generate_user(8))
# 4ruZHV6g