Faker在自动化测试中的应用

在软件研发、测试中我们经常会需要造一些假数据,比如常用的身份证号、随机数或者字符串等,这一类测试数据在软件研发流程中还占了非常大的比重,这时候我们就需要手动创造一批看起来像真的的数据信息。

在python库中我们可以使用random库创建一批假数据应用于实际工作,但是遇到有些数据类似身份证号或者uuid则需要特定的方法生成,操作起来比较繁琐。

这个时候如果有一个库可以统一提供我们所需要的各种假数据信息,而不用我们单独费劲心力去生成各种随机数据就显得特别重要!而Faker库正好可以实现以上我们的各种需求。

Faker安装

pip安装

在python3.8中可以使用一下命令进行安装

pip install Faker

参考:https://pypi.org/project/Faker/

robotframework中安装
pip install robotframework-faker

Faker使用

python中使用
from faker import Faker
# 使用中文
fake = Faker(locale='zh_CN')
# 生成随机两位随机数字
contract_num = fake.random_number(digits=2, fix_len=True)
# 生成三位正的随机浮点数(两位小数)
apply_amount_temp = fake.pyfloat(left_digits=3, right_digits=2, positive=True)
apply_amount = str(apply_amount_temp)
print(contract_amount)
# 生成随机中文字符串
contract_remarks = fake.sentences()
# 生成随机公司名称
contract_company = fake.company()

其中要留意,如果不设置locale,则默认使用英文;

RF中使用
随机身份证号-国外
    [Documentation]    说明
    ...    1、没有参数zh-CN,生成国外证件id
    ${test2}    ssn
    [Return]    ${id_card}

设置两位随机小数
    ${test001}    pyfloat    left_digits=2    right_digits=2    positive=True
    log    将float转换为str格式
    ${amount}    Convert To String    ${test001}
    [Return]    ${amount}

设置三位随机小数
    ${test001}    pyfloat    left_digits=3    right_digits=2    positive=True
    log    将float转换为str格式
    ${amount}    Convert To String    ${test001}
    [Return]    ${amount}

如图所示:随机身份证号

Faker在自动化测试中的应用

随机两位小数:

Faker在自动化测试中的应用

Faker常用的各种库介绍:

地理信息类
address():详细地址,中文环境中使用的是各种地址拼接,具体省份和区县没有联动关系
city():城市
country():国家信息
country_code(representation='alpha-2'):国家编码
postcode():邮编信息
street_address():街道地址信息
street_name():街道名称
street_suffix():街、路

个人基本信息类
first_name():名
first_name_female():女性名
first_name_male():男性名
last_name():
name():随机姓名全名
name_female():女性名字
name_male():男性名字
prefix():名字称呼,如先生
prefix_female():女性称呼
prefix_male():男性称呼
phone_number():随机手机号码
profile(fields=None, sex=None):个人配置信息,如工作、公司、身份证号等
ssn():随机身份证号
bs():随机公司服务名
company():公司全称
company_suffix():公司性质
job():工作随机职位信息
credit_card_expire(start='now', end='+10y', date_format='%m/%y'):银行卡到期日期
credit_card_full(card_type=None):银行卡全称信息
credit_card_number(card_type=None):银行卡号
credit_card_provider(card_type=None):信用卡类型
credit_card_security_code(card_type=None):银行卡安全码

