1. 程式人生 > 其它 >隨機生成測試資料<faker模組的基本使用>

隨機生成測試資料<faker模組的基本使用>

前言

在測試的過程中,我們經常需要造一些測試資料,這裡給大家介紹一個造測試資料的利器 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'
)