Python Locust压测时写入CSV文件,邮箱被拆分为单个字符的问题解决
Python Locust压测时写入CSV文件,邮箱被拆分为单个字符的问题解决
嗨,我来帮你搞定这个邮箱被拆成单个字符的问题~
问题原因
你遇到的核心问题是**csv.writer.writerow()方法的参数要求**:这个方法接收的是一个可迭代对象(比如列表、元组),当你直接传入字符串email时,Python会把字符串当成“单个字符组成的可迭代序列”,所以每个字符都会被拆成CSV的一列,就出现了你看到的逗号分隔每个字符的情况。
解决方法
只需要把邮箱字符串放到一个列表(或元组)里传给writerow()就行,让它把整个邮箱当成一行的单个元素。另外我还帮你调整了代码里的两个小问题:
- 把
csvwriter的创建移到循环外面,不用每次循环都实例化一次,更高效; - 把文件打开模式从
"w"改成"a"(追加模式),避免每次执行register任务时清空之前的CSV内容(如果需要每次任务都重新生成5行,那可以保留"w",但通常压测时会需要累积记录)。
修改后的代码片段如下:
@task def register(self): self.client.request_name = "API Register User" # 这里把打开模式改成"a"追加,避免每次覆盖文件;如果需要每次清空可保留"w" with open("email.csv", "a", newline="") as csvfile: csvwriter = csv.writer(csvfile) # 把csvwriter移到循环外,只实例化一次 for x in range(5): email = ''.join(random.choices(string.ascii_letters + string.digits, k=10)) + str( x + 1) + "@gmail.com" telcocode = random.randint(10, 19) phone = random.randint(10000000, 99999999) phonestr = "+60" + str(telcocode) + str(phone) # 关键修改:把email放到列表里,让writerow把它当成一行的单个元素 csvwriter.writerow([email]) self.client.headers = { "x-api-key": "KZThJSCH1vWj5snaeQQ+TQ5rTbucayxXtDVHFmfRSJag5gLkUKOMgrpitL1jHIVr6bYAN5N9NrKWg6RhdgNThQ=="} response = self.client.post("https://", {"email": email, "phone": phonestr, "password": "abcd1234", "password_confirmation": "abcd1234"} ) assert response.status_code == 200, "Failed to register, status code: " + str(response.status_code) logging.info(response.text)
效果验证
修改后,CSV文件里的内容就会变成你想要的格式:
zbrXSFipH1@gmail.com IqO2itaQwm2@gmail.com 5wJb1vYXfH3@gmail.com GJSyIYSS9e4@gmail.com LM8RBapgI05@gmail.com
备注:内容来源于stack exchange,提问作者Ivan
相关产品推荐
相关产品推荐

