Python faker生成測試資料
我們在開發中常常需要利用一些假資料來做測試,這種時候就可以使用Faker
來偽造資料從而用來測試.
Faker是一個可以讓你生成偽造資料的Python包。當你需要初始化資料庫,建立美觀的XML文件,不斷產生資料來進行壓力測試或者想從生產伺服器上拉取匿名資料的時候,Faker將是你最棒的選擇。
安裝
Faker庫已經被提交到pip,可以通過 pip 工具直接安裝。
1 | # pip install Faker |
使用
faker 提供了一個工廠函式,用來建立資料。
1 2 |
|
當然,也提供一個Faker類來建立例項
1 2 3 4 5 6 7 8 9 |
'Audrey Robinson'
'4266 Fritz Shore\nLewischester, AL 24594-7593'
'Odio porro unde sint aliquid beatae. Ex officiis porro nostrum laboriosam deleniti nisi. A aut molestiae ratione ipsam perspiciatis facere.\nDicta incidunt at deleniti recusandae accusamus quisquam.' |
每次呼叫方法fake.name()
都會產生不同的(隨機)結果。這是因為 faker 向faker.Generator.method_name()
呼叫了faker.Generator.format(method_name)
。
本地化
在用Faker()
建立 faker 例項時,可以為例項指定本地化區域引數,預設為 ‘en_US`,因此生成的姓名、地址等都是美國的。
要生成中文偽造資料,只需:
1 | >>> fake = Faker("zh_CN") |
方法介紹
如上面例子,每次呼叫 fake 例項的name()
方法時,都會產生不同隨機姓名。fake 例項還有很多方法可用,這些方法分為以下幾類:
- address 地址
- person 人物類:性別、姓名等
- barcode 條碼類
- color 顏色類
- company 公司類:公司名、公司email、公司名字首等
- credit_card 銀行卡類:卡號、有效期、型別等
- currency 貨幣
- date_time 時間日期類:日期、年、月等
- file 檔案類:檔名、檔案型別、副檔名等
- internet 網際網路類
- job 工作
- lorem 亂數假文
- misc 雜項類
- phone_number 手機號碼類:手機號、運營商號段
- python python資料
- profile 人物描述資訊:姓名、性別、地址、公司等
- ssn 社會安全碼(身份證號碼)
- user_agent 使用者代理
address 地址
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | '奧地利' '鄭州市' '市' '河北省巢湖縣懷柔南寧路f座 169812' '邯鄲路W座' '合肥路' '314548' Decimal('68.0228435') Decimal('155.964341') |
person 人物
1 2 3 4 5 6 7 8 9 10 11 12 13 14 | '單玉珍' '潘' '琴' '官平' '安' '文' '許穎' |
barcode 條碼
1 2 3 4 5 6 | '12771363' '9133134950963' '20417161' |
color 顏色
1 2 3 4 5 6 7 8 9 10 11 12 | '#671f6d' 'rgb(237,74,237)' '208,102,218' 'Brown' '#ee4400' 'maroon' |
company 公司
1 2 3 4 | '時空盒數字科技有限公司' '科技有限公司' |
credit_card 銀行信用卡
1 2 3 4 5 6 7 8 9 10 | '375325478746231' 'VISA 13 digit' '450' '04/22' 'Maestro\n秀芳 商\n502001016117 04/27\nCVV: 144\n' |
currency 貨幣
1 2 | 'HNL' |
date_time 時間日期
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 | 2001,3,18,17,57,44) '1973-11-16T22:58:37' datetime.datetime(2017,11,1,14,33,48) datetime.datetime(2017,3,2,13,55,31) datetime.datetime(2010,3,26,6,33,23) datetime.datetime(2015,7,21,19,27,53) datetime.datetime(2005,12,3,17,17,15) 'America/Guatemala' '11:21:52' 'PM' '02' 'August' '1974' 'Sunday' '02' datetime.timedelta(13371,27637) datetime.date(1983,1,26) datetime.time(17,8,56) 1223246848 '1984-04-20' datetime.datetime(341,9,11,8,6,9) | datetime.datetime(
file 檔案
1 2 3 4 5 6 7 8 | '增加.png' '提供.pdf' 'txt' 'image/png' |
internet 網際網路
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | '104.225.105.10' 'dea6:ca11:39d0:b49f:fff1:82f1:bf88:698b' 'search/categories' '.htm' 'https://www.wei.com/terms/' 'http://zheng.org/' 'https://www.lorempixel.com/700/990' 'hu' 'hu.cn' 'com' 'xia13' 'Opera/8.33.(Windows NT 5.1; an-ES) Presto/2.9.171 Version/10.00' 'd6:38:cc:2a:76:b2' '[email protected]' '[email protected]' '[email protected]' '[email protected]' |
job 工作
1 2 3 4 | 'Dealer' 'Musician' |
lorem 亂數假文
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | '語言無法應用為什一點國內.要求完成如何世界電腦釋出作品.經濟不同教育個人科技全國.\n線上學生髮布資訊上海狀態.\n聯絡一次通過其實介紹世界.增加也是使用成功那個.\n商品免費管理公司.留言自己這種內容.\n次數內容知道這樣女人感覺.操作他的生產出現如何報告文章只有.\n個人文化中心不能釋出最新.質量一下提高.感覺最大工具表示最後計劃.這是還有次數結果其實特別.' '能力' ['國家','經營','結果'] '重要更多我們作品地方增加.' ['製作上海學生.','方式汽車一樣技術幫助歡迎.','說明一種深圳經營電話帖子.'] '非常環境位置有限發展首頁行業.情況對於出現部門這種覺得.產品以後因為雖然由於日本不同.' ['就是釋出要求有關這裡國際.美國裝置深圳經營.首頁也是支援報告.','決定可是隻有發現開始一直.最後有些專案正在深圳關係決定.下載註冊圖片更多進行他的那些.','必須他們發生資料準備聯絡.同時這樣內容學校精華.'] |
misc 雜項
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 | b'U\xa9@\x1e\x96\xe7\xca\x82\x14f' 'tg' 'cc4feebe419791332bbcff5e0fdf084a' '8ac0e9980f880860b6e45ae6fd257cc847b7ae8d' '033151f173f4a389e38e7df2363d89741f752c474e7bdfa2ee0a794bf0b505b5' False True 'F%722TJg_U' 'hy_AM' 'a50d17e7-bc4f-37a3-27b3-04a24fdd0055' >>> |
phone_number 電話號碼
1 2 3 4 | '13334603608' 158 |
python python資料
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 | 7775 -84901.5586333 Decimal('-12273687068527.0') 'cblutNKFIyegfcHPrjzx' True ['ODfeVvcbAjPDBGwzljQw','https://www.tan.cn/list/category/homepage.php','YQlrsFkBieyKYaXlCljJ', Decimal('42778240911787.2'), Decimal('957411812.6383'),'TGbqZufoiUXLQTZDrVcP','http://yan.com/posts/tags/search/terms.php',3.680492634254,'[email protected]', datetime.datetime(2001,8,16,6,10,49),'xMMOjlETIgKGqVGTrChG','[email protected]'] ['KXQMXAkcEMSLfnIZkgJb','BtowiRsuIqyyULnSYYdr', datetime.datetime(2011,10,10,14,44,2), datetime.datetime(2008,5,10,1,38,38),'[email protected]','QEsdUpEqHLpThyWCjkNx', Decimal('-801375867.9'),'ucDyeZnHAXfZtkwdVUbR',4707, datetime.datetime(1974,8,7,1,54,29)] {'其中':9047,'一直':'AUiUjuqccIdVAWSqzDbW','選擇':'[email protected]','開發': datetime.datetime(1972,10,20,14,14,9),'電影':'KYmolBhkjSRxloXXFUUT','文化':2681,'這裡':'[email protected]','不會':'ZPkwuxWsrJSHMNuFiWEx','社會':'CiujeaZMZSuyYwuKzEdN'} {'[email protected]','http://fu.cn/list/home.htm','MlJluVirRkofBnKNtphM',296,'ghoUSHkuEGmCzlJFKyHZ', datetime.datetime(2008,4,4,2,55,4),'AgbynHjdvwYpUkbMsfqr',8751,9649,'[email protected]', Decimal('5727570036.91'),'HmDkExndcQIOaTtsSpsc','hjQlLLXuHVVzENEwoHJK'} ('http://www.cai.com/index/', datetime.datetime(1973,7,28,2,12,23),'khltJQMYJvIDRMYodviZ','uJezUsEqiHaiFxwOPWvl','qojwZHyytBSQQavkDaTu','AHUCHYuVJTHnoSEuQDSY',1012,'uEYVuzeTlgVhrnCATfKw','https://www.zhou.com/categories/tags/main/','LbLSFZPeATtzHvbmYhGr') ([datetime.datetime(1996,10,26,7,35,26), datetime.datetime(1998,2,28,17,20,8),'[email protected]','yEWMrpTqtAHfbxqldGrb','YgKYOnrjuthOrOXhlYIl', datetime.datetime(1994,12,10,0,55,30), Decimal('-6865068.3'),'SYHFHiFvJlRVPcCKumUM',-8619.4354,'kwGipwcASeALLeKdaWBi'], {'同時':'BvtYdkNTHwZNMiIIRwKd','空間':310959668662.457,'特別':'PZQDBuuQWkcdryMloyKS','音樂': Decimal('-7219015925.0'),'專案':'https://www.zhou.cn/main.php','回覆':30.408750841,'顯示':'etZMrsjXJgZpDfZWhpoS','大小':7472,'型別':'OsjpxgLqnTcdVOlHoMoP','什麼':'http://www.xia.com/posts/app/index/'}, {'朋友': {0:-415025.243093017,1: [1799,585,'[email protected]'],2: {0:9980,1:'qnOnFTzGnsjvXGybBnMF',2: ['http://zheng.cn/list/search/tag/faq.html', Decimal('964285276661463.0')]}},'發生': {1:-5339010.6134,2: [datetime.datetime(1987,6,23,15,21,45),'SvSpvKqTXlJvdQhHScwM','PZjKOYzZzoNVsHLRcARQ'],3: {1:'https://www.yan.cn/register/',2:2191,3: ['HMHKQuLRBQaaAypRbtHU', datetime.datetime(2014,5,24,3,32,36)]}},'我的': {2:'[email protected]',3: ['http://gu.com/about.php','DhzpWYkgLCobGSHDLXzI',1420],4: {2: datetime.datetime(1986,2,22,4,50,12),3:'rRHwQQzkpAMBQxwVITBa',4: [datetime.datetime(1984,2,6,11,52,18),-73821572962388.7]}},'全部': {3:'uMQeeBXYNGhrHnAerdjp',4: [323329.56403,'kFvqXFhhtQPNtrOjKtxa','http://peng.cn/'],5: {3:'lcaoeisYIAOsuRjbOXia',4: Decimal('-902407032449085.0'),5: [2296,'uyuWgnsONzLluXqXdASM']}},'大小': {4:'[email protected]',5: [datetime.datetime(1991,10,22,19,21,48),'cDYEScdIokWuvGhRkWqs','XeDJojWyywFvzmWYaokO'],6: {4: Decimal('-4167029.2915827'),5:4030,6: [6372,'xfRXXEFGsNQpeIGmbaHU']}},'語言': {5:'https://www.guo.cn/',6: [6498, datetime.datetime(1981,12,3,18,4,29),42598100345.61],7: {5:'http://zheng.cn/',6:-229316.268238,7: ['https://www.qiao.cn/home/','GtaEXeVxjRnnkggjEguv']}},'表示': {6:'xcBvcGUWxdMhDqgzmhSd',7: ['kwDaFhyTKqHajGSaNOMf',8561,5456],8: {6:'https://zhou.cn/tags/tag/faq.html',7:'IGayAZtTQVlSOasQwgug',8: ['iCjwBzHfmPSLqAgmIOle',70511766106574.5]}},'電子': {7:'http://www.lu.org/tags/posts/terms/',8: [datetime.datetime(1978,8,11,12,16,35),'https://song.cn/main/categories/homepage.html','https://long.com/register.html'],9: {7:'nFJNhyMYBvfTxrYwYPUQ',8:-2252757903.0,9: ['GuJnhMEgXoMAivrgGZie', datetime.datetime(2014,5,29,1,17,50)]}},'的人': {8:'WgHePwYSPgSiPllXpLlJ',9: [1782,'fSepbXwpvhiBphzDTDNC',-9117731.63459416],10: {8:5602,9:3664,10: ['http://www.mao.com/search/tag/main/', Decimal('5579.7377')]}},'不過': {9:'rOfkDPTHvzKbfvQHbPNm',10: [314.397,'StqeLyXkIDKHfExSjggk','[email protected]'],11: {9:'BLKNdcccamYzBwRcMxlx',10:'[email protected]',11: ['ZocoQHdbhaNloWALnzwt','eWVvvHurAlZZRxlYHZXi']}}}) |
profile 人物描述資訊
1 2 3 4 5 6 7 8 9 10 11 12 | 'job':'Licensed conveyancer','company':'萬迅電腦資訊有限公司','ssn':'370684199902182726','residence':'福建省小紅市南長廣州街K座 406448','current_location': (Decimal('18.050895'), Decimal('-0.877117')),'blood_group':'0-','website': ['https://www.yi.org/','https://www.hu.com/','https://www.yin.cn/'],'username':'minghuang','name':'後英','sex':'F','address':'安徽省秀榮市璧山嘉禾路T座 954960','mail':'[email protected]','birthdate':'1975-03-09'} ... username chao85 name 邴宇 sex M address 陝西省東市朝陽廖街Y座757661 mail [email protected] birthdate1996-09-20 | {
ssn 社會安全碼(身份證)
1 2 3 4 | '140100196612297997' 18 |
user_agent 使用者代理
常用在偽造瀏覽器資訊
1 2 | 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/5361 (KHTML, like Gecko) Chrome/15.0.812.0 Safari/5361' |
平臺資訊偽造
1 2 3 4 5 6 7 8 9 10 | 'X11; Linux i686' 'i686' 'Windows CE' 'Macintosh; Intel Mac OS X 10_7_4' 'PPC' |
瀏覽器偽造
1 2 3 4 5 6 7 8 9 10 | 'Mozilla/5.0 (compatible; MSIE 5.0; Windows NT 6.1; Trident/4.0)' 'Opera/9.37.(Windows 95; doi-IN) Presto/2.9.178 Version/10.00' 'Mozilla/5.0 (Windows NT 5.0; te-IN; rv:1.9.2.20) Gecko/2015-09-28 13:29:05 Firefox/12.0' 'Mozilla/5.0 (Windows; U; Windows NT 4.0) AppleWebKit/533.37.4 (KHTML, like Gecko) Version/5.0 Safari/533.37.4' 'Mozilla/5.0 (Windows 98; Win 9x 4.90) AppleWebKit/5361 (KHTML, like Gecko) Chrome/14.0.866.0 Safari/5361' |
自定義擴充套件
Faker 已經提供了足夠豐富的資訊生成,包括名字、手機號、郵箱地址、郵編等等。儘管如此,可能還是沒有辦法滿足你的需求。這時,可以利用自定義擴充套件,引用外部的 provider,自定義你要的功能。
Faker 物件可以通過add_provider
方法將自定義的 Provider 新增到物件中,自定義的 Provider 需要繼承自 BaseProvider。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | fromfakerimportFaker fake = Faker() # first, import a similar Provider or use the default one fromfaker.providersimportBaseProvider # create new provider class classMyProvider(BaseProvider): deffoo(self): return'bar' # then add new provider to faker instance fake.add_provider(MyProvider) # now you can use: print(fake.foo()) |
結果顯示:
1 | bar |
隨機控制
Faker
隨機生成由random.Random
驅動。其中,.random
屬性返回random.Random
物件。通過對該物件的操作,可以實現自定義的行為。
1 2 3 4 | fromfakerimportFaker fake = Faker() fake.random fake.random.getstate() |
那麼,可以實現什麼自定義呢?舉個例子,我們可以設定seed
,通過給定的seed
可以控制每次生成的內容都是一樣的。
1 2 3 4 5 6 7 8 9 10 11 12 | 'Ryan Gallagher' '7631 Johnson Village Suite 690\nAdamsbury, NC 50008' 'Ryan Gallagher' '7631 Johnson Village Suite 690\nAdamsbury, NC 50008' |
不同的兩次執行,只要seed一樣,生成出來的資訊就是一樣的。
注意:fake.random.seed(4321)
可以寫成fake.seed(4321)
。
命令列生成
有時想在shell或者其他程式中生成一些偽資料,是不是一定要寫一個Python指令碼呢?別急——Faker提供了一個命令列工具,估計可以應對大部分場景了:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 | $ faker address 968 Bahringer Garden Apt. 722Kristinaland, NJ 09890 $ python3 -m faker address 432 Marvin Wells Apt. 593\nWest Eric, DC 45650-8420 $ faker -l de_DE address Samira-Niemeier-Allee 5694812 Biedenkopf $ faker profile {'job':'Designer, blown glass/stained glass','company':'Dennis-Bowers','ssn':'034-28-9965','residence':'34796 Jeremiah Station Apt. 782\nWest Timothy, TX 24139-6974','current_location': (Decimal('-47.425017'), Decimal('-42.743615')),'blood_group':'0+','website': ['https://www.gardner.biz/','http://glover-ellison.info/','http://www.harrison.biz/'],'username':'patrick33','name':'Alexandra Montgomery','sex':'F','address':'2314 Collier Stream Suite 093\nMcintyreside, UT 19553','mail':'[email protected]','birthdate':'2005-01-30'} $ faker profile ssn,name {'ssn':'344-68-7420','name':'Veronica Brennan'} $ faker -r=3 -s=";"name Willam Kertzmann; Josiah Maggio; Gayla Schmitt; |
faker 命令幫助:
1 2 3 4 5 | faker [-h] [--version] [-o output] [-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}] [-r REPEAT] [-s SEP] [-i {module.containing.custom_provider othermodule.containing.custom_provider}] [fake] [fake argument [fake argument ...]] |
選項說明:
faker
: 在shell中,faker
命令也可以用python -m faker
來代替-h
,--help
: 幫助資訊--version
:顯示版本-o FILENAM
:輸出結果到檔案中-l {bg_BG,cs_CZ,...,zh_CN,zh_TW}
:指定本地化,zh_CN
表示中文-r REPEAT
:指定生成多少條相同型別的資料-s SEP
:在每個輸出後邊新增指定的分隔符-i {my.custom_provider other.custom_provider}
:自定義擴充套件,prividers
列表。注意,這裡要指定包含你provider
類的模組的路徑,而不是程式本身。fake
:指定方法名稱,如:name
,address
,text
等[fake argument ...]
:為方法指定引數。如上例,為profile
方法指定ssn
和name
引數,只輸出這兩個型別的內容。