Язык программирования Python

Генерация случайных данных с помощью faker в Python

Узнайте, как генерировать случайные данные для тестирования ваших приложений с помощью библиотеки Python faker.

Очень часто при создании приложений возникает ситуация, когда нам нужны данные для тестирования различных функциональных возможностей.

Чтобы решить эту проблему и работать с более разнообразными и реалистичными данными, изобретательные разработчики создали библиотеку Faker, которая может генерировать все типы случайных данных.

Установка и первые шаги

Чтобы установить Faker мы используем pip :

pip install Faker

Затем мы можем очень легко начать генерировать случайные данные, создав экземпляр класса Faker:

from faker import Faker fake = Faker() fake.name() # Alexander Bell fake.address() # 206 Howard Grove # East Haleyburgh, MO 00839 fake.text() # Project bank have recently. Various before local development. # Despite something successful next.
Code language: PHP (php)

Магия, не правда ли?

Если вам надоел английский язык, вы можете указать страну, данные из которой вы хотите генерировать, с помощью параметра locale :

from faker import Faker fake = Faker(locale="ru_RU") print(fake.name()) # Ильина Таисия Матвеевна print(fake.address()) # с. Аршан (Бурят.), пер. Морской, д. 359 стр. 9/2, 932589 print(fake.text()) # Коммунизм налево жестокий совет. Зеленый выраженный ремень плавно вздрогнуть желание термин. # Marche sauvage moАдвокат пол темнеть сустав пересечь.
Code language: PHP (php)

Примечание. Список всех значений, поддерживаемых locale, можно найти на этой странице.

Обратите внимание, что последовательные вызовы метода name каждый раз возвращают другое значение!

Простой цикл for, и мы автоматически генерируем десятки различных имен.

Генерация уникальных данных

Обычно, когда у вас есть набор данных, вы предпочитаете избегать дублирования значений.

Faker позволяет очень легко генерировать уникальные данные, помещая уникальное слово перед элементом, который вы хотите сгенерировать.

Например, если вы хотите сгенерировать 500 уникальных случайных чисел:

import faker fake = faker.Faker() for _ in range(500): print(fake.unique.random_int())
Code language: JavaScript (javascript)

Если вы мне не верите, можно проверить, что длина списка такая же, как у списка в формате set (set не допускают дублирования значений):

import faker fake = faker.Faker() numbers = [fake.unique.random_int() for _ in range(500)] assert len(numbers) == len(set(numbers)) # Никогда
Code language: JavaScript (javascript)

Если вы генерируете слишком много данных, Faker не сможет гарантировать их уникальность.

Например, если вы попытаетесь сгенерировать 50 000 случайных имен, то в итоге получите дубликаты.

Faker предупредит вас о дубликатах, выбросив исключение UniquenessException:

from faker import Faker fake = Faker() for _ in range(50000): print(fake.unique.first_name()) # После 1000 итераций мы получаем ошибку # faker.exceptions.UniquenessException: Got duplicated values after 1,000 iterations.
Code language: PHP (php)

База данных имен содержит не более 1000 уникальных значений, поэтому если вы попытаетесь сгенерировать 50 000, вы достигнете предела после 1000 итераций.

Несколько интересных наборов данных

Faker имеет множество “провайдеров“, которые позволяют генерировать случайные данные.

Количество данных, поддерживаемых библиотекой, действительно впечатляет.

Вот несколько примеров:

Генерация названий профессий.

from faker import Faker fake = Faker(locale="ru_RU") for _ in range(10): print(fake.job()) #Модель #Официант #Столяр #Фотомодель #Оператор вооружения #Борт-радист #Бактериолог #Искусствовед #Педиатр #Стоматолог
Code language: PHP (php)

file_path для генерации путей к файлам :

from faker import Faker fake = Faker() for _ in range(5): print(fake.file_path()) #/day/today.flac #/service/remember.numbers #/put/enter.tiff #/off/beautiful.mov #/bar/easy.mov
Code language: PHP (php)

Обратите внимание, что каждый провайдер принимает ряд параметров, которые позволяют получить более точные данные.

Для файлов, например, можно указать количество подпапок и категорию (тип) файлов, которые вам нужны:

from faker import Faker fake = Faker() for _ in range(5): print(fake.file_path(depth=5, category='video')) #/we/life/rich/camera/close/military.avi #/minute/law/too/exactly/business/owner.mp4 #/necessary/glass/us/health/how/win.webm #/front/opportunity/modern/without/heavy/operation.mp4 #/paper/skill/or/thank/similar/admit.webm
Code language: PHP (php)

credit_card для генерации номеров кредитных карт, включая credit_card_expire, credit_card_number и credit_card_security_code :

from faker import Faker fake = Faker() for _ in range(5): print(fake.credit_card_number(), fake.credit_card_expire(), fake.credit_card_security_code()) #2276100071207873 05/27 943 #4604762528318 04/31 730 #4486920584813202 07/26 963 #639004489600 08/25 809 #4702554979960 01/25 464
Code language: PHP (php)

К сожалению, эти кредитные карты не позволяют совершать онлайн-покупки :-).

С помощью hex_color или rgb_color вы можете генерировать случайные цвета:

from faker import Faker fake = Faker() for _ in range(5): print(fake.rgb_color()) # 205,49,136 # 32,160,130 # 255,178,40 # 41,123,122 # 100,48,43 from faker import Faker fake = Faker() for _ in range(5): print(fake.hex_color()) # #266358 # #1ce6a2 # #a35cd1 # #fa9f1b # #aa0b21
Code language: PHP (php)

Генерация конкретных данных

Иногда нужно быть немного более конкретным и генерировать случайные данные, которые соответствуют определенному формату.

Если вы, например, создаете приложение для управления складскими запасами книжного магазина, вам, вероятно, потребуется генерировать определенные номера ISBN (идентификационные номера книг).

Существует провайдер для создания данных ISBN, но не все случаи из всех стран учитываются.

Представьте, что вам нужно сгенерировать случайный номер ISBN в такой форме:

'978-2-5351-3933-554-23'
Code language: JavaScript (javascript)

Класс BaseProvider позволяет генерировать случайные последовательности, которые следуют определенному формату.

Метод numerify, например, позволяет использовать определенные символы по номерам. Символ # будет заменен на число от 0 до 9. Символ % будет заменен на число от 1 до 9.

Вы можете сгенерировать случайный ISBN следующим образом:

from faker import Faker fake = Faker() for _ in range(5): print(fake.numerify(text='%%%-%-%%%%-%%%%-%%%-%%')) # 568-1-3152-1486-157-28 # 775-4-4936-7785-358-32 # 649-2-5754-9224-327-61 # 712-6-8111-1927-199-59 # 555-2-3311-4633-725-18
Code language: PHP (php)

Нужно генерировать случайные артикулы? Легко с bothify :

from faker import Faker fake = Faker() for _ in range(5): print(fake.bothify(text='Артикул: ????-########')) # Артикул: LEnd-92786420 # Артикул: XGFW-14616317 # Артикул: zWMP-16845523 # Артикул: SAxo-14205482 # Артикул: cwwt-23855798
Code language: PHP (php)

Заключение

Как вы можете видеть, эта библиотека действительно весьма продвинута и позволит вам генерировать все типы данных, необходимые для наших тестов.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *