批量生成测试数据,写入excel(python版本)

    技术2022-07-14  91

    背景

    开启我的第一篇博客写作,以后记录我的整个工作和学习历程。本篇文章主要讲生成测试数据的需求,我们在工作中经常遇见生成上万条测试,要么批量写入excel,要么写入关系型数据库,要么写入图数据库带有网状结构的数据,手动去造,一方面效率低,另一方面无法保证数据的随机性。本篇文章先讲往excel批量写入测试数据。

    工具和思路 三个步骤:

    生成测试数据。特殊的数据需要自己代码实现,比较通用的数据我推荐直接采用faker库去生成组装数据,将数据组装成需要写入excel的格式写入数据,采用的openpyxl库

    如何做

    安装faker

    pip install Faker

    具体的api文档:

    faker接口文档地址:https://faker.readthedocs.io/en/master/locales/zh_CN.html

    生成的每一行的数据代码块:

    from faker import Faker def faker_maker(i): f = Faker(locale='zh_CN') #组装生成的每行数据,包括姓名,手机号,faker库的强大 faker_list = [] name = f.name() num_three = f.numerify() word =f.word() faker_list.append(str(i+1)) faker_list.append(name) faker_list.append(word) faker_list.append(num_three) print(faker_list) faker_maker(0)

    生数据的样式:

    ['1', '唐帅', '为了', '848']

    我这我一个特殊需求,需要生成111,112,113开头,还需要一定比例的测试数据,例如比例是3:3:4,我的想法是,把这个数据按照这个比例放在列表中,每次随机在里面取值,虽然做法low,但是可行的,代码如下:

    import random #生成比例手机号 def maker_phone(): num_113 = ["113" for i in range(3)] num_112 = ["112" for j in range(3)] num_111 = ["111" for k in range(4)] phone_num_head = num_113 + num_112 + num_111 phone_head = random.sample(phone_num_head,1) telephone = phone_head[0] # print(type(telephone)) phone_tail = [] for i in range(8): slice = random.randint(0,9) phone_tail.append(str(slice)) res = telephone + "".join(phone_tail) print(res) maker_phone()

    代码结果如下,每次随机生成一定比例的号码:

    11358344152

    2.将数据进行组装写入excel,先安装openpyxl

    pip install openpyxl

    具体的相关文档参考:openpyxl接口文档:https://segmentfault.com/a/1190000022194006/

    先写入表头,然后测试数据进行循环写入,全部代码如下,由于是临时写的脚本也没有封装成类,有空可以封装成工具:

    from openpyxl import Workbook from faker import Faker import random import time #写excel操作 def write_excel(fileName,data): wb = Workbook() # 写入表头 excel_head = ['序号', '手机号码', '姓名', '性别', '逾期金额'] sheet0Name = '名单信息' sheet0 = wb.create_sheet(sheet0Name, index=0) for i, item in enumerate(excel_head): sheet0.cell(row=1, column=i + 1, value=item) # 写入数据 for i, item in enumerate(data): i = i + 2 for j, val in enumerate(item): sheet0.cell(row=i, column=j + 1, value=val) wb.save(fileName + '.xlsx') #生成比例手机号 def maker_phone(): num_113 = ["113" for i in range(3)] num_112 = ["112" for j in range(3)] num_111 = ["111" for k in range(4)] phone_num_head = num_113 + num_112 + num_111 phone_head = random.sample(phone_num_head,1) telephone = phone_head[0] phone_tail = [] for i in range(8): slice = random.randint(0,9) phone_tail.append(str(slice)) res = telephone + "".join(phone_tail) return res #生成测试数据 def faker_maker(num,i): f = Faker(locale='zh_CN') print(num,i) faker_list = [] phone1 = maker_phone() name = f.name() num_three = f.numerify() word =f.word() faker_list.append(str(i+1)) faker_list.append(phone1) faker_list.append(name) faker_list.append(word) faker_list.append(num_three) return faker_list # 将测试数据放入列表 def faker_list_add(num): base_list = [] for i in range(num): fake_new_list = faker_maker(num,i) base_list.append(fake_new_list) return base_list start_time = time.time() write_excel(r'C:\XXX\XX\Desktop\XX\ool',faker_list_add(10000)) end_time = time.time() total_time = end_time - start_time print(total_time)

    代码执行后效果: 脚本简单可行,生成数据不是梦,鄙人自学python,还有很多改善的地方,也请大家赐教。

    Processed: 0.014, SQL: 9