python 利用 Faker 生成测试数据

# -*- coding:utf-8 -*-
import time
from concurrent.futures import ThreadPoolExecutor

import pymysql
from faker import Faker
import sys
from dbUntils.mysql_DBUtils import MyPymysqlPool
import importlib

importlib.reload(sys)
fake2 = Faker(locale='ZH_CN')
# 简体中文:zh_CN
# 繁体中文:zh_TW
# 美国英文:en_US
# 英国英文:en_GB
# 德文:de_DE
# 日文:ja_JP
# 韩文:ko_KR
# 法文:fr_FR

# 定义DB 这里引用的是连接池,也可以直接调用定义的Mysql链接对象 insetrDate()
mysql = MyPymysqlPool("dbMysql")

base_sql = """INSERT INTO people_infomation( name, phone, snnCard, company, address, barcode) VALUES {values};"""


# 拼接SQL字符串,方法一
def sing(base_sql, params):
    params = tuple(['null' if param is None else param for param in params])

    format = ",".join(["'%s'"] * len(params))
    format = "({})".format(format % params)

    base_sql = base_sql.format(values=format)
    return base_sql


# 拼接SQL字符串,方法二
def multi(base_sql, datas):
    multiParams = []
    for params in datas:
        params = tuple(['null' if param is None else param for param in params])
        format = ",".join(["'%s'"] * len(params))

        format = "({})".format(format % params)
        multiParams.append(format)
    return base_sql.format(values=",".join(multiParams))


def insetrDate(sql):
    # 打开数据库连接
    # db = pymysql.connect(host="127.0.0.1", user="root", password="123", db="order_dev",
    #                      port=3306)
    db = pymysql.connect(host="139.198.180.175", user="root", password="123", db="order_dev",
                         port=3306)
    # 使用 cursor() 方法创建一个游标对象 cursor
    cursor = db.cursor()
    # sqll = "SELECT code,totalQty FROM shipment_header WHERE warehouseCode='%s'" % ('01')
    # sqll = """ SELECT DISTINCT attribute5 as 'ljc' FROM location_inventory """
    # 使用 execute()  方法执行 SQL 查询
    cursor.execute(sql)
    cursor.close()
    db.commit()
    db.close()


def instertMqlPool(sql):
    time.sleep(10)
    mysql.insert(sql)
    # 释放链接资源
    mysql.dispose()


def sqlParam():
    value_sql = []
    value_sql.append(fake2.name())
    value_sql.append(fake2.phone_number())
    value_sql.append(fake2.ssn())
    value_sql.append(fake2.company())
    value_sql.append(fake2.address())
    value_sql.append(fake2.ean13())
    return value_sql


if __name__ == '__main__':

    sqlParams = []
    sqlParamLists = []

    for i in range(1, 100001):
        sqlParams.append(sqlParam())
        if i % 100 == 0:
            sql = multi(base_sql, sqlParams)
            print(sql)
            sqlParamLists.append(sql)
            sqlParams = []
    # print(sqlParamLists)
    # 开启10个线程
    with ThreadPoolExecutor(10) as threadPool:
        for sqlParamList in sqlParamLists:
            threadPool.submit(instertMqlPool, sqlParamList)
            # insetrDate(sqlParamList)

### 常用函数

# 1、地理信息类
# fake.city_suffix():市,县
# fake.country():国家
# fake.country_code():国家编码
# fake.district():区
# fake.geo_coordinate():地理坐标
# fake.latitude():地理坐标(纬度)
# fake.longitude():地理坐标(经度)
# fake.postcode():邮编
# fake.province():省份
# fake.address():详细地址
# fake.street_address():街道地址
# fake.street_name():街道名
# fake.street_suffix():街、路
# 2、基础信息类
# ssn():生成身份证号
# bs():随机公司服务名
# company():随机公司名(长)
# company_prefix():随机公司名(短)
# company_suffix():公司性质
# credit_card_expire():随机信用卡到期日
# credit_card_full():生成完整信用卡信息
# credit_card_number():信用卡号
# credit_card_provider():信用卡类型
# credit_card_security_code():信用卡安全码
# job():随机职位
# first_name_female():女性名
# first_name_male():男性名
# last_name_female():女姓
# last_name_male():男姓
# name():随机生成全名
# name_female():男性全名
# name_male():女性全名
# phone_number():随机生成手机号
# phonenumber_prefix():随机生成手机号段
# 3、计算机基础、Internet信息类
# ascii_company_email():随机ASCII公司邮箱名
# ascii_email():随机ASCII邮箱:
# company_email():
# email():
# safe_email():安全邮箱
# 4、网络基础信息类
# domain_name():生成域名
# domain_word():域词(即,不包含后缀)
# ipv4():随机IP4地址
# ipv6():随机IP6地址
# mac_address():随机MAC地址
# tld():网址域名后缀(.com,.net.cn,等等,不包括.)
# uri():随机URI地址
# uri_extension():网址文件后缀
# uri_page():网址文件(不包含后缀)
# uri_path():网址文件路径(不包含文件名)
# url():随机URL地址
# user_name():随机用户名
# image_url():随机URL地址
# 5、浏览器信息类
# chrome():随机生成Chrome的浏览器user_agent信息
# firefox():随机生成FireFox的浏览器user_agent信息
# internet_explorer():随机生成IE的浏览器user_agent信息
# opera():随机生成Opera的浏览器user_agent信息
# safari():随机生成Safari的浏览器user_agent信息
# linux_platform_token():随机Linux信息
# user_agent():随机user_agent信息
# 6、数字类
# numerify():三位随机数字
# random_digit():0~9随机数
# random_digit_not_null():1~9的随机数
# random_int():随机数字,默认0~9999,可以通过设置min,max来设置
# random_number():随机数字,参数digits设置生成的数字位数
# pyfloat():
# left_digits=5 #生成的整数位数, right_digits=2 #生成的小数位数, positive=True #是否只有正数
# pyint():随机Int数字(参考random_int()参数)
# pydecimal():随机Decimal数字(参考pyfloat参数)
# 7、文本、加密类
# pystr():随机字符串
# random_element():随机字母
# random_letter():随机字母
# paragraph():随机生成一个段落
# paragraphs():随机生成多个段落
# sentence():随机生成一句话
# sentences():随机生成多句话,与段落类似
# text():随机生成一篇文章
# word():随机生成词语
# words():随机生成多个词语,用法与段落,句子,类似
# binary():随机生成二进制编码
# boolean():True/False
# language_code():随机生成两位语言编码
# locale():随机生成语言/国际 信息
# md5():随机生成MD5
# null_boolean():NULL/True/False
# password():随机生成密码,可选参数:length:密码长度;special_chars:是否能使用特殊字符;digits:是否包含数字;upper_case:是否包含大写字母;lower_case:是否包含小写字母
# sha1():随机SHA1
# sha256():随机SHA256
# uuid4():随机UUID
# 8、时间信息类
# date():随机日期
# date_between():随机生成指定范围内日期,参数:start_date,end_date
# date_between_dates():随机生成指定范围内日期,用法同上
# date_object():随机生产从1970-1-1到指定日期的随机日期。
# date_time():随机生成指定时间(1970年1月1日至今)
# date_time_ad():生成公元1年到现在的随机时间
# date_time_between():用法同dates
# future_date():未来日期
# future_datetime():未来时间
# month():随机月份
# month_name():随机月份(英文)
# past_date():随机生成已经过去的日期
# past_datetime():随机生成已经过去的时间
# time():随机24小时时间
# timedelta():随机获取时间差
# time_object():随机24小时时间,time对象
# time_series():随机TimeSeries对象
# timezone():随机时区
# unix_time():随机Unix时间
# year():随机年份
# 9、python 相关方法
# profile():随机生成档案信息
# simple_profile():随机生成简单档案信息
# pyiterable()
# pylist()
# pyset()
# pystruct()
# pytuple()
# pydict()
# 可以用dir(fake),看Faker库都可以fake哪些数据,目前Faker支持近300种数据,此外还支持自己进行扩展。


posted @ 2022-04-27 11:22  darling331  阅读(63)  评论(0编辑  收藏  举报