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

背景

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

工具和思路
三个步骤:

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

如何做

  1. 安装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)
    

    代码执行后效果:
    批量生成测试数据,写入excel(python版本)_第1张图片
    脚本简单可行,生成数据不是梦,鄙人自学python,还有很多改善的地方,也请大家赐教。

你可能感兴趣的:(python相关测试工具开发)