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

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

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

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

mimesis

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

1
pipinstallmimesis

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

1
2
3
4
5
6
7
8
9
10
11
frommimesisimportPerson

person=Person('zh')

print(f'name: {person.surname()+""+person.name()}')

print(f'sex: {person.sex()}')

print(f'academic degree: {person.academic_degree()}')

## 输出结果

name:田曜岩

sex:男性

academicdegree:研究生

在上面的程序中,我们创建了一个使用中文环境的 Person 对象,接着输出该用户的姓名,性别以及学历。

下面我们看看 Person 对象里面都有啥假数据。

1
print('\n'.join(('%s:%s'%itemforiteminperson._data.items())))

结果如下所示:

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

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

另外,除了 Person 之外,mimesis 库还提供了 Address、Food、Datetime 等方面的数据。

1
2
3
4
5
6
7
8
9
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:湛江市

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

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

1
2
3
4
5
6
7
food=Food("zh")

print(f'dish: {food.dish()}')

print(f'drink: {food.drink()}')

## 输出结果

dish:东坡肉

drink:红茶

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

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

其实 mimesis 库的强大不止于此,甚至我们可以使用该库来返回特定格式的数据。这就要借助 mimesis.schema 来实现了。

比如,我们要返回如下格式的 JSON 数据,那么就可以这么写:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
_=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 快速实现一个接口:

1
2
3
4
5
@app.route('/apps',methods=('GET',))

defapps_view():

count=request.args.get('count',default=1,type=int)

data=schema.create(iterations=count)

returnjsonify(data)

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

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

faker

faker 同样是一个优秀的生成假数据的 Python 库,支持多种语言环境,我们可以使用 pip 进行安装。

1
pipinstallfaker

试着获取一下姓名,地址,日期等假数据

1
2
3
4
5
6
7
8
9
10
11
fromfakerimportFaker

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

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

从上图可以看出,faker 目前支持 22 个不同种类的假数据。

如果以上类别不能满足需求,那么 faker 同样支持自定义扩展。

1
2
3
4
5
6
7
8
9
10
fromfaker.providersimportBaseProvider

classMyProvider(BaseProvider):

deffoo(self):

return'bar'

faker.add_provider(MyProvider)

print(f'foo: {faker.foo()}')

## 输出结果

foo:bar

最方便的是我们可以直接在命令行调用 faker,这对于某些场景简直不要太方便,比如我们就需要一条用户信息的 JSON 数据,那么就不需要再去写一个 Python 脚本了,直接在命令行调用 faker 命令即可生成假数据。

1
2
3
4
5
6
7
8
9
10
11
12
$fakeraddress

香港特别行政区六安市海港哈尔滨街z座561730

$faker-r=3address

湖南省海口市清浦王街h座140394

海南省银川市孝南武汉街q座623233

青海省建华市萧山李街w座207439

$faker-r=3profilename,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)};

总结

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

示例代码:https://github.com/JustDoPython/python-examples/tree/master/doudou/2021-01-10-fake-data

以上是 都 年了,居然还有人在手写测试数据 的全部内容, 来源链接: utcz.com/a/131244.html

回到顶部