python创建多账号写入csv文件
步骤:
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()