Faker库详解 - Python中的随机数据生成器

news/2025/1/12 4:54:28/

文章目录

      • Faker介绍
      • Faker安装
      • Faker使用
        • 基本使用方法
        • 随机生成人物相关的基础信息
        • 随机生成地理相关的信息
        • 随机生成网络相关的信息
        • 随机生成日期相关的信息
        • 随机生成数字/字符串/文本
        • 随机生成列表/元组/字典/集合/迭代器/json
        • 随机生成文件相关的信息
        • 随机生成颜色/表情
        • 每次请求获取相同的数据
        • Faker的应用
          • 结合pymysql库将数据插入到数据库中
          • 结合openpyxl库将数据导出到Excel中
          • 在Pytest中使用Faker随机生成入参

Faker介绍

在软件测试过程中,我们经常需要使用一些测试数据,通常都是只能使用已有的系统数据,但可能会因权限或其它原因不可使用,又或者手工编造一些数据,但数据量较大时影响测试效率,Faker就解决这个问题,Faker是python的一个第三方库,主要是用来创造伪数据的,只需要调用Faker提供的相关api即可完成数据的生成

Faker安装

pip install faker

Faker使用

  1. 基本使用方法

    from faker import Faker		# 导入faker库的Faker方法# ↓默认为en_US,只有使用了相关语言才能生成相对应的随机数据
    fk=Faker(locale="zh_CN")
    # ↓也可使用多种语言
    # fk = Faker(["zh_CN", "en_US", "zh_TW"])# ↓随机生成姓名+身份ID +手机号,因为已指定locale为中文,所以生成的数据都是符合中国环境的数据
    for i in range(10):print(fk.name() + "," + fk.ssn() + "," + fk.phone_number())
    
  2. 随机生成人物相关的基础信息

    print("随机生成一个姓:", fk.last_name())
    print("随机生成一个女性常用姓:", fk.last_name_female())
    print("随机生成一个男性常用姓:", fk.last_name_male())
    print("随机生成一个名:", fk.first_name())
    print("随机生成一个女性常用名:", fk.first_name_female())
    print("随机生成一个男性常用名:", fk.first_name_male())
    print("随机生成一个姓名:", fk.name())
    print("随机生成一个罗马文的姓名(当英文使用):", fk.romanized_name())
    print("随机生成一个女性全名:", fk.name_female())
    print("随机生成一个男性全名:", fk.name_male())
    print("随机生成一个手机号号段:", fk.phonenumber_prefix())
    print("随机生成一个手机号:", fk.phone_number())
    print("随机生成一个的身份ID:", fk.ssn())
    print("随机生成一个生日日期:", fk.date_of_birth())
    print("随机生成一个生日日期(20~30岁之间):", fk.date_of_birth(minimum_age=20, maximum_age=30))
    print("随机生成一个信用卡号:", fk.credit_card_number())
    print("随机生成一个完整的信用卡信息:", fk.credit_card_full())
    print("随机生成一份简略的个人信息:", fk.simple_profile())
    print("随机生成一份详细的个人信息:", fk.profile())
    print("随机生成一个车牌号:", fk.license_plate())
    print("随机获取一个银行名称:", fk.bank())
    print("随机生成一个银行账号:", fk.bban())
    print("随机获取一个国际银行账号:", fk.iban())
    print("随机生成一个邮箱:", fk.email())
    print("随机生成一个公司邮箱:", fk.company_email())
    print("随机生成一个免费邮箱:", fk.free_email())
    print("随机生成一个安全邮箱:", fk.safe_email())
    print("随机生成一个邮箱后缀:", fk.free_email_domain())
    print("随机生成一个完整的公司名称:", fk.company())
    print("随机生成一个公司名:", fk.company_suffix())
    print("随机生成一个公司性质:", fk.company_prefix())
    print("随机生成一个职位名称:", fk.job())
    
  3. 随机生成地理相关的信息

    print("随机生国际语言:", fk.language_name())
    print("随机生成一个国家名称:", fk.country())
    print("获取当前所在国家名称:", fk.current_country())
    print("随机生成一个行政单位:", fk.administrative_unit())
    print("随机生成一个省份:", fk.province())
    print("随机生成一个城市:", fk.city())
    print("随机生成一个城市名:", fk.city_name())
    print("随机生成一个城市名的后缀(即市县区):", fk.city_suffix())
    print("随机生成一个县/区:", fk.district())
    print("随机生成一个街道名称:", fk.street_name())
    print("随机生成一个街道名的后缀(即街路):", fk.street_suffix())
    print("随机生成一个街道地址:", fk.street_address())
    print("随机生成一个楼号:", fk.building_number())
    print("随机生成一个详情地址:", fk.address())
    print("随机生成一个邮编:", fk.postcode())
    print("随机生成一个地理坐标(纬度):", fk.latitude())
    print("随机生成一个地理坐标(经度):", fk.longitude())
    
  4. 随机生成网络相关的信息

    print("随机生成一个域名:", fk.domain_name())
    print("根据给定日期随机生成一个3位的域名:", fk.dga(year=2023, month=7, day=31, length=3))
    print("随机生成一个IPv4地址:", fk.ipv4())
    print("随机生成一个IPv6地址:", fk.ipv6())
    print("随机生成一个端口:", fk.port_number())
    print("随机生成一个MAC地址:", fk.mac_address())
    print("随机生成一个网址文件路径:", fk.uri_path())
    print("随机生成一个网址文件:", fk.uri_page())
    print("随机生成一个网址文件后缀:", fk.uri_extension())
    print("随机生成一个uri地址:", fk.uri())
    print("随机生成一个url地址:", fk.url())
    print("随机生成一个图片url地址:", fk.image_url())
    print("随机生成一个域名后缀:", fk.tld())
    print("随机生成一个用户名:", fk.user_name())
    print("随机生成一个用户ID:", fk.uuid4())
    print("随机生成一个HTTP请求方法:", fk.http_method())print("随机生成一个user_agent:", fk.user_agent())
    print("随机生成一个IOS的user_agent:", fk.ios_platform_token())
    print("随机生成一个安卓的user_agent:", fk.android_platform_token())
    print("随机生成一个Linux的user_agent:", fk.linux_platform_token())
    print("随机生成一个Windows的user_agent:", fk.windows_platform_token())
    print("随机生成一个MAC的user_agent:", fk.mac_platform_token())
    print("随机生成一个IE的user_agent:", fk.internet_explorer())
    print("随机生成一个Firefox的user_agent:", fk.firefox())
    print("随机生成一个Opera的user_agent:", fk.opera())
    print("随机生成一个Safari的user_agent:", fk.safari())
    print("随机生成一个Chrome的user_agent:", fk.chrome())
    # ↓指定随机生成一个Chrome的user_agent并指定浏览器版本范围
    print(fk.chrome(version_from=95, version_to=116, build_from=5500, build_to=5800))print("随机生成一个NIME类型:", fk.mime_type())
    # ↓支持的类别:application/image/model/multipart/text/message/video/audio
    print("随机生成一个指定类别的NIME类型:", fk.mime_type(category="application"))print("随机生成Ture或False:", fk.boolean())
    print("随机生成None、Ture或False:", fk.null_boolean())
    print("随机生成Ture或False(25%概率为True):", fk.boolean(chance_of_getting_true=25))print("随机生成一个密码:", fk.password())
    print("随机生成一个12位的密码:", fk.password(length=12))
    print("随机生成一个MD5:", fk.md5())
    print("随机生成一个SHA1:", fk.sha1())
    print("随机生成一个SHA256:", fk.sha256())
    
  5. 随机生成日期相关的信息

    from datetime import date, datetimeprint("随机生成一个年份:", fk.year())
    print("随机生成一个月份:", fk.month())
    print("随机生成一个月份名称:", fk.month_name())
    print("随机生成一个天数:", fk.day_of_month())
    print("随机生成一个年月日:", fk.date())
    print("指定格式随机生成一个年月日:", fk.date(pattern="%Y年%m月%d日"))
    print("随机生成一个星期数:", fk.day_of_week())
    print("随机生成AM/PM:", fk.am_pm())
    print("随机生成一个时间:", fk.time())
    print("指定格式随机生成一个时间:", fk.time(pattern="%H:%M"))
    print("随机生产一个日期和时间:", fk.date_time())
    print("随机生成过去某天:", fk.date_between())
    print("指定范围内随机生成过去某天(5年前~今天):", fk.date_between(start_date="-5y"))
    print("指定范围内随机生成过去某天(至30天前):", fk.date_between(end_date="-30d"))
    print("指定范围内随机生成某天(5天前~30天后):", fk.date_between(start_date="-5d", end_date="+30d"))
    print("使用date对象在指定范围内随机生成日期和时间:",fk.date_time_between_dates(datetime_start=date(2020, 6, 6), datetime_end=date(2023, 8, 8)))
    print("使用datetime对象在指定范围内随机生成日期和时间:",fk.date_time_between_dates(datetime_start=datetime(2020, 6, 6, 9, 30, 20),datetime_end=datetime(2023, 8, 8, 10, 30, 50)))
    print("随机生成未来某天:", fk.future_date())
    print("随机生成未来某个日期和时间:", fk.future_datetime())
    print("随机生成未来30天内的某个日期:", fk.future_date(end_date="+30d"))
    print("随机生成未来30天内的某个日期和时间:", fk.future_datetime(end_date="+30d"))
    print("随机生成过去某天:", fk.past_date())
    print("随机生成过去某个日期和时间:", fk.past_datetime())
    print("随机生成过去5年内的日期:", fk.past_date(start_date="-5y"))
    print("随机生成过去15天内的日期和时间:", fk.past_datetime(start_date="-15d"))
    print("获取今天的日期:", fk.date_between_dates())
    print("获取今天的日期和时间:", fk.date_time_between_dates())
    print("随机生成今年的某个月份:", fk.date_this_year())
    print("随机生成一个早于当前时间的日期和时间(即过去的时间):", fk.date_time_this_year(before_now=True))
    print("随机生成一个晚于当前时间的日期和时间(即未来的时间):", fk.date_time_this_year(after_now=True))
    print("随机生成本月的某天:", fk.date_this_month())
    print("随机生成unix时间戳:", fk.unix_time())
    print("随机生成ISO8601时间戳:", fk.iso8601())
    print("随机时区:", fk.timezone())
    
  6. 随机生成数字/字符串/文本

    print("随机生整一个整数:", fk.pyint())
    print("指定范围内随机生成一个奇数:", fk.pyint(min_value=1, max_value=10, step=2))
    print("随机生成一个字符串:", fk.pystr())
    print("随机生成一个带前缀和后缀的8位的字符串:", fk.pystr(min_chars=2, max_chars=8, prefix="dyd-", suffix="-123"))
    print("指定范围内随机生成一个奇数:", fk.pyint(min_value=1, max_value=10, step=2))
    # ↓随机生成一个小数(整数部分3位,小数2位,只生成负数)
    print(fk.pyfloat(left_digits=3, right_digits=2, positive=False, min_value=1, max_value=10))
    print("随机生成一个decimal数据:", fk.pydecimal())
    # ↓随机生成一个1~10的decimal数据(整数部分3位,小数2位,只生成负数)
    print(fk.pydecimal(left_digits=3, right_digits=2, positive=False, min_value=1, max_value=10))
    print("随机生成一组dict数据:", fk.pydict())print("生成一个3位随机数:", fk.numerify())
    print("生成一个指定位数的随机数:", fk.random_number(digits=5))
    print("生成一个0-9的随机数:", fk.random_digit())
    print("生成一个1-9的随机数:", fk.random_digit_not_null())
    print("生成一个0-9999随机数:", fk.random_int())
    print("指定范围内生成一个随机数:", fk.random_int(min=60, max=100))print("随机生成一个字符(a~z小写):", fk.random_element())
    print("指定字符内随机生成一个字符:", fk.random_element(elements=("a", "b", "1", "D")))
    print("随机生成多个字符:", fk.random_elements())
    print("指定字符内随机生成3个字符且元素不可重复:",fk.random_elements(elements=("a", "B", "c", "D"), unique=True, length=3))
    print("随机生成一个ASCII字母(a~z大小写):", fk.random_letter())
    print("随机生成一个长度为16的二进制编码:", fk.binary(length=16))print("随机生成一个词语:", fk.word())
    print("随机生成多个词语(默认3个):", fk.words())
    print("指定范围内随机选择2个词语:", fk.words(ext_word_list=["啊", "哈哈", "gaga", "嘿嘿"], nb=2))
    print("随机生成一条句子:", fk.sentence())
    print("随机生成一条2个词组成的句子:", fk.sentence(nb_words=2))
    print("指定范围内随机组合生成1句话:", fk.sentence(ext_word_list=["abc", "def", "ghi", "jkl"]))
    print("随机生成多条句子(默认3条):", fk.sentences())
    print("指定范围内随机组合生成3句话:", fk.sentences(ext_word_list=["abc", "def", "ghi", "jkl"]))
    print("随机生成一个段落(默认3句):", fk.paragraph())
    print("随机生成一个5句话的段落:", fk.paragraph(nb_sentences=5))
    print("指定范围内随机组合生成3个段落:", fk.paragraph(ext_word_list=["abc", "def", "ghi", "jkl"]))
    print("随机生成多个段落(默认3个):", fk.paragraphs())
    print("随机生成5个段落:", fk.paragraphs(nb=5))
    print("指定范围内随机组合生成3个段落:", fk.paragraphs(ext_word_list=["abc", "def", "ghi", "jkl"]))
    print("随机生成一段文本:", fk.text())
    print("随机生成160个字:", fk.text(max_nb_chars=160))
    print("指定范围内随机组合生成80个字:", fk.text(ext_word_list=["abc", "def", "ghi", "jkl"], max_nb_chars=80))
    
  7. 随机生成列表/元组/字典/集合/迭代器/json

    print("随机生成一组list数据:", fk.pylist())
    # ↓随机生成一组指定数据类型的3组数据组成的list并指定允许使用的数据类型
    print(fk.pylist(nb_elements=3, value_types=[int, str, tuple], allowed_types=[bool, str, float, int]))print("随机生成一组tuple数据:", fk.pytuple())
    # ↓随机生成一组指定数据类型的2组数据组成的tuple并指定允许使用的数据类型
    print(fk.pytuple(nb_elements=2, value_types=[str, float], allowed_types=[bool, str, float]))print("随机生成一组dict数据:", fk.pydict())
    # ↓随机生成一组指定数据类型的3组数据组成的dict并指定允许使用的数据类型
    print(fk.pydict(nb_elements=2, value_types=[int, str, list], allowed_types=[bool, str, float, int]))print("随机生成一组set数据:", fk.pyset())
    # ↓随机生成一组指定数据类型的3组数据组成的set并指定允许使用的数据类型
    print(fk.pyset(nb_elements=3, value_types=str, allowed_types=[bool, str, float]))print("随机生成一组iterable数据:", fk.pyiterable())
    # ↓随机生成一组指定数据类型的3组数据组成的iterable并指定允许使用的数据类型
    print(fk.pyiterable(nb_elements=3, value_types=[int, str], allowed_types=[int, str, float]))print("随机生成一份10组json数据组成的列表:", fk.json())
    # ↓随机生成一份指定内容的1组json数据
    print(fk.json(data_columns={"userId": "uuid4", "token": "md5", "Info": {"name": "user_name", "telephone": "phone_number"}},num_rows=1))
    # ↓随机生成一份指定内容的缩进为2的1组json数据
    print(fk.json(data_columns={"userId": "uuid4", "Info": ["user_name", "ssn", "phone_number"]}, num_rows=1, indent=2))
    # ↓随机生成一份指定内容的1组字节形式的json数据
    print(fk.json_bytes(data_columns={"Info": ["uuid4", "user_name", "ssn", "phone_number"]}, num_rows=1))
    # ↓随机生成3行name为20pyint为3的固定宽度的数据并居中对齐,默认left,可设置middle、right
    print(fk.fixed_width(data_columns=[(20, "name"), (3, "pyint", {"min_value": 80, "max_value": 120})], align="middle",num_rows=3))
    
  8. 随机生成文件相关的信息

    # ↓随机生成3行带表头的有编号的以逗号分隔的数据
    print(fk.csv(header=("姓名", "地址", "身份ID", "手机号"),data_columns=("{{name}}", "{{address}}", "{{ssn}}", "{{phone_number}}"), num_rows=3, include_row_ids=True))
    # ↓随机生成5行带表头的无编号的以管道符分隔的数据
    print(fk.psv(header=("员工编号", "员工姓名", "手机号"),data_columns=("{{random_number}}", "{{name}}", "{{phone_number}}"), num_rows=5, include_row_ids=False))
    # ↓随机生成2行无编号的以制表符分隔的数据
    print(fk.tsv(data_columns=("{{phone_number}}", "{{name}}", "{{ssn}}"),num_rows=2, include_row_ids=True))
    # ↓随机生成3行无编号的以csv.excel分隔的数据,其实也是逗号分隔,只是数据无双引号
    print(fk.dsv(dialect="excel", data_columns=("{{phone_number}}", "{{name}}", "{{ssn}}"), num_rows=3, include_row_ids=True))
    # ↓随机生成3行无编号的以csv.excel分隔的数据,也是制表符分隔,只是数据无双引号
    print(fk.dsv(dialect="excel-tab", data_columns=("{{phone_number}}", "{{name}}", "{{ssn}}"), num_rows=3,include_row_ids=True))
    
  9. 随机生成颜色/表情

    print("随机生成一种颜色:", fk.color())
    print("随机生成一种颜色:", fk.color_name())
    # ↓支持的颜色选项:yellow/blue/orange/green/pink/purple/monochrome
    print("随机生成一种不同色调的红色:", fk.color(hue="red"))
    # ↓支持的亮度选项:light/dark/bright/random
    print("随机生成一种不同亮度的颜色:", fk.color(luminosity="light"))
    print("随机生成一个三元组颜色:", fk.hex_color())
    print("随机生成一种RGB格式颜色色值:", fk.rgb_color())
    print("随机生成一种CSS格式的RGB颜色色值:", fk.rgb_css_color())
    print("随机生成一个安全色名称:", fk.safe_color_name())
    print("随机生成一个安全色色值:", fk.safe_hex_color())print("随机生成一个emoji表情:", fk.emoji())
    

    以上所有入参均可为空,类似功能的参数基本一致,未详尽之处请自行尝试

  10. 每次请求获取相同的数据

    以上每个字段生成的数据都是随机的,但是了解编程的都明白计算机的这种随机只是一种伪随机,其随机性是可复现的,所以若想要每次生成的数据都是相同的,可通过固定住类方法的随机种子进而获得相同数据。在所需位置上方加上一条 Faker.seed(num)即可,使用seed(num)函数且给定同一个num值时,无论执行多少次获取随机数操作,得到的均为同一个数,比如:

    # 创建test1.py
    from faker import Fakerfk = Faker(locale="zh_CN")
    print("随机生产一个日期和时间:", fk.date_time())			 # 2003-07-08 04:23:08
    Faker.seed(666)
    print("随机生成一个姓:", fk.last_name())					 # 孙
    print("随机生成一个女性常用姓:", fk.last_name_female())	 # 鲁
    print("随机生成一个男性常用姓:", fk.last_name_male())		 # 周
    

    如上,每次请求的时间都会变更,而3个获取姓氏的结果都不会变,之后可通过使用seed_instance()方法切换到自己的randomRandom实例,不影响test1.py的文件内容,比如:

    # 创建test2.py
    from faker import Fakerfk = Faker(locale="zh_CN")
    print("随机生产一个日期和时间:", fk.date_time())
    fk.seed_instance(666)
    print("随机生成一个姓:", fk.last_name())					 # 孙
    print("随机生成一个女性常用姓:", fk.last_name_female())	 # 鲁
    print("随机生成一个男性常用姓:", fk.last_name_male())		 # 周
    print("随机生成一个姓名:", fk.name())
    

    以上每次请求的时间都会变更,但3个获取姓氏的结果会与test1.py中的结果一致,之后获取姓名的结果也会是固定数据

  11. Faker的应用

    1. 结合pymysql库将数据插入到数据库中

      关于pymysql的具体使用方法可通过查看官方文档了解,遇到个报错RuntimeError: 'cryptography' package is required for sha256_password or caching_sha2_password auth methods,意思是此两种加密方式需要cryptography包,所以执行命令pip install cryptography安装即可

      # 创建test3.py
      import pymysql.cursors
      from faker import Fakerfk = Faker(locale="zh_CN")class SQLFaker():def __init__(self):try:self.db = pymysql.connect(		# 连接数据库信息host="192.166.66.45",port=3306,user='root',password="usTxxxxd&0",database="test",charset="utf8mb4")except pymysql.Error as e:print(f'连接数据库失败!{e}')self.cursor = self.db.cursor()  	# 使用cursor()方法创建一个游标对象,用于操作数据库def createDabate(self):try:sql = """CREATE TABLE `employees` (`userid` varchar(50) UNIQUE COMMENT '员工id',`ename` VARCHAR (50) NOT NULL COMMENT '姓名',`username` VARCHAR (20) NOT NULL COMMENT '用户名',`password` VARCHAR (50) NOT NULL COMMENT '登录密码',`gender` VARCHAR (50) DEFAULT '-1' COMMENT '1表示男,0表示女,-1表示未知',`IDNum` VARCHAR (50) NOT NULL UNIQUE COMMENT '身份ID',`phoneNum` VARCHAR (50) NOT NULL COMMENT '手机号码',`email` VARCHAR (50) COMMENT '邮箱',`birthday` DATE COMMENT '生日',`createtime` DATETIME COMMENT '创建时间') DEFAULT CHARSET = utf8mb4 COMMENT = '员工信息表'"""self.cursor.execute(sql)  			 # 执行SQL语句,创建数据表print("employees表创建成功!")except pymysql.Error as e:if str(e).split(",")[0] == "(1050":print("employees表已存在,将尝试直接插入数据!")else:print(f'创建数据表失败!{e}')  		# 否则抛出异常def insertFakedata(self, num):try:for i in range(num):sql = """INSERT INTO `employees` VALUES('%s','%s','%s','%s','%s','%s','%s','%s','%s','%s')""" % (fk.uuid4(),                     # 用户idfk.name(),                      # 用户姓名fk.user_name(),                 # 用户名fk.password(),                  # 密码fk.random_int(min=-1, max=1),   # 性别fk.ssn(),                       # 身份IDfk.phone_number(),              # 手机号码fk.free_email(),                # 邮箱fk.date_of_birth(minimum_age=20, maximum_age=30)    # 生日,20~30岁之间fk.date_time_between_dates()	# 创建时间)self.cursor.execute(sql)	# 执行SQL语句,插入数据self.db.commit()  			# 提交插入的数据,若缺少即使执行成功,数据库也不会显示数据print(f"成功插入{num}条数据!")except pymysql.Error as e:print(f'插入数据失败!{e}')self.cursor.close()  				# 关闭游标对象self.db.close()  					# 关闭数据库if __name__ == '__main__':SQLFaker().createDabate()  				# 执行创建数据库SQLFaker().insertFakedata(500)			# 执行插入500条数据
      

      在这里插入图片描述

    2. 结合openpyxl库将数据导出到Excel中
      # 创建test4.py
      from faker import Faker
      from openpyxl import load_workbook
      from openpyxl.styles import Font, PatternFill
      from openpyxl.utils import get_column_letter
      from openpyxl.styles.alignment import Alignment
      from openpyxl.styles.borders import Border, Sidefk = Faker("zh_CN")def save_to_excel():wb = load_workbook("E:/Fakerdata.xlsx")  	# 打开Excel文件sheet = wb[wb.sheetnames[0]]  				# 选择表1side = Side(style='thin', color="000000")   # 设置单元格边框线条样式# ↓配置标题信息excel_header = ["编号", "姓名", "身份ID", "手机号", "邮箱", "所属公司", "是否在职"]for h in range(len(excel_header)):sheet.cell(row=1, column=h + 1, value=excel_header[h])sheet.freeze_panes = "A2"  # 冻结表头# ↓设置标题背景色、字体样式、大小并垂直居中,通过将数字转换为字母获取设置的单元格sheet[f"{get_column_letter(h + 1)}1"].font = Font(name=u"楷体", bold=True, size=13)sheet[f"{get_column_letter(h + 1)}1"].alignment = Alignment(horizontal="center", vertical="center")sheet[f"{get_column_letter(h + 1)}1"].border = Border(left=side, right=side, top=side, bottom=side)sheet[f"{get_column_letter(h + 1)}1"].fill = PatternFill(fill_type="solid", fgColor="FCFC0C")# 随机生成1000条数据,同时设置单元格样式for i in range(1000):for h in range(len(excel_header)):id = fk.random_number(digits=5)  # 随机生成5位数name = fk.name()  				 # 随机生成姓名ssn = fk.ssn()  				 # 随机生成身份IDphone = fk.phone_number()  		 # 随机生成手机号email = fk.email()  			 # 随机生成邮箱company = fk.company()  		 # 随机生成公司名称status = fk.words(ext_word_list=["在职", "已离职"], nb=1)[0]  # 在指定两个字中随机选择一个sheet.cell(row=i + 2, column=1, value=id)sheet.cell(row=i + 2, column=2, value=name)sheet.cell(row=i + 2, column=3, value=ssn)sheet.cell(row=i + 2, column=4, value=phone)sheet.cell(row=i + 2, column=5, value=email)sheet.cell(row=i + 2, column=6, value=company)sheet.cell(row=i + 2, column=7, value=status)# ↓设置生成内容的字体样式、大小并上下居中靠左对齐,通过将数字转换为字母获取设置的单元格sheet[f"{get_column_letter(h + 1)}{i + 2}"].font = Font(name=u"宋体", size=11)sheet[f"{get_column_letter(h + 1)}{i + 2}"].alignment = Alignment(horizontal="left", vertical="center")sheet[f"{get_column_letter(h + 1)}{i + 2}"].border = Border(left=side, right=side, top=side, bottom=side)wb.save("E:/Fakerdata.xlsx")  # 保存Excel文件if __name__ == '__main__':save_to_excel()
      

      在这里插入图片描述

    3. 在Pytest中使用Faker随机生成入参
      # 创建test5.py
      from faker import Faker
      import pytest, requestsfk = Faker(locale="zh_CN")
      # Faker.seed(1)				# 测试创建同名文章接口响应情况时,使用seed获取相同结果即可@pytest.mark.repeat(5)		# 使用装饰器设置执行次数
      def test_art():res_url = "http://192.166.66.45:8090/api/admin/posts"header = {"Admin-Authorization": "xxxxxx91f43942b0b74803445771cfee"}# 定义传参,入参由Faker随机生成art_data = {"title": fk.sentence(),"originalContent": fk.text(200),"status": fk.words(ext_word_list=["DRAFT", "PUBLISHED"], nb=1)[0],  # 在指定两个单词中随机选择一个"slug": fk.pystr(),"tagIds": [fk.random_int(min=1, max=6)],"categoryIds": [1]}r_art = requests.request(method="post", url=res_url, headers=header, json=art_data)assert r_art.json()["message"] == "OK" and r_art.status_code == 200  	# 断言if __name__ == "__main__":pytest.main(["-sv", "test5.py"])
      

      在这里插入图片描述

在使用这些伪数据时,需要注意数据的格式,请根据实际情况进行数据格式转换,关于Faker更多详细的介绍及参数请查看官方文档


http://www.ppmy.cn/news/1028172.html

相关文章

JMH— java API性能测试,方法参数调优测试框架

文章目录 简介依赖案例 简介 JMH即Java Microbenchmark Harness&#xff0c;一个易用Java基准测试框架&#xff0c;适合API性能测试&#xff0c;参数调优测试 依赖 <dependencies><dependency><groupId>org.openjdk.jmh</groupId><artifactId>…

射频入门知识-混频器-1

5.4混频电路-视频_哔哩哔哩_bilibili ​​​​​​​

常见的内存泄漏原因和解决方案

常见的内存泄漏原因和解决方案 1.全局引用 问题&#xff1a;在JavaScript代码中&#xff0c;使用全局变量或全局对象来保存对DOM元素或其他对象的引用&#xff0c;这可能导致内存泄漏。 解决方案&#xff1a;避免使用全局变量或全局对象&#xff0c;改用合适的作用域来管理变…

剑指 Offer !67. 把字符串转换成整数

剑指 Offer 67. 把字符串转换成整数 写一个函数 StrToInt&#xff0c;实现把字符串转换成整数这个功能。不能使用 atoi 或者其他类似的库函数。 首先&#xff0c;该函数会根据需要丢弃无用的开头空格字符&#xff0c;直到寻找到第一个非空格的字符为止。 当我们寻找到的第一…

【深度学习MOT】SMILEtrack SiMIlarity LEarning for Multiple Object Tracking,论文

论文&#xff1a;https://arxiv.org/abs/2211.08824 文章目录 AbstractIntroduction2. 相关工作2.1 基于检测的跟踪2.1.1 检测方法2.1.2 数据关联方法 2.2 基于注意力的跟踪 3. 方法3.1 架构概述3.2 用于重新识别的相似性学习模块&#xff08;SLM&#xff09; Experimental Res…

使用GraphQL在Postman中进行API测试

GraphQL 是一种用于API的开源数据查询和操作语言&#xff0c;用于API的查询语言和运行时。它使客户端能够精确地指定其数据需求&#xff0c;并获得预测性地结果。GraphQL旨在提高API的效率、灵活性和可靠性。 Postman 是一款用于API开发的强大工具&#xff0c;它支持REST和Gra…

MDC轻量化日志链路跟踪的若干种应用场景

0x01 前言 当你的应用程序同时处理多个用户的请求时&#xff0c;你会看到日志文件或者控制台中的输出通常都是交错的&#xff0c;而非线性连续的。尤其是在分布式系统中&#xff0c;一个用户请求可能包含了若干次的服务节点调用&#xff0c;它的日志也因此变得碎片化&#xff…

Flask 上下文是什么 ?

哈喽大家好&#xff0c;我是咸鱼。今天我们来聊聊什么是 Flask 上下文 咸鱼在刚接触到这个概念的时候脑子里蹦出的第一个词是 CPU 上下文 今天咸鱼希望通过这篇文章&#xff0c;让大家能够对 Flask 上下文设计的初衷以及应用有一个基本的了解 Flask 上下文 我们在使用 Flask 开…