平时我们在开发程序的时候,总免不了需要造一些假数据来验证自己的程序功能是否正常。那么你是通过什么方式来造假数据的呢,不会每次都是手写「测试数据、test」吧。

今天派森酱给大家介绍两个超级好用的库,批量生成各种假数据,比如用户信息,地址,日期,数字等等。

mimesis

mimesis 是一个高性能的伪数据生成器,目前支持 33 种不同的语言环境。通过该库,我们可以生成各种测试数据、假的 API 接口、任意结构的 JSON 和 XML 数据以及隐藏生产环境的数据。

pip install mimesis

安装好之后我们就可以直接使用了。

from mimesis import Personperson = 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 Fakerfaker = 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 BaseProviderclass 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)};

总结

今天我们介绍了两款优秀的假数据生成库,对于大部分场景都是可以满足的了,希望小伙伴们能有所收获。

居然还有人在手写测试数据?相关推荐

  1. 天真,居然还有人认为java的参数传递方式是引用传递

    代码写的越急,程序跑得越慢.-- Roy Carlson 时间过得真快,2020已经过去了一半,但是疫情好像还没有真正的消灭,人们出行还是得带着口罩,天气越来越热,受罪啊. 言归正传,都2020年了, ...

  2. python学什么版本2020年_2020年了居然还有人在学Python?学python有什么用?

    都2020年了居然还有人在学python?学python有什么用? 真是气抖冷啊! 想学习python的小伙伴,可以加裙595227871 领取免费的学习资料 为什么选择python? 1.行业人才的 ...

  3. 震惊!居然还有人不懂二叉树!99%的程序员都会了,不会就点进来吧!

    什么!你居然点进来了!看来你就是那百分之一的程序员吧.既然不懂什么是二叉树,那我就来给你讲讲. 1. 树 所谓二叉树,本质上还是个树呀,想要知道什么是二叉树,就要了解树是什么样子的.纳尼!树是什么样子 ...

  4. 居然还有人在用 System.out.println打日志的吗?

    点击上方蓝色"程序猿DD",选择"设为星标" 回复"资源"获取独家整理的学习资料! 作者 | 雨尔辰辰 来源 | my.oschina.ne ...

  5. 这6部超经典的物理电影,居然还有人没有看过?

    全世界只有3.14 % 的人关注了 爆炸吧知识 开篇警告:这是一篇福利文! 今天小编给热爱物理及数学的小伙伴们,分享6部豆瓣评分8分以上,与数学和物理领域相关的经典电影,帮助大家在工作.学习之余劳逸结 ...

  6. 项目创建venv、_都2020年了,居然还有人没有在数据科学项目中使用Docker?

    本文将告诉大家什么是 Docker 以及如何在 Python 中使用 Docker. 新手程序员面临的最困难的问题之一是理解"环境"的概念.环境就是你编写代码的系统,听起来很容易, ...

  7. pcie ep 应该支持哪种interrupt_7寸国产笔记本评测,酷睿处理器+8G+256G,还支持手写笔...

    在大多数的人的传统印象里,可能都会认为便携式笔记本应该搭载12.5英寸屏幕,然后把重量控制在2公斤以内就行了,而实际上,我认为的便携式笔记本则应该拥有更小的屏幕,如果能够像智能手机一样装进衣服口袋,那 ...

  8. 被阿里舍弃,2020年了,还有人在迷恋Oracle数据库?

    数据库领域,有曾经被誉为地球最强的--Oracle数据库. 注意,这里说的是Oracle数据库,并非Oracle公司.在Oracle数据库最为顶峰的时候,世界500强.互联网公司.业界的DBA码农们, ...

  9. mobile还有人用吗 spring_话说,苹果手机语音备忘录功能还有人用吗?

    hi,各位,苹果手机自带的语音备忘录功能还有人在用吗? 前两天,有小伙伴在后台留言问:"苹果手机语音备忘录怎么恢复?" 小编一时还有些恍惚"它是什么,手机上有吗?&quo ...

最新文章

  1. 网上的说TB6560存在的问题
  2. MIMIC 以太坊医疗项目开发(6)Web3智能合约API
  3. Intellij MyBatisPlus Plugin插件破解
  4. 初步认识Volatile-什么叫缓存一致性呢?
  5. LeetCode 84. 柱状图中最大的矩形(单调递增栈)
  6. 编程开发之--java多线程学习总结(3)类锁
  7. java lookandfeel nimbus_动态改变LookAndFeel
  8. DrawTool画笔之图形笔
  9. SQLAlchemy schema.Table
  10. Oracle 项目就是那回事 ----表空间的管理
  11. 【OpenCV】基本数据类型
  12. 学生选课系统代码-3mode【DB】视图层代码【MVC--M】代码
  13. Elman神经网络原理
  14. git报错:remote: error: hook declined to update refs/heads/master
  15. iOS小技能:iOS15适配导航条主题: 背景颜色、标题颜色
  16. Linux监控平台搭建
  17. 跳出“画地为牢”的陷阱:更加明智地规划职业发展
  18. 利用棋盘格图案完成相机标定
  19. IAR for ARM系列教程(三)_菜单(Ⅰ)
  20. 五、数据导入与基本的 SELECT 语句

热门文章

  1. Linux系统中rides安装
  2. 小伙面试时一句话,把面试官全给笑趴下!
  3. 产品高于需求:低频产品也可以有高用户活跃度
  4. SLAM研究方向及知识点汇总
  5. 网络安全的昨天、今天、明天
  6. 前端开发入门到实战:HTML5 video视频播放
  7. AI行业精选日报_人工智能(12·27)
  8. 基于STM32的老人出行小助手设计与实现(OneNet)
  9. 程序员你伤不起(三)
  10. ajax的x-www-form-urlencoded与json格式解决跨域问题