
本文讲解如何使用 python 的 csv 模块将完整邮箱字符串作为单个字段写入 csv 文件,避免字符被逐个拆分为逗号分隔项,并提供 locust 负载测试中的正确实践示例。
本文讲解如何使用 python 的 csv 模块将完整邮箱字符串作为单个字段写入 csv 文件,避免字符被逐个拆分为逗号分隔项,并提供 locust 负载测试中的正确实践示例。
在使用 csv.writer 写入数据时,writerow() 方法接收一个可迭代对象(如列表),并将其中每个元素作为 CSV 的一列写入。若直接传入字符串(如 csvwriter.writerow(email)),Python 会将其视为字符序列——即 'abc@gmail.com' 被当作 ['a','b','c','@','g','m','a','i','l','.','c','o','m'] 处理,导致每个字符被逗号分隔,这正是你遇到问题的根本原因。
✅ 正确做法是:将邮箱字符串包裹成单元素列表(或元组),确保整个邮箱被视为 CSV 中的一列(即一行一列)。若希望每行仅存一个邮箱(推荐用于日志/结果记录),则应写为 writerow([email])。
以下是修正后的 Locust 任务代码关键片段(已优化结构与健壮性):
import csv
import random
import string
from locust import HttpUser, task, events
class LoadTestUser(HttpUser):
@task
def register(self):
# 使用 'a' 模式追加写入,避免每次覆盖;配合 newline="" 防止空行
with open("email.csv", "a", newline="") as csvfile:
csvwriter = csv.writer(csvfile)
email = ''.join(random.choices(string.ascii_letters + string.digits, k=10)) + \
str(random.randint(1, 999)) + "@gmail.com"
telco_code = random.randint(10, 19)
phone_num = random.randint(10000000, 99999999)
phone_str = f"+60{telco_code}{phone_num}"
# ✅ 关键修复:用 [email] 将字符串转为单元素列表
csvwriter.writerow([email])
self.client.headers = {
"x-api-key": "KZThJSCH1vWj5snaeQQ+TQ5rTbucayxXtDVHFmfRSJag5gLkUKOMgrpitL1jHIVr6bYAN5N9NrKWg6RhdgNThQ=="
}
response = self.client.post(
"https://your-api-domain.com/register",
json={
"email": email,
"phone": phone_str,
"password": "abcd1234",
"password_confirmation": "abcd1234"
}
)
if response.status_code != 200:
raise AssertionError(f"Registration failed: {response.status_code} - {response.text}")? 重要注意事项:
让 macOS 自动化像说话一样简单 —— 用代码控制你的 Mac,无需学习 AppleScript 系统要求 macOS 14+ (Sonoma) Python 3.9+ 需要开启:辅助功能 + 屏幕录制权限
立即学习“Python免费学习笔记(深入)”;
- ❌ 不要在循环内重复创建
csv.writer实例(原代码中每次for x in range(5)都新建 writer)——虽不报错,但效率低且易出错;✅ 应在外层初始化一次。 - ❌ 避免使用
"w"模式在@task中反复打开文件(会导致前序数据被清空);✅ 改用"a"(append)模式并确保首次运行前手动清空文件,或在测试开始前统一初始化 CSV。 - ✅ 始终指定
newline=""参数(Python 3.7+ 强制要求),防止 Windows 下出现额外空行。 - ✅ 若需写入多字段(如 email, phone, timestamp),可使用
writerow([email, phone_str, datetime.now().isoformat()])。
? 扩展建议:对于高并发 Locust 场景,频繁 IO 可能成为瓶颈。生产环境推荐改用线程安全的日志队列(如 queue.Queue + 单独写入线程)或异步日志库(如 aiologger),而非同步写文件。
通过以上调整,你的 email.csv 将正确生成如下格式:
[email protected] [email protected] [email protected] [email protected] [email protected]
每一行均为完整邮箱地址,无字符级分割,完全满足后续分析或人工校验需求。

















