python创建多账号写入csv文件

发布时间 2023-09-20 00:46:49作者: 小王要升级打怪

步骤:

1、取得当前数据库中最新的账号、账号ID列表;

2、基于最新账号,将字符串和数字拆分,实现数字自增,拼接固定的字符串生成新的用户名;将数字映射为中文数字,和固定中文拼接生成新的姓名;随机生成后八位手机号,和固定手机号拼接生成新的手机号;

    def test_CreateBasicInfo(self):

        # 依据查到的jx开头的最新的一个账号,数字部分自增,形成新的账户

        # 使用 re.findall() 和 re.split() 函数来拆分字符串为数字和非数字部分。然后,我们对数字部分进行自增操作,并将数字和非数字部分重新组合成字符串。最后,返回自增后的字符串。
        # 拆分字符串为数字和非数字部分
        result = self.test_getNewestAccount()
        NewestAccount = result[0]
        num_parts = re.findall(r'\d+', NewestAccount)
        non_num_parts = re.split(r'\d+', NewestAccount)
        # 对数字部分进行自增操作  num_parts为列表
        # 数字前含0时自增有问题
        num_parts = [int(num) for num in num_parts]

        # 取列表元素自增
        num_parts[-1] += 1
        # print('自增账号的数字部分为',num_parts,'类型为',type(num_parts))
        # 重新组合数字和非数字部分
        new_account = ''
        for i in range(len(num_parts)):
            new_account += non_num_parts[i] + str(num_parts[i])
        new_account += non_num_parts[-1]

        # print(new_account, realName)

        # 依据自增的账号的数字部分,映射为中文,与“XX”拼接 形成真实名字
        num_dict = {
            0: "",
            1: "",
            2: "",
            3: "",
            4: "",
            5: "",
            6: "",
            7: "",
            8: "",
            9: ""
        }
        # print('映射中文的键类型为',type(num_dict.keys()))
        for num in num_parts:
            # print(f'num为{num},类型为{type(num)}')
            num_str = str(num)
            realName =''
            for digit in num_str:
                realName+=num_dict[int(digit)]
        # 随机生成后8位手机号
        phoneNum = ''.join(random.choice('0123456789') for i in range(8))
        print(f'新账号为{new_account},姓名为{realName},电话后8位为{phoneNum}')

        return new_account,realName,phoneNum

 

 

3、基于创建账号接口,利用requests.post方法,将步骤2生成的值填充到入参中。利用while循环同时生成多个账号;

   # 批量生成账号
    def test_CreateAccount(self, test_login):
        head = {'Content-Type': 'application/json', 'Authorization': test_login[0]}  # test_login[0]为token
        i = 0
        # 想要一次性生成多少个就执行多少次
        while(i<10):
            result = self.test_CreateBasicInfo()
            userName =result[0]
            realName = 'XX'+result[1]
            phone = '178'+result[2]
            data1 = {"userName": userName, "positionId": "1", "staffNo": "", "realName": realName, "phone": phone,
                     "email": "25872xxxxxx@qq.com", "orgId": 107501, "deptId": 107501, "roleId": 1, "startTime": None,
                     "endTime": None, "enabled": True, "password": "1d12733abxxxxxxxx23e21d52a"}
            # #
            data1 = json.dumps(data1)  # 如果是json格式的入参,需要加这个
            r = requests.post(url + 'api/usXXXXer/XXX/XXXX', data=data1, headers=head)
            assert r.json()['message'] == '成功'
            print(r.json())
            i+=1

 

4、将生成的用户名、密码写入到csv文件中,可用于jmeter中的CSV Data Set Config;

    def test_InsertAbchinaCreateUsers(self):
        password = "1d12733xxxxxxxx58da23e21d52a"
        userNameList =self.test_getNewestAccount()[3]
        with open('abchinaCreateUsers.csv', 'w', newline='') as file:
            writer = csv.writer(file)
            # 写入标题行  在jmeter配置时要忽略第一行
            writer.writerow(["username", "password"])
            # 写入每个用户的信息
            for user in userNameList:
                writer.writerow([user,password])

 

5、完成性能测试后,借助删除账号接口及直接删除库里的数据,防止多个无用的账号存在;

   # 批量创建大量账号时执行,一般不执行
    def test_DeleteAccount(self,test_login):
        result = self.test_getNewestAccount()
        NestUserName = result[0]
        NestUserId = result[1]
        # 可以通过切片操作来删除列表的最后一个元素  my_list[:-1]表示"从列表的开始到倒数第二个元素
        NewestUserIdList = result[2][:-1]
        
        head = {'Content-Type': 'application/json', 'Authorization': test_login[0]}  # test_login[0]为token
        data1 = {"userIdList":NewestUserIdList}
    
        data1 = json.dumps(data1)  # 如果是json格式的入参,需要加这个
     
r = requests.post(url + 'api/XXXX/XXXX/deletxxxx', data=data1, headers=head) assert r.json()['message'] == '成功' print(r.json()) # 将数据库中造的假数据也删除 sql = "select user_name,user_id from xxx_user where user_name like 'xx%' and DELETED=0 order by user_id desc " conn = test_connect.getConnect()[2] cursor = conn.cursor() sql = "delete from xxxxxx_user where USER_NAME like 'xx%' and DELETED=1" cursor.execute(sql) # results = cursor.fetchall() conn.commit() conn.close()