居然還有人在手寫測試數據?

2021-03-02 測試開發社區

平時我們在開發程序的時候,總免不了需要造一些假數據來驗證自己的程序功能是否正常。那麼你是通過什麼方式來造假數據的呢,不會每次都是手寫「測試數據、test」吧。

今天派森醬給大家介紹兩個超級好用的庫,批量生成各種假數據,比如用戶信息,地址,日期,數字等等。

mimesis

mimesis 是一個高性能的偽數據生成器,目前支持 33 種不同的語言環境。通過該庫,我們可以生成各種測試數據、假的 API 接口、任意結構的 JSON 和 XML 數據以及隱藏生產環境的數據。

pip install mimesis

安裝好之後我們就可以直接使用了。

from mimesis import Person

person = Person('zh')
print(f'name: {person.surname() + "" + person.name()}')
print(f'sex: {person.sex()}')
print(f'academic degree: {person.academic_degree()}')

## 輸出結果
name: 田曜巖
sex: 男性
academic degree: 研究生

在上面的程序中,我們創建了一個使用中文環境的 Person 對象,接著輸出該用戶的姓名,性別以及學歷。

下面我們看看 Person 對象裡面都有啥假數據。

print('\n'.join(('%s:%s' % item for item in person._data.items())))

結果如下所示:

除了姓名,性別這些基本信息之外還有學歷、性取向、大學以及信仰等信息。

另外,除了 Person 之外,mimesis 庫還提供了 Address、Food、Datetime 等方面的數據。

address = Address("zh")
print(f'continent: {address.continent()}')
print(f'province: {address.province()}')
print(f'city: {address.city()}')
print(f'street name: {address.street_name()}')

## 輸出結果
province: 安徽省
city: 湛江市

除了省份,城市之外還有大陸、國家、州、街區等信息。

food = Food("zh")
print(f'dish: {food.dish()}')
print(f'drink: {food.drink()}')

## 輸出結果
dish: 東坡肉
drink: 紅茶

除了魚類和飲料之外還有水果、香料和蔬菜。

其實 mimesis 庫的強大不止於此,甚至我們可以使用該庫來返回特定格式的數據。這就要藉助 mimesis.schema 來實現了。

比如,我們要返回如下格式的 JSON 數據,那麼就可以這麼寫:

_ = Field('zh')
schema = Schema(schema=lambda: {
    'id': _('uuid'),
    'name': _('person.name'),
    'version': _('version', pre_release=True),
    'timestamp': _('timestamp', posix=False),
    'owner': {
        'email': _('person.email', domains=['test.com'], key=str.lower),
        'token': _('token_hex'),
        'creator': _('full_name', gender=Gender.FEMALE)
    },
    'address': {
        'country': _('address.country'),
        'province': _('address.province'),
        'city': _('address.city')
    }
})

# 生成數據
data = schema.create(iterations=2)

我們藉助 Flask 快速實現一個接口:

@app.route('/apps', methods=('GET',))
def apps_view():
    count = request.args.get('count', default=1, type=int)
    data = schema.create(iterations=count)
    return jsonify(data)

調用該接口獲得如下數據:

faker

faker 同樣是一個優秀的生成假數據的 Python 庫,支持多種語言環境,我們可以使用 pip 進行安裝。

pip install faker

試著獲取一下姓名,地址,日期等假數據

from faker import Faker

faker = Faker(locale='zh_CN')
print(f'name: {faker.name()}')
print(f'address: {faker.address()}')
print(f'date: {faker.date()}')

## 輸出結果
name: 劉晶
address: 香港特別行政區平縣華龍深圳路l座 580988
date: 2013-08-26

從上圖可以看出,faker 目前支持 22 個不同種類的假數據。

如果以上類別不能滿足需求,那麼 faker 同樣支持自定義擴展。

from faker.providers import BaseProvider

class MyProvider(BaseProvider):
    def foo(self):
        return 'bar'
faker.add_provider(MyProvider)
print(f'foo: {faker.foo()}')

## 輸出結果
foo: bar

最方便的是我們可以直接在命令行調用 faker,這對於某些場景簡直不要太方便,比如我們就需要一條用戶信息的 JSON 數據,那麼就不需要再去寫一個 Python 腳本了,直接在命令行調用 faker 命令即可生成假數據。

$ faker address
香港特別行政區六安市海港哈爾濱街z座 561730

$ faker -r=3 address
湖南省海口市清浦王街h座 140394
海南省銀川市孝南武漢街q座 623233
青海省建華市蕭山李街w座 207439

$ faker -r=3 profile name,address,birthdate
{'name': '邵麗', 'address': '四川省想市上街吳街c座 399962', 'birthdate': datetime.date(1979, 8, 28)};
{'name': '張秀華', 'address': '江西省亮市徐匯程街p座 527720', 'birthdate': datetime.date(1907, 6, 27)};
{'name': '王瑩', 'address': '江西省博市房山太原路N座 615506', 'birthdate': datetime.date(1968, 2, 7)};

總結

今天我們介紹了兩款優秀的假數據生成庫,對於大部分場景都是可以滿足的了,希望小夥伴們能有所收穫。

相關焦點

  • 中央民族大學學生創新團隊發布藏文手寫體數字數據集
    圖為MNIST 數據集。圖片由才讓先木提供。  MNIST數據集簡而言之就是一個手寫數據識別庫,包含有大量的手寫數字圖像,可以用來識別各種手寫體數字。MNIST 數據集來自美國國家標準與技術研究所, 由Yann LeCun教授主導建立。該數據集由250個不同人手寫的數字構成, 這250個人中50% 是高中學生, 50% 來自人口普查局的工作人員。該數據集共包含70000張數字圖像,其中訓練集60000張,測試集10000張。自MNIST數據集建立以來,被廣泛地應用於檢驗各種機器學習算法,測試各種模型,為機器學習的發展做出了不可磨滅的貢獻。
  • Fashion-MNIST:替代MNIST手寫數字集的圖像數據集
    FashionMNIST 的大小、格式和訓練集/測試集劃分與原始的 MNIST 完全一致。60000/10000 的訓練測試數據劃分,28x28 的灰度圖片。你可以直接用它來測試你的機器學習和深度學習算法性能,且不需要改動任何的代碼。 這個數據集的樣子大致如下(每個類別佔三行):
  • 筆感更佳輕薄尤甚 手寫本E人E本T7評測
    而將手寫筆嵌入在平板右側也是一個很大膽的設計,要知道這支筆和正常的筆尺寸差別並不大,並不是三星那種小筆。下面我們來說說這支筆。  手寫筆之進化  我們知道,E人E本最大也是最核心的賣點,就是手寫技術及手寫筆。
  • 易烊千璽的硬筆手寫體,這麼好看!毛筆字居然寫成這樣!
    他的硬筆手寫體十分的好看吶!但是,想不到他的毛筆字居然寫成了這樣易烊千璽和何炅謝娜等人參加了一檔溫暖人心的節目《朋友請聽好》,一起在社區的天台置辦廣播電臺,收集來自全國情緒、故事各異的信件,對著電臺錄製廣播節目,分享不同人生經歷的故事。《朋友請聽好》場面布置得非常溫馨,場景也異常美麗,主播們用心傳遞動人心弦的故事。
  • 基於KNN和Kmeans算法利用MNIST數據集實現手寫數字識別
    此外,KNN優化方案還有kd-tree和BFPTR等。kd樹(K-dimension tree)是一種對k維空間中的實例點進行存儲以便對其進行快速檢索的樹形數據結構。kd樹是是一種二叉樹,表示對k維空間的一個劃分,構造kd樹相當於不斷地用垂直於坐標軸的超平面將K維空間切分,構成一系列的K維超矩形區域。
  • 使用AI算法進行手寫數字識別
    輸入樣本為手寫數字,以20 * 20像素點的形式存儲,將像素點數據攤開作為一行,每行就有400個像素點信息。訓練樣本中搜集了5000個手寫數字的照片,因此樣本X為5000 * 400的矩陣,樣本結果y為5000 * 1的列向量。
  • 微軟測試拇指小工具+手寫筆 使Win10平板更加順暢
    早在5月份,微軟研究團隊就發布了一個YouTube視頻,詳細介紹了Windows 10中拇指小工具和手寫筆的配合和互動。據團隊介紹,這個想法是用更自然的用戶流程來支持Windows10手寫筆。微軟表示,這種拇指+手寫筆互動解決了使用情景中筆觸和觸摸模式的同時和互補使用問題,例如在沙發上使用 平板電腦時,用戶非觸摸的手必須經常握持設備本身。在這種情況下,拇指是可用的,並且具有足夠的移動能力來操縱許多控制項,從而實現了全新的拇指+手寫筆交互的空間。
  • 深度學習系列:PaddlePaddle之手寫數字識別
    不過呢,這塊內容太複雜了,所以就簡單的介紹一下paddlepaddle的第一個「hello word」程序----mnist手寫數字識別。下一次再介紹用PaddlePaddle做分布式訓練的方案。其實之前也寫過一篇用CNN識別手寫數字集的文章是用keras實現的,這次用了paddlepaddle後,正好可以簡單對比一下兩個框架的優劣。什麼是PaddlePaddle?
  • ...開發日記:如何設計能在Apple Watch上實時運行的中文手寫識別...
    然而在個人層面上,每個人之間的「最常用字」經常都會有所不同。許多人都至少有幾十個自己的「不常用字」,因為這些字其實會在相關的事物名中出現,反倒不用一個個寫出來了。這樣,理想狀況下的中文手寫識別算法就至少要擴充到 GB18030-2005 中2萬多個漢字的水平。
  • 提筆錯字連篇 大數據時代無需用手寫字?
    大數據時代,鍵盤打字比手寫不知快了多少倍,這也是一種趨勢。日前,重慶某大學畢業生小蔡應聘一公司文員,好不容易進了面試,卻因填的一份400多字的手寫簡歷中有24個錯別字而未被錄用。有人將之歸咎於當代人使用電腦打字越來越多,在享受快捷、方便的同時,也造成了書寫能力的退步,丟了傳統。不過也有人認為隨著時代的發展,電腦打字已很普遍,不必再苛求書寫這一「古老」的技能。
  • 9102年了,手機還有必要配備手寫筆嗎?
    屏幕觸控筆在十多年前,曾經是所有大屏PDA手機的標配,在電阻屏並不適宜直接用手指觸控的年代,這支短短的筆,讓人類的操作首次擺脫了一顆顆按鍵的束縛,將直觀的手寫文字、手繪圖片的使用邏輯移到屏幕當中。而隨著目前電容屏幕的流行,幾乎所有手機都放棄了標配觸控筆——除了三星。
  • iPadOS 14「隨手寫」功能,解放你的手指
    iPadOS 14 增加了小組件,升級了 Siri,有了通用搜索,但讓人著實興奮的是在 Apple Pencil 上的創新。iPadOS 14 是 iPadOS 誕生後的第二個大版本,相較之前版本,與 iOS 的差異化更加明顯,全面進化的 iPadOS 14 在生產力領域更勝一籌。
  • 小白學機器學習|如何識別5000多個手寫數字
    其實學和玩是不矛盾的,個人對數據分析一直非常好奇,只是數據分析和數據挖掘是兩個完全不同的維度,一個趨於表象,一個趨於內在,各有千秋,但是都很有趣。今天我接著來分享一篇好玩的機器學習例子,我們如何識別手寫數字。
  • 百度輸入法「手寫輸入」,不會拼音的人有福了,挺實用
    手寫輸入法在很早已經推出的,但是使用過程並不好,很多時候還沒有寫完,就已經顯示出別的文字,寫的速度過快也無法識別的。個人認為,手寫輸入法,要做好幾點:1、字跡潦草時候,識別準確率要高;2、寫字速度慢,也不會亂識別:3、寫得很快時,不會重疊出現其它字。做到這三點,才算是一款合格的手寫輸入法。
  • 手寫居然還能這麼玩?百度輸入法真是老少皆宜
    #百度輸入法#現在手機輸入法的功能簡直太多了,想要寫一段長長的文字,甚至都不需要你去敲擊鍵盤,只要動動嘴就能很快寫出一大段話,那麼,不知道大家還會不會想到一個叫做「手寫輸入可能這種功能早就消失在大家的記憶中了,好像上一次受人關注還是在安卓手機出現的早期,甚至還能追溯到MTK非智能機時代,一塊小小的電阻屏、一根伸縮的手寫筆,讓手寫輸入法大行其道。然而,這時候就能喊出「大人,時代變了」嗎?顯然還不能。
  • 自由旋轉 手寫輸入 華碩R1E評測(視頻)
    它的優點是支持「懸浮式」操作、定位準確、而且只接收來自手寫筆的信號,不會出現誤操作的情況。>滑鼠左鍵使用,實現單、雙擊和拖拽等操作;手寫筆的末端,還有一個類似橡皮擦的設計,可以輕鬆擦去寫在屏幕上的字跡或圖畫。
  • iPadOS 14「隨手寫」功能:解放手指,讓你的 Apple Pencil 更具生產力
    iPadOS 14 增加了小組件,升級了 Siri,有了通用搜索,但讓人著實興奮的是在 Apple Pencil 上的創新。 蘋果在開發「隨手寫」功能的過程中,需要研究海量的手寫數據和文字風格。
  • MNIST的新生:測試集新增50000個樣本,Yann LeCun推薦測試
    在機器學習研究中,MNIST 手寫數字圖像數據集已經作為基準使用了二十餘年。該數據集雖然經典,但也存在測試集過小等問題。近日,來自 Facebook 和紐約大學的研究者重建並擴展了該數據集,在測試集中新增了 50000 個樣本。
  • NVH測試數據管理(二):數據查詢
    今天我們接著針對NVH試驗數據查詢難度大的問題,來談談ATOM的解決方案。由於NVH試驗數據格式不統一、數據管理效率低、數據的專業性強、數據的命名不規範,從海量的測試數據中尋找特定內容的數據難度非常大,這也導致數據重新利用、數據挖掘的難度增加,難以發揮數據真正的價值。
  • 漢王手寫板哪個好 漢王手寫板推薦【圖文】
    現在有非常多的人們都會購買手寫板,使得手寫板的銷售變得非常的火爆。而市場上如此之多的手寫板品牌,使得大家在選購的時候變得非常的困難。而的漢王手寫板就是非常不錯的,那我就給大家簡單的介紹幾款做的不錯的手寫板。