隨機生成測試資料<faker模組的基本使用>
阿新 • • 發佈:2021-06-20
前言
在測試的過程中,我們經常需要造一些測試資料,這裡給大家介紹一個造測試資料的利器 Faker
庫,可以幫我們隨機生成偽資料。
Faker介紹
Faker 是python的一個第三方模組,主要用來生成偽資料,無需再手動生成或者手寫隨機數來生成資料,只需要呼叫 Faker 提供的方法,即可快速完成資料的生成。
github 專案地址:https://github.com/joke2k/faker
官方文件:https://faker.readthedocs.io/en/master/index.html
基本使用
要求python版本大於等於3.6,pip安裝
pip install Faker
匯入模組
from faker import Faker
初始化
fake = Faker()
#預設生成美國英文資料還可以選擇語言,輸出多個國家的語言都可以支援
簡體中文:fake=Faker(locale='zh_CN')
繁體中文:zh_TW
美國英文:en_US
英國英文:en_GB
德文:de_DE
日文:ja_JP
韓文:ko_KR
法文:fr_FR
利用Faker物件呼叫方法,呼叫方法的返回值就是隨機的資料
常用方法
https://faker.readthedocs.io/en/master/locales/zh_CN.html 由於主要使用中文資料,所以提供常見的方法示例是中文的。想要了解其他的,可以在官網點選其他語言,參考示例結果,不過方法大體上都是相同的
1.基本資訊類
ssn():生成身份證號 bs():隨機公司服務名 company():隨機公司名(長) company_prefix():隨機公司名(短) company_suffix():公司性質 credit_card_expire():隨機信用卡到期日 credit_card_full():生成完整信用卡資訊 credit_card_number():信用卡號 credit_card_provider():信用卡型別 credit_card_security_code():信用卡安全碼 job():隨機職位 first_name_female():女性名 first_name_male():男性名 last_name_female():女姓 last_name_male():男姓 name():隨機生成全名 name_female():男性全名 name_male():女性全名 phone_number():隨機生成手機號 phonenumber_prefix():隨機生成手機號段
2.地理資訊類
city_suffix():市,縣
country():國家
country_code():國家編碼
district():區
geo_coordinate():地理座標
latitude():地理座標(緯度)
longitude():地理座標(經度)
postcode():郵編
province():省份
address():詳細地址
street_address():街道地址
street_name():街道名
street_suffix():街、路
3.網路基礎資訊類
domain_name():生成域名
domain_word():域詞(即,不包含字尾)
ipv4():隨機IP4地址
ipv6():隨機IP6地址
mac_address():隨機MAC地址
tld():網址域名字尾(.com,.net.cn,等等,不包括.)
uri():隨機URI地址
uri_extension():網址檔案字尾
uri_page():網址檔案(不包含字尾)
uri_path():網址檔案路徑(不包含檔名)
url():隨機URL地址
user_name():隨機使用者名稱
image_url():隨機URL地址
4.郵箱類
fake.ascii_company_email():隨機ASCII公司郵箱名
fake.ascii_email():隨機ASCII郵箱:company_email():email():safe_email():安全郵箱
5.瀏覽器引數
chrome():隨機生成Chrome的瀏覽器user_agent資訊
firefox():隨機生成FireFox的瀏覽器user_agent資訊
internet_explorer():隨機生成IE的瀏覽器user_agent資訊
opera():隨機生成Opera的瀏覽器user_agent資訊
safari():隨機生成Safari的瀏覽器user_agent資訊
linux_platform_token():隨機Linux資訊
user_agent():隨機user_agent資訊
6.時間資訊類
date():隨機日期
date_between():隨機生成指定範圍內日期,引數:start_date,end_date
date_between_dates():隨機生成指定範圍內日期,用法同上
date_object():隨機生產從1970-1-1到指定日期的隨機日期。date_time():隨機生成指定時間(1970年1月1日至今)
date_time_ad():生成公元1年到現在的隨機時間
date_time_between():用法同dates
future_date():未來日期
future_datetime():未來時間
month():隨機月份
month_name():隨機月份(英文)
past_date():隨機生成已經過去的日期
past_datetime():隨機生成已經過去的時間
time():隨機24小時時間
timedelta():隨機獲取時間差
time_object():隨機24小時時間,time物件
time_series():隨機TimeSeries物件
timezone():隨機時區
unix_time():隨機Unix時間
year():隨機年份
7.數字
numerify():三位隨機數字
random_digit():0~9隨機數
random_digit_not_null():1~9的隨機數
random_int():隨機數字,預設0~9999,可以通過設定min,max來設定
random_number():隨機數字,引數digits設定生成的數字位數
pyfloat():left_digits=5 #生成的整數位數, right_digits=2 #生成的小數位數, positive=True #是否只有正數
pyint():隨機Int數字(參考random_int()引數)
pydecimal():隨機Decimal數字(參考pyfloat引數)
8.文字、加密類
pystr():隨機字串
random_element():隨機字母
random_letter():隨機字母
paragraph():隨機生成一個段落
paragraphs():隨機生成多個段落
sentence():隨機生成一句話
sentences():隨機生成多句話,與段落類似
text():隨機生成一篇文章
word():隨機生成詞語
words():隨機生成多個詞語,用法與段落,句子,類似
binary():隨機生成二進位制編碼
boolean():True/False
language_code():隨機生成兩位語言編碼
locale():隨機生成語言/國際 資訊
md5():隨機生成MD5
null_boolean():NULL/True/False
password():隨機生成密碼,可選引數:length:密碼長度;special_chars:是否能使用特殊字元;digits:是否包含數字;upper_case:是否包含大寫字母;lower_case:是否包含小寫字母
sha1():隨機SHA1
sha256():隨機SHA256
uuid4():隨機UUID
9.其它方法
profile():隨機生成檔案資訊
simple_profile():隨機生成簡單檔案資訊
pyiterable() 迭代器
pylist() 列表
pyset() 集合
pystruct() 結構體
pytuple() 元祖
pydict() 字典
使用示例
生成隨機的資料表資訊
1.利用pymysql連線資料庫
2.建立表
3.利用fake格式化要插入的資料
4.利用pymysql執行插入語句
import pymysql
from faker import Faker
conn=pymysql.connect(host="localhost",port=3306,user="root",password="123456",db="it",charset="utf8")
cursor=conn.cursor()
#這裡給出表結構,如果使用已存在的表,可以不建立表。
sql="""
create table user(
id int PRIMARY KEY auto_increment,
username VARCHAR(20),
password VARCHAR(20),
address VARCHAR(35)
)
"""
cursor.execute(sql)
fake=Faker("zh-CN")
for i in range(20):
sql="""insert into user(username,password,address)
values('%s','%s','%s')"""\
%(fake.user_name(),fake.password(special_chars=False),fake.address())
cursor.execute(sql)
conn.commit()
cursor.close()
conn.close()
生成日誌格式的資料
根據具體的使用場景,生成自己需要的資料
根據提供的日誌規則使用迴圈將測試資料寫入日誌檔案,同時也需要考慮到一些資料的關聯性
# 玩家建立日誌
creat_date = (
f'{last_time}' # 時間,隨機生成已經過去的時間
f'#create' # 日誌標識
f'#mock' # 平臺標識
f'#{servers}' # 伺服器ID
f'#{platformID}' # 平臺使用者ID
f'#{userid}' # 遊戲角色ID
f'#{username}' # 遊戲角色名
f'#{uniqueID}' # 玩家的全服唯一標識:聯運標識_主服id_聯運服id_角色編號
f'#1' # 裝置評級
f'#{TestData.get_terrace(self)}' # 終端標識
f'#{TestData.get_jre(self)}' # 執行時環境
f'\n') # 每一條列印結束 換行
# 充值日誌格式
pay_data = (
f'{now_time}' # 時間
f'#pay' # 日誌標識
f'#mock' # 平臺標識
f'#{platformID}' # 平臺使用者ID
f'#{userid}' # 遊戲角色ID
f'#{username}' # 遊戲角色名
f'#{TestData.get_RandomNumber(self, 1, 100)}' # 角色等級
f'#{TestData.get_RandomNumber(self, 1, 10000)}' # 充值金額
f'#{TestData.get_RandomNumber(self, 200, 300)}' # 商品編號
# f'#{}' # 單服訂單唯一標識
# f'#{}' # 遊戲訂單號
# f'#{}' # 平臺訂單號
f'#{servers}' # 伺服器ID
f'#{uniqueID}' # 玩家的全服唯一標識:聯運標識_主服id_聯運服id_角色編號
f'\n'
)