当前位置:   article > 正文

Python中的Faker库:生成Mock数据的利器(文末有场景举例)_python faker库

python faker库

Faker库是Python中一个强大的Mock数据生成库,可以帮助开发者快速生成各种Mock数据,从而简化开发和测试过程。在开发项目中,我们经常需要生成一些虚拟数据,如虚拟用户、订单、地址等。为了简化这个过程,Python提供了Faker库,一个强大的Mock数据生成器。本文将详细介绍Faker库的用法、作用以及代码示例,帮助你更好地在项目中运用Faker。

一、Faker库简介

Faker是Python的一个第三方库,用于生成虚拟数据。它支持全球各地的地名、职业、性别等数据生成。Faker库的核心功能是通过强大的生成算法,随机生成真实世界中的类似数据。Faker库广泛应用于数据测试、数据清洗和数据填充等领域。

二、Faker库的安装

Faker库的安装非常简单,只需使用pip命令即可:

pip  install  Faker

三、Faker内置测试数据的用法

  1. from faker import Faker
  2. from collections import OrderedDict
  3. # fake = Faker(["en_US", "zh_CN", "ja_JP"])
  4. fake = Faker(["zh_CN"])
  5. # print(fake.name())
  6. # print(fake['en-US'].name())
  7. # print(fake.company())
  8. # 1、使用?#自定义规则,随机生成字符串
  9. print(fake.bothify()) # 默认生成字符串格式: 05 RW
  10. print(fake.bothify(text="666????####", letters='我们的家')) # letters的字符串随机给text的?使用,##默认数字代替,格式如: 我我的我4777
  11. # 2、使用^自定义规则,随机生成16进制字符串
  12. print(fake.hexify(text='MAC Address: ^^:^^:^^:^^:^^:^^', upper=True)) # MAC Address: CD:18:FC:9F:B6:49
  13. # 3、随机生成 i18n 语言的代码
  14. print(fake.language_code()) # yo
  15. # 4、使用?自定义规则,随机生成ASCII字符串
  16. print(fake.lexify(text='Random Identifier: ??????????', letters='我ABCDE')) # Random Identifier: CBC我DD我ABE
  17. # 5、随机生成 i18n 区域设置
  18. print(fake.locale()) # zh_CH
  19. # 6、使用#!@%自定义规则,随机生成字符串
  20. print(fake.numerify(text='# @!! @ %')) # 1 98 7 (#=[0,9] %=[1,9] !=随机数字或空字符 @=非0数字或空字符)
  21. # 7、随机选择对象元素,并随机生成列表
  22. print(fake.random_choices(elements=('a', 'b', 'c', 'd'), length=10)) # ['a', 'c', 'c', 'd', 'a', 'd', 'd', 'b', 'b', 'a']
  23. print(fake.random_choices(elements=OrderedDict([("a", 0.45), ("b", 0.35), ("c", 0.15), ("d", 0.05), ]))) # ['b', 'c', 'a', 'a']
  24. # 8、随机生成0-9整数
  25. print(fake.random_digit()) # 0
  26. # 9、随机生成1-9整数
  27. print(fake.random_digit_not_null()) # 1
  28. # 10、随机生成0-9整数或空值
  29. print(fake.random_digit_or_empty()) # ""
  30. # 11、随机选择元素,默认可重复、长度为1
  31. print(fake.random_element(elements=('a', 'b', 'c', 'd'))) # a
  32. print(fake.random_element(elements=OrderedDict([("a", 0.45), ("b", 0.35), ("c", 0.15), ("d", 0.05), ]))) # a
  33. # 12、随机选择元素,默认可重复、长度不定
  34. print(fake.random_elements(elements=('a', 'b', 'c', 'd'), unique=False))
  35. print(fake.random_elements(elements=OrderedDict([("a", 0.45), ("b", 0.35), ("c", 0.15), ("d", 0.05), ]), length=20, unique=False))
  36. # 13、在指定范围内,随机生成整数
  37. print(fake.random_int(min=0, max=15, step=3))
  38. # 14、随机生成ASCII字符串 [a-zA-Z]
  39. print(fake.random_letter()) # 'y'
  40. # 15、随机生成ASCII字符串列表 [a-zA-Z]
  41. print(fake.random_letters(length=10)) # ['R', 'N', 'v', 'n', 'A', 'v', 'O', 'p', 'y', 'E']
  42. # 16、随机生成ASCII小写字符串
  43. print(fake.random_lowercase_letter()) # c
  44. # 17、随机生成整数
  45. '''
  46. 如果digits为None(默认值),则取值范围为1 ~ 9之间的随机整数。
  47. 如果fix_len为False(默认值),则可以生成所有不超过位数的整数。
  48. 如果fix_len为True,则只能生成具有精确位数的整数。
  49. '''
  50. print(fake.random_number(fix_len=True)) # 297371
  51. print(fake.random_number(digits=3, fix_len=False)) # 577
  52. # 18、随机生成元素不重复的不超出元素数量的列表
  53. print(fake.random_sample(elements=('a', 'b', 'c', 'd', 'f', 'f'), length=6)) # 元素可相同,但length不能大于6
  54. # 19、生成大写字母的ASCII字符串
  55. print(fake.random_uppercase_letter())
  56. # 20、随机生成接近某个数字的整数
  57. '''
  58. 如果le为False(默认值),则允许生成数量的140%。如果为True,则上限生成为100%。
  59. 如果ge为False(默认值),则允许生成数量减少到60%。如果为True,下限生成上限为100%。
  60. 如果提供了最小值的数值,则生成的小于最小值的值将被固定在最小值。
  61. 如果为max提供了一个数值,则生成的大于max的值将被固定在max。
  62. 如果le和ge都为True,则number的值将自动返回,而不管提供的min和max的值是什么。
  63. '''
  64. print(fake.randomize_nb_elements(number=100)) # 83
  65. print(fake.randomize_nb_elements(number=100, le=True, ge=True, min=80)) # 100
  66. # 21、随机生成地址和邮政编号
  67. print(fake.address())
  68. # 22、随机生成门牌号
  69. print(fake.building_number())
  70. # 23、随机生成城市
  71. print(fake.city())
  72. # 24、随机生成特殊市
  73. print(fake.city_suffix())
  74. # 25、随机生成国家
  75. print(fake.country())
  76. # 26、随机生成国家编号
  77. print(fake.country_code())
  78. # 27、生成当前国家
  79. print(fake.current_country())
  80. # 28、生成当前国家编号
  81. print(fake.current_country_code())
  82. # 29、随机生成邮编
  83. print(fake.postcode())
  84. # 30、随机生成街道地址
  85. print(fake.street_address())
  86. # 31、随机生成街道名称
  87. print(fake.street_name())
  88. # 32、随机生成街道名称后缀
  89. print(fake.street_suffix())
  90. # 33、随机生成汽车供应商牌照
  91. print(fake.license_plate()) # 974-XXRA
  92. # 34、生成ABA的路由传输号
  93. print(fake.aba())
  94. # 35、生成银行提供商的ISO 3166-1 alpha-2国家代码
  95. print(fake.bank_country()) # GB
  96. # 36、生成基本银行帐号(BBAN)
  97. print(fake.bban()) # MAAN00447407504564
  98. # 37、生成国际银行账号(IBAN)
  99. print(fake.iban())
  100. # 38、生成SWIFT代码
  101. print(fake.swift(length=11, primary=True, use_dataset=True)) # SVWBGBNKXXX
  102. # 39、生成11位的SWIFT代码
  103. print(fake.swift11(use_dataset=True)) # SVWBGBNKXXX
  104. # 40、生成8位的SWIFT代码
  105. print(fake.swift8(use_dataset=True))
  106. # 41、生成EAN码
  107. print(fake.ean(prefixes=('45', '49'), length=13)) # 4532804944052
  108. # 42、生成EAN13码
  109. print(fake.ean13(prefixes=('45', '49'))) # 4518561138095
  110. # 43、生成EAN8码
  111. print(fake.ean8(prefixes=('45', '49'))) # 45877841
  112. # 44、生成指定长度的本地化EAN条码
  113. print(fake.localized_ean(length=8))
  114. # 45、生成指定长度的本地化EAN13条码
  115. print(fake.localized_ean13())
  116. # 46、生成指定长度的本地化EAN8条码
  117. print(fake.localized_ean8())
  118. # 47、生成随机颜色值
  119. print(fake.color(hue='red'))
  120. print(fake.color(luminosity='light'))
  121. print(fake.color(hue=(100, 200), color_format='rgb'))
  122. print(fake.color(hue='orange', luminosity='bright'))
  123. print(fake.color(hue=135, luminosity='dark', color_format='hsv'))
  124. print(fake.color(hue=(300, 20), luminosity='random', color_format='hsl'))
  125. # 48、随机生成颜色名称
  126. print(fake.color_name())
  127. # 49、生成一个十六进制三元组格式的颜色
  128. print(fake.hex_color())
  129. # 50、生成一个以逗号分隔的RGB值格式的颜色
  130. print(fake.rgb_color())
  131. # 51、用CSS rgb()函数生成颜色格式
  132. print(fake.rgb_css_color())
  133. # 52、生成一个网络安全的颜色名称
  134. print(fake.safe_color_name())
  135. # 53、生成一个网络安全的颜色格式为十六进制三重
  136. print(fake.safe_hex_color())
  137. # 54、公司相关(技术\思想\名称...)
  138. print(fake.bs()) # leverage plug-and-play networks
  139. print(fake.catch_phrase())
  140. print(fake.company())
  141. print(fake.company_suffix())
  142. # 55、信用卡相关
  143. print(fake.credit_card_expire()) # 09/28
  144. print(fake.credit_card_full()) # 'Discover\nKatherine Fisher\n6587647593824218 05/26\nCVC: 892\n'
  145. print(fake.credit_card_number()) # 6504876475938248
  146. print(fake.credit_card_provider()) # VISA 19 digit
  147. print(fake.credit_card_security_code()) # 604
  148. # 56、货币相关
  149. print(fake.cryptocurrency())
  150. print(fake.cryptocurrency_code())
  151. print(fake.cryptocurrency_name())
  152. print(fake.currency())
  153. print(fake.currency_code())
  154. print(fake.currency_name())
  155. print(fake.currency_symbol())
  156. print(fake.pricetag())
  157. # 57、时间相关
  158. print(fake.am_pm())
  159. print(fake.century())
  160. print(fake.date())
  161. print(fake.date_between())
  162. print(fake.date_between_dates())
  163. print(fake.date_object())
  164. print(fake.date_of_birth())
  165. print(fake.date_this_century())
  166. print(fake.date_this_decade())
  167. print(fake.date_this_month())
  168. print(fake.date_this_year())
  169. print(fake.date_time())
  170. print(fake.date_time_ad())
  171. print(fake.date_time_between())
  172. print(fake.date_time_between_dates())
  173. print(fake.date_time_this_century())
  174. print(fake.date_time_this_decade())
  175. print(fake.date_time_this_month())
  176. print(fake.date_time_this_year())
  177. print(fake.day_of_month())
  178. print(fake.day_of_week())
  179. print(fake.future_date())
  180. print(fake.future_datetime())
  181. print(fake.iso8601())
  182. print(fake.month())
  183. print(fake.month_name())
  184. print(fake.past_date())
  185. print(fake.past_datetime())
  186. print(fake.pytimezone())
  187. print(fake.time())
  188. print(fake.time_delta())
  189. print(fake.time_object())
  190. print(fake.time_series())
  191. print(fake.timezone())
  192. print(fake.unix_time())
  193. print(fake.year())
  194. # 58、文件相关
  195. print(fake.file_extension())
  196. print(fake.file_extension(category='image'))
  197. print(fake.file_name(category='audio'))
  198. print(fake.file_name(extension='abcdef'))
  199. print(fake.file_name(category='audio', extension='abcdef'))
  200. print(fake.file_path(depth=3))
  201. print(fake.file_path(depth=5, category='video'))
  202. print(fake.file_path(depth=5, category='video', extension='abcdef'))
  203. print(fake.mime_type())
  204. print(fake.mime_type(category='application'))
  205. print(fake.unix_device())
  206. print(fake.unix_device(prefix='mmcblk'))
  207. print(fake.unix_partition())
  208. print(fake.unix_partition(prefix='mmcblk'))
  209. # 59、陆地坐标数据
  210. print(fake.coordinate())
  211. print(fake.latitude())
  212. print(fake.latlng())
  213. print(fake.local_latlng())
  214. print(fake.location_on_land())
  215. print(fake.longitude())
  216. # 60、因特网相关
  217. print(fake.ascii_company_email()) # 邮箱
  218. print(fake.ascii_email()) # ascii邮箱
  219. print(fake.ascii_free_email())
  220. print(fake.ascii_safe_email())
  221. print(fake.company_email()) # 公司邮箱
  222. print(fake.dga()) # 网址
  223. print(fake.domain_name()) # 网址
  224. print(fake.domain_word())
  225. print(fake.email())
  226. print(fake.free_email())
  227. print(fake.free_email_domain())
  228. print(fake.hostname())
  229. print(fake.http_method()) # http请求方法
  230. print(fake.iana_id()) # IANA注册ID
  231. print(fake.ipv4()) # 随机ip
  232. print(fake.ipv4_network_class()) # 网络类别
  233. print(fake.ipv4_private())
  234. print(fake.ipv4_public())
  235. print(fake.ipv6())
  236. print(fake.mac_address()) # mac地址
  237. print(fake.nic_handle()) # 网卡处理ID
  238. print(fake.nic_handles())
  239. print(fake.port_number()) # 端口号
  240. print(fake.ripe_id()) # 组织ID
  241. print(fake.safe_domain_name()) # 域名
  242. print(fake.safe_email()) # 邮箱
  243. print(fake.slug()) # Django算法
  244. print(fake.tld()) # 域名后缀
  245. print(fake.uri()) # http请求路径
  246. print(fake.uri_extension())
  247. print(fake.uri_page()) # 请求页面名
  248. print(fake.uri_path()) # 资源路径
  249. print(fake.url()) # url
  250. print(fake.user_name()) # 用户名
  251. # 61、isbn规则相关
  252. print(fake.isbn10())
  253. print(fake.isbn13())
  254. # 62、工作的职位名称
  255. print(fake.job())
  256. # 63、文章相关
  257. print(fake.paragraph(nb_sentences=5)) # 生成段落
  258. print(fake.paragraph(nb_sentences=5, variable_nb_sentences=False))
  259. print(fake.paragraph(nb_sentences=5, ext_word_list=['abc', 'def', 'ghi', 'jkl']))
  260. print(fake.paragraph(nb_sentences=5, variable_nb_sentences=False, ext_word_list=['abc', 'def', 'ghi', 'jkl']))
  261. print(fake.paragraphs(nb=5)) # 生成段落list
  262. print(fake.sentence(nb_words=10)) # 生成一个句子
  263. print(fake.sentence(nb_words=10, variable_nb_words=False))
  264. print(fake.sentences()) # 生成句子list
  265. print(fake.sentences(nb=5))
  266. print(fake.text(max_nb_chars=20)) # 文本字符串
  267. print(fake.text(max_nb_chars=80))
  268. print(fake.text(max_nb_chars=160))
  269. print(fake.text(ext_word_list=['abc', 'def', 'ghi', 'jkl']))
  270. print(fake.texts(nb_texts=5)) # 文本字符串列表
  271. print(fake.texts(nb_texts=5, max_nb_chars=50))
  272. print(fake.texts(nb_texts=5, max_nb_chars=50, ext_word_list=['abc', 'def', 'ghi', 'jkl']))
  273. print(fake.word()) # 词语字符串
  274. print(fake.word(ext_word_list=['abc', 'def', 'ghi', 'jkl']))
  275. print(fake.words()) # 词语列表
  276. print(fake.words(nb=5, ext_word_list=['abc', 'def', 'ghi', 'jkl']))
  277. print(fake.words(nb=4, ext_word_list=['abc', 'def', 'ghi', 'jkl'], unique=True))
  278. # 数据类型相关
  279. print(fake.binary(length=64)) # 创建字节
  280. print(fake.boolean(chance_of_getting_true=75)) # 布尔类型
  281. print(fake.csv(header=('Name', 'Address', 'Favorite Color'), data_columns=('{{name}}', '{{address}}', '{{safe_color_name}}'), num_rows=10, include_row_ids=True)) # 生成随机的逗号分隔值
  282. print(fake.dsv(data_columns=('{{name}}', '{{address}}'), num_rows=5, delimiter='$')) # 生成随机分隔符分隔值。
  283. print(fake.fixed_width(data_columns=[(20, 'name'), (3, 'pyint', {'min_value':50, 'max_value':100})], align='right', num_rows=2)) # 生成随机固定宽度值
  284. print(fake.image(size=(16, 16), hue=[90, 270], image_format='ico')) # 使用Python图像库生成一张图片并在上面绘制一个随机的多边形。如果没有安装它,这个提供程序将无法运行。以给定格式返回表示图像的字节。
  285. print(fake.json(data_columns=[('Name', 'name'), ('Points', 'pyint', {'min_value':50, 'max_value':100})], num_rows=1)) # 生成随机的JSON结构值
  286. print(fake.md5(raw_output=False)) # 生成MD5数据
  287. print(fake.null_boolean()) # 生成空值或布尔值
  288. print(fake.password(length=12)) # 生成密码
  289. print(fake.password(length=40, special_chars=False, upper_case=False))
  290. print(fake.psv(header=('Name', 'Address', 'Favorite Color'), data_columns=('{{name}}', '{{address}}', '{{safe_color_name}}'), num_rows=10, include_row_ids=True)) # 生成随机的管道分隔值
  291. print(fake.sha1(raw_output=False)) # 生成一个随机的SHA1哈希
  292. print(fake.sha256(raw_output=False)) # 生成一个随机的SHA256哈希
  293. print(fake.tar(uncompressed_size=256, num_files=32, min_file_size=4, compression='bz2')) # 生成包含一个随机有效tar文件的字节对象。
  294. print(fake.tsv(header=('Name', 'Address', 'Favorite Color'), data_columns=('{{name}}', '{{address}}', '{{safe_color_name}}'), num_rows=10, include_row_ids=True)) # 生成随机的制表符分隔值
  295. print(fake.uuid4()) # 如果使用可调用对象指定,则生成一个随机UUID4对象并将其转换为另一种类型
  296. print(fake.uuid4(cast_to=None))
  297. print(fake.zip(uncompressed_size=256, num_files=32, min_file_size=4, compression='bz2')) # 生成包含一个随机有效的zip归档文件的bytes对象。
  298. # 人相关
  299. print(fake.first_name()) # 人名
  300. print(fake.first_name_female()) # 女名
  301. print(fake.first_name_male()) # 男名
  302. print(fake.first_name_nonbinary())
  303. print(fake.language_name())
  304. print(fake.last_name())
  305. print(fake.last_name_female())
  306. print(fake.last_name_male())
  307. print(fake.last_name_nonbinary())
  308. print(fake.name())
  309. print(fake.name_female())
  310. print(fake.name_male())
  311. print(fake.name_nonbinary())
  312. print(fake.prefix())
  313. print(fake.prefix_female())
  314. print(fake.prefix_male())
  315. print(fake.prefix_nonbinary())
  316. print(fake.suffix())
  317. print(fake.suffix_female())
  318. print(fake.suffix_male())
  319. print(fake.suffix_nonbinary())
  320. # 电话号码相关
  321. print(fake.country_calling_code()) # 区号
  322. print(fake.msisdn())
  323. print(fake.phone_number())
  324. # 个人信息相关
  325. print(fake.profile())
  326. print(fake.simple_profile())
  327. # python相关(python数据类型)
  328. print(fake.pybool())
  329. print(fake.pydecimal())
  330. print(fake.pydict())
  331. print(fake.pyfloat())
  332. print(fake.pyint())
  333. print(fake.pyiterable())
  334. print(fake.pylist())
  335. print(fake.pyset())
  336. print(fake.pystr())
  337. print(fake.pystr_format())
  338. print(fake.pystruct())
  339. print(fake.pytuple())
  340. # ssn
  341. print(fake.ssn()) # 865-50-6891
  342. # 默认用户代理相关、认证信息相关、通行证相关
  343. print(fake.android_platform_token())
  344. print(fake.chrome())
  345. print(fake.firefox())
  346. print(fake.internet_explorer())
  347. print(fake.ios_platform_token())
  348. print(fake.linux_platform_token())
  349. print(fake.linux_processor())
  350. print(fake.mac_platform_token())
  351. print(fake.mac_processor())
  352. print(fake.opera())
  353. print(fake.safari())
  354. print(fake.user_agent())
  355. print(fake.windows_platform_token())

