自動化測試時,有如下一些情況:
- 注冊賬號時,如果已經(jīng)注冊過的賬號,再次運行腳本時就會失敗。
為了避免這種情況,我們可以使用時間戳或者隨機函數(shù)增加一些隨機內(nèi)容。- 界面上有很多數(shù)據(jù),我們不關(guān)注具體數(shù)據(jù)的執(zhí)行結(jié)果,只關(guān)注操作過程。
我們就可以批量提取數(shù)據(jù)(find_elements),然后隨機選擇一條數(shù)據(jù)操作。
這些情況都會用到隨機函數(shù)庫。
Python 中的隨機函數(shù)庫 random,提供了各種隨機數(shù)據(jù)生成(int、float、string、list等)。
random庫是 Python 自帶的一個標準庫。直接引入即可使用。
import random
該庫中主要函數(shù)如下:
random()
生成一個0 ~ 1之間的隨機浮點數(shù),范圍 0 <= n < 1.0。
注意,函數(shù)名也叫 random, 和庫名一樣。
>>> random.random()
0.5449476270094615
uniform(a, b)
uniform 方法, 返回 a 到 b 之間的隨機浮點數(shù),范圍 [a, b] 或 [a, b),取決于四舍五入,a不一定要比b小。
>>> random.uniform(50, 100)
76.81733455677832
>>> random.uniform(100, 50)
52.98730193316595
randint(a, b)
randint 方法, 返回a 到 b之間的整數(shù),范圍 [a, b],注意:傳入?yún)?shù)必須是整數(shù),a 一定要比 b 小。
>>> random.randint(50, 100)
54
>>> random.randint(100, 50)
# ValueError: empty range for randrange() (100,51, -49)
randrange([start], stop[, step])
randrange 函數(shù)返回一個區(qū)間內(nèi)的整數(shù),可以設(shè)置step。
注意,只能傳入整數(shù)。
random.randrange(10, 100, 2)
16
# 結(jié)果相當(dāng)于從[10, 12, 14, 16, … 96, 98]序列中獲取一個隨機數(shù)。
start 和 stop 參數(shù)是可選參數(shù)。
>>>random.randrange(100)
58
# 隨機取 0 到 100 中的一個整數(shù)
>>> random.randrange(80, 100)
99
# 隨機取 80 到 100 之間的一個整數(shù)
choice(sequence)
choice 從序列 sequence中隨機獲取一個元素,list,tuple,字符串都屬于序列。
random.randrange(10, 100, 2) 在結(jié)果上與 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 函數(shù)從指定序列中隨機獲取k個元素作為一個列表返回,sample函數(shù)不會修改原有序列。
>>> 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'
# 數(shù)字
>>> string.ascii_letters
'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
# 大小寫字母
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
# 特殊符號
隨機生成賬號:
import string
import random
def generate_user(n):
'''生成長度為 n 的隨機賬號'''
# 數(shù)字+大小寫字母組合
s = string.digits + string.ascii_letters
words = random.sample(s, n)
return ''.join(words)
print(generate_user(8))
# 4ruZHV6g