网络信息类
ascii_company_email():随机ASCII公司邮箱名称
ascii_email():随机ASCII邮箱
ascii_free_email():免费邮箱
ascii_safe_email():安全邮箱
company_email():公司邮箱
dga(year=None, month=None, day=None, tld=None, length=None):域名
domain_name(levels=1):
email(domain=None):邮箱信息
free_email():
free_email_domain():邮箱域名
hostname(levels=1):主机名
http_method():http的请求方法
image_url(width=None, height=None):图片url地址
ipv4(network=False, address_class=None, private=None):ip地址信息
ipv4_network_class():ip地址分类
ipv4_private(network=False, address_class=None):私有ip地址
ipv4_public(network=False, address_class=None):公网ip地址
ipv6(network=False):ipv6地址信息
mac_address():pc的mac地址
port_number(is_system=False, is_user=False, is_dynamic=False):端口号
safe_domain_name():安全域名信息
safe_email():
uri():随机uri地址
uri_extension():网页文件后缀
uri_page():网页文件信息
uri_path(deep=None):网址文件路径
url(schemes=None):随机url地址
user_name():随机用户名
文件信息类
file_extension(category=None):文件类型
file_name(category=None, extension=None):随机文件名字
file_path(depth=1, category=None, extension=None):随机文件路径
unix_partition(prefix=None):unix分区信息

数字类
pybool():布尔型
pydecimal(left_digits=None, right_digits=None, positive=False, min_value=None, max_value=None):随机Decimal类型数字
pydict(nb_elements=10, variable_nb_elements=True, value_types=None, *allowed_types):随机字典类型数字
pyfloat(left_digits=None, right_digits=None, positive=False, min_value=None, max_value=None):随机浮点类型数字
pyint(min_value=0, max_value=9999, step=1):随机int类型数字
pystr(min_chars=None, max_chars=20):随机字符串
pystr_format(string_format='?#-###{{random_int}}{{random_letter}}', letters='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'):随机规定格式的字符串
random_digit():随机数字
random_digit_not_null():1~9随机数字
random_int(min=0, max=9999, step=1):0~999的随机数字
random_number(digits=None, fix_len=False):
random_uppercase_letter():随机大写字母

个人代理类
android_platform_token():android版本user_agent信息
chrome(version_from=13, version_to=63, build_from=800, build_to=899):谷歌版本user_agent信息
firefox():火狐版本user_agent信息
internet_explorer():ie版本user_agent信息
ios_platform_token():ios版本信息
linux_platform_token():linux版本信息
linux_processor():linux版本类型
user_agent():随机user_agent信息

随机字符串
paragraph(nb_sentences=3, variable_nb_sentences=True, ext_word_list=None):随机生成段落
paragraphs(nb=3, ext_word_list=None):随机生成多个段落
sentence(nb_words=6, variable_nb_words=True, ext_word_list=None):随机生成一句话
sentences(nb=3, ext_word_list=None)::随机生成多句话
text(max_nb_chars=200, ext_word_list=None):随机生成一篇文章
texts(nb_texts=3, max_nb_chars=200, ext_word_list=None)
word(ext_word_list=None):随机生成词语
words(nb=3, ext_word_list=None, unique=False):随机生成多个词语
password(length=10, special_chars=True, digits=True, upper_case=True, lower_case=True):随机密码
sha1(raw_output=False):随机sha1密码

日期时间
am_pm():上/下午
century():世纪
date(pattern='%Y-%m-%d', end_datetime=None):日期
date_between(start_date='-30y', end_date='today'):日期范围
date_between_dates(date_start=None, date_end=None):
date_object(end_datetime=None):随机生成1970-1-1到指定日期的随机日期
date_of_birth(tzinfo=None, minimum_age=0, maximum_age=115):生日
date_this_century(before_today=True, after_today=False):
date_time(tzinfo=None, end_datetime=None):时间信息
future_date(end_date='+30d', tzinfo=None):未来的日期
month():月份
month_name():月份名称
past_date(start_date='-30d', tzinfo=None):随机生成已经过去的日期
past_datetime(start_date='-30d', tzinfo=None):随机生成已经过去的时间信息
time(pattern='%H:%M:%S', end_datetime=None):时间信息
time_delta(end_datetime=None):时间差
year():年份

Faker库推荐

手册:

https://faker.readthedocs.io/en/master/index.html

rf -faker手册

https://pypi.org/project/robotframework-faker/

上一篇:任务7:创建用用户数据工厂


下一篇:pyecharts的学习笔记7---DataZoomOpts