四、Faker库的使用场景举例

Faker库的使用方法相当简单,主要有以下几种生成虚拟数据的方法:

1.生成随机字符串

  1. from faker import Faker
  2. fake = Faker()
  3. random_string = fake.pystr(length=10)
  4. print(random_string)

2.生成随机地名

  1. from faker import Faker
  2. fake = Faker()
  3. country = fake.country_code()
  4. city = fake.city_name(country=country)
  5. print(f"国家:{country}, 城市:{city}")

3.生成随机职业

  1. from faker import Faker
  2. fake = Faker()
  3. job = fake.job()
  4. print(job)

4.生成随机性别

  1. from faker import Faker
  2. fake = Faker()
  3. gender = fake.gender()
  4. print(gender)

5.  生成随机手机号码

在测试短信验证、用户注册等场景时,我们需要生成随机的手机号码。Faker库可以很方便地生成虚拟的手机号码,示例代码如下:

  1. from faker import Faker
  2. fake = Faker()
  3. phone_number = fake.phone_number()
  4. print(phone_number)

6.  生成随机日期

在测试日期相关功能或者填充数据库时,我们可能需要生成随机的日期数据。Faker库可以生成各种格式的随机日期,示例代码如下:

  1. from faker import Faker
  2. fake = Faker()
  3. random_date = fake.date_of_birth(minimum_age=18, maximum_age=65)
  4. print(random_date)

7.  生成随机颜色

在设计和开发图形界面或数据可视化时,我们可能需要生成随机的颜色数据。Faker库可以生成各种格式的随机颜色,示例代码如下:

  1. from faker import Faker
  2. fake = Faker()
  3. random_color = fake.hex_color()
  4. print(random_color)

8.  生成随机IP地址

在网络安全测试、日志分析等场景中,我们可能需要生成随机的IP地址数据。Faker库可以生成合法的随机IP地址,示例代码如下:

  1. from faker import Faker
  2. fake = Faker()
  3. random_ip = fake.ipv4()
  4. print(random_ip)

9.  生成随机密码

在用户注册、账号管理等场景中,我们需要生成随机的密码。Faker库可以生成各种复杂度的随机密码,示例代码如下:

  1. from faker import Faker
  2. fake = Faker()
  3. random_password = fake.password(length=8, special_chars=True, digits=True, upper_case=True, lower_case=True)
  4. print(random_password)

10.  生成随机公司名称

在测试企业相关功能或者填充数据库时,我们可能需要生成随机的公司名称。Faker库可以生成各种类型的随机公司名称,示例代码如下:

  1. from faker import Faker
  2. fake = Faker()
  3. company_name = fake.company()
  4. print(company_name)

11. 生成虚拟订单数据

在需要测试电商、外卖等订单系统时,我们可以使用Faker库生成虚拟订单数据。以下是一个生成虚拟订单数据的示例::

  1. from faker import Faker
  2. import random
  3. fake = Faker()
  4. # 生成随机商品名称
  5. product_name = fake.product_name(length=10)
  6. # 生成随机商品价格
  7. product_price = random.randint(10, 100)
  8. # 生成随机订单号
  9. order_id = fake.order_id(length=10)
  10. # 生成随机用户名
  11. user_name = fake.username(length=10)
  12. # 生成随机配送地址
  13. address = fake.address()
  14. # 生成随机支付方式
  15. payment_method = fake.payment_method()
  16. # 生成随机下单时间
  17. order_time = fake.between(start_date="-5y", end_date="today").isoformat()
  18. # 输出虚拟订单数据
  19. print(f"订单号:{order_id}\n商品名称:{product_name}\n商品价格:{product_price}\n用户名:{user_name}\n地址:{address}\n支付方式:{payment_method}\n下单时间:{order_time}")

五、总结

本文介绍了Faker库的用法、更多的应用场景,并提供了丰富的代码示例。Faker库在生成各种虚拟数据方面非常强大,可以应用于各种开发和测试场景中。通过使用Faker库,开发者可以更加高效地生成虚拟数据,提高开发和测试的效率。希望本文可以帮助读者更好地理解和应用Faker库。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/一键难忘520/article/detail/766379
推荐阅读
相关标签
  

闽ICP备14008679号