身为软件测试工程师,竟然还不知道这个神器?--Faker 简述

前言


作为一名软件测试工程师,在日常测试工作中经常需要测试数据。功能测试时,笔者通常是去系统中查找存量数据或者手动去造数据。一般情况在自动化测试中,可以使用写死的测试数据或者自己写代码自动生成测试数据,无论何者都会需要大量的精力和工作量,部分数据比如:UUID 类数据,还无法保证。有没有一种可以替代方案呢?
笔者相信一定有人遇到这种情况,便去寻找解决方案。果不其然,一个名为 Faker 的 python 库映入眼帘,利用它可以生成一批看起来很“真实”的数据。

Faker 介绍和安装


Faker 简介

Faker 是一个 Python 包,主要用来创建伪数据,使用 Faker 包,无需再手动生成或者手写随机数来生成数据,只需要调用 Faker 提供的方法,即可完成数据的生成。
Faker 的 github 项目地址
API 文档地址

Faker 安装

通过 pip 进行安装:pip install Faker
验证是否安装成功:pip show faker

image.png

Faker 的使用

基本用法

从 faker 模块中导入类,然后实例化这个类,就可以调用方法使用了

from faker import Faker
fake = Faker()
name = fake.name()
address = fake.address()
print(name)
print(address)
print(fake.text())
输出:
Ms. Michelle Phillips
PSC 7472, Box 2953
APO AE 48826
Or dark daughter want her fact. Though she field a reason store.
Remember executive move management sport reduce. Will catch senior item listen trial young. Too mouth direction break.

可以看出 Faker 使用的数据是英文的,是否可以使用中文的呢?
查看 Faker 的源码可以看到第一行注释:

image.png

这下不用担心了,咱们可以去查找如何设置语言了,直接去找init函数:

    def __init__(self, locale=None, providers=None,
                 generator=None, includes=None, **config):
        self._factory_map = OrderedDict()
        self._weights = None

这里的语言环境,可以使用 locale 参数来定义:

from faker import Faker
fake = Faker(locale="zh_CN")
name = fake.name()
address = fake.address()
print(name)
print(address)
print(fake.text())
# 输出:
胡云
四川省玉英县闵行杭州街a座 559601
您的用户人民结果介绍大小.其他问题销售所以美国责任.
什么经验中国详细.学校联系空间计划.
经验方法孩子简介提供.之后法律认为作品准备环境教育.北京一定社会主题参加.
还是一种的是虽然部分留言内容.东西标题计划都是欢迎.电脑网上男人朋友.
应该教育历史服务他的全国的人.计划运行其中有些显示点击非常应该.空间标题处理电脑如此用户城市自己.

常用的 locale 参数有:

如果需要多种语言环境混合的数据,可以使用列表,元祖或者集合指定即可,如:
locale=["zh-CN",'en_US']

常用函数


除了上述介绍的 fake.name、fake.address 和 faker.test()生成姓名和地址三个函数外,常用的 faker 函数按类别划分有如下一些常用方法。可以用 dir(fake),看 Faker 库都可以 fake 哪些数据,目前 Faker 支持近 300 种数据,此外还支持自己进行扩展。
有了这些生成数据函数之后用 fake 对象就可以调用不同的方法生成各种数据了。
1、地理信息类

2、基础信息类

3、计算机基础、Internet 信息类

4、网络基础信息类

5、浏览器信息类

6、数字类

7、文本、加密类

8、时间信息类

9、python 相关方法

使用 dir(fake),看 Faker 库都可以 fake 哪些数据,目前 Faker 支持近 300 种数据,此外还支持自己进行扩展。
有了这些生成数据函数之后用 fake 对象就可以调用不同的方法生成各种数据了。

fake = Faker()
print(dir(fake))

Faker 的定制


Faker 还支持创建自定义的 Provider 生成数据

from faker import Faker
from faker.providers import BaseProvider
# 创建自定义的Provider
class MyProvider(BaseProvider):
    def foo(self):
        return "自定义参数"
  
# 添加到Provider
fake = Faker()
fake.add_provider(MyProvider)
print(fake.foo())
#输出
#自定义

Faker 结合 pytest 使用


Faker 插件安装

github 项目地址
pip install pytest-faker

Faker 插件使用

Faker 的插件使用非常简单,只要在方法中添加 faker 即可,如下:

def test_faker(faker):
    """Faker factory is a fixture."""
	print(faker.name())
#输出
Matthew Delacruz

如果需要使用中文环境的 Faker,可以在 pytest 的最顶层的 conftest 中加入以下 fixture。

(此处标红)测试后发现修改语言环境不起作用,还请知道的大侠在评论中告知一下。

import pytest

@pytest.fixture(scope='session', autouse=True)
def faker_session_locale():
    return ['zh_CN']

写到这里,我很疑惑,这么好的第三方包有没有 Java 版本的,就又去网上兜了一圈,果不其然,Java Faker 映入眼帘。

Java Faker

github 项目地址

maven 地址

<dependency>
    <groupId>com.github.javafaker</groupId>
    <artifactId>javafaker</artifactId>
    <version>1.0.2</version>
</dependency>

Java Faker 的使用

Java Faker 使用起来和 python 的一样简单,如下:

Faker faker = new Faker();

String name = faker.name().fullName(); // Miss Samanta Schmidt
String firstName = faker.name().firstName(); // Emory
String lastName = faker.name().lastName(); // Barton

String streetAddress = faker.address().streetAddress(); // 60018 Sawayn Brooks Suite 449

Java Faker 如何设置语言环境

Faker faker = new Faker(new Locale("zh_CN"));

更多包含的函数参考:全部包含的函数

本文部分内容引自:https://www.jianshu.com/p/6bd6869631d9

1 操作
Edward 在 2020-08-26 15:26:20 更新了该帖
回帖
请输入回帖内容 ...