都 2021 年了,居然还有人在手写测试数据?

简介: 平时我们在开发程序的时候,总免不了需要造一些假数据来验证自己的程序功能是否正常。那么你是通过什么方式来造假数据的呢,不会每次都是手写「测试数据、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())))


结果如下所示:


28.png


除了姓名,性别这些基本信息之外还有学历、性取向、大学以及信仰等信息。

另外,除了 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: 湛江市


29.png

除了省份,城市之外还有大陆、国家、州、街区等信息。


food = Food("zh")
print(f'dish: {food.dish()}')
print(f'drink: {food.drink()}')
## 输出结果
dish: 东坡肉
drink: 红茶


30.png

除了鱼类和饮料之外还有水果、香料和蔬菜。

其实 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)


调用该接口获得如下数据:

31.png

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


32.png


从上图可以看出,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)};

总结

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

目录
相关文章
|
3月前
|
测试技术 API C#
C#使用Bogus生成测试数据
C#使用Bogus生成测试数据
53 1
|
28天前
|
存储 测试技术 数据库
数据驱动测试和关键词驱动测试的区别
数据驱动测试 数据驱动测试或 DDT 也被称为参数化测试。
|
1月前
|
SQL 分布式计算 Hadoop
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(一)
35 4
|
1月前
|
SQL 消息中间件 大数据
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(一)
47 1
|
1月前
|
SQL 大数据 Apache
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
大数据-159 Apache Kylin 构建Cube 准备和测试数据(二)
72 1
|
1月前
|
SQL
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
Hadoop-14-Hive HQL学习与测试 表连接查询 HDFS数据导入导出等操作 逻辑运算 函数查询 全表查询 WHERE GROUP BY ORDER BY(二)
33 2
|
1月前
|
存储 监控 网络安全
内网渗透测试基础——敏感数据的防护
内网渗透测试基础——敏感数据的防护
|
1月前
|
SQL 关系型数据库 MySQL
SQL批量插入测试数据的几种方法?
SQL批量插入测试数据的几种方法?
86 1
|
1月前
|
存储 SQL 分布式计算
大数据-135 - ClickHouse 集群 - 数据类型 实际测试
大数据-135 - ClickHouse 集群 - 数据类型 实际测试
33 0
|
3月前
|
存储 人工智能 自然语言处理
知识库优化增强,支持多种数据类型、多种检索策略、召回测试 | Botnow上新
Botnow近期对其知识库功能进行了全面升级,显著提升了数据处理能力、检索效率及准确性。新版本支持多样化的数据格式,包括PDF、Word、TXT、Excel和CSV等文件,无需额外转换即可直接导入,极大地丰富了知识来源。此外,还新增了细致的文本分片管理和编辑功能,以及表格数据的结构化处理,使知识管理更为精细化。 同时,平台提供了多种检索策略,包括混合检索、语义检索和全文检索等,可根据具体需求灵活选择,有效解决了大模型幻觉问题,增强了专业领域的知识覆盖,从而显著提高了回复的准确性。这些改进广泛适用于客服咨询、知识问答等多种应用场景,极大提升了用户体验和交互质量。
73 4

热门文章

最新文章