在软件测试过程中,我们经常需要使用一些测试数据,通常都是只能使用已有的系统数据,但可能会因权限或其它原因不可使用,又或者手工编造一些数据,但数据量较大时影响测试效率,Faker就解决这个问题,Faker是python的一个第三方库,主要是用来创造伪数据的,只需要调用Faker提供的相关api即可完成数据的生成
pip install faker
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())
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())
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())
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())
from datetime import date, datetime
print("随机生成一个年份:", 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())
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))
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))
# ↓随机生成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))
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())
以上所有入参均可为空,类似功能的参数基本一致,未详尽之处请自行尝试
以上每个字段生成的数据都是随机的,但是了解编程的都明白计算机的这种随机只是一种伪随机,其随机性是可复现的,所以若想要每次生成的数据都是相同的,可通过固定住类方法的随机种子进而获得相同数据。在所需位置上方加上一条 Faker.seed(num)
即可,使用seed(num)函数且给定同一个num值时,无论执行多少次获取随机数操作,得到的均为同一个数,比如:
# 创建test1.py
from faker import Faker
fk = 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 Faker
fk = 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
中的结果一致,之后获取姓名的结果也会是固定数据
关于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 Faker
fk = 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(), # 用户id
fk.name(), # 用户姓名
fk.user_name(), # 用户名
fk.password(), # 密码
fk.random_int(min=-1, max=1), # 性别
fk.ssn(), # 身份ID
fk.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条数据
# 创建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, Side
fk = Faker("zh_CN")
def save_to_excel():
wb = load_workbook("E:/Fakerdata.xlsx") # 打开Excel文件
sheet = wb[wb.sheetnames[0]] # 选择表1
side = 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() # 随机生成身份ID
phone = 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()
# 创建test5.py
from faker import Faker
import pytest, requests
fk = 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更多详细的介绍及参数请查看官方文档