还在为每次需求变更重写脚本?用这套京东/美团都在用的数据驱动方案,维护效率提升90%!
一、残酷对比:普通VS数据驱动脚本的维护成本
# 传统硬编码脚本(需求变更必崩溃) def test_login(): driver.find_element(By.ID, "username").send_keys("admin") driver.find_element(By.ID, "password").send_keys("123456") # 数据驱动脚本(参数化应对变化) import csv @pytest.mark.parametrize("user,pwd", read_csv("login_data.csv")) def test_login(user, pwd): driver.find_element(By.ID, "username").send_keys(user) driver.find_element(By.ID, "password").send_keys(pwd)
企业收益:
-
新增测试数据 → 无需修改代码
-
测试逻辑变更 → 只改1处函数
-
失败用例定位 → 精准到数据行
二、四步落地数据驱动框架(含避坑指南)
步骤1:数据源选型决策树
避坑: CSV文件禁止用Excel编辑!(编码问题导致读取失败)
步骤2:数据加载器封装(附完整代码)
# 支持多源数据的工厂模式实现 def load_data(source): if source.endswith(".csv"): with open(source, encoding="utf-8-sig") as f: # 解决BOM头问题 return list(csv.DictReader(f)) elif source.endswith(".json"): return json.load(open(source)) elif source.startswith("mysql:"): return query_db(source.split(":")[1]) # 企业级数据库连接器 # 获取今日头条的测试数据 test_data = load_data("testcases/search_toutiao.json")
步骤3:Pytest高级参数化技巧
场景: 多账号权限验证(每个账号测不同功能)
# 动态生成测试ID(报告更直观) @pytest.mark.parametrize("user", test_data, ids=lambda d: f"{d['role']}权限测试") def test_permission(user): login(user["name"], user["pwd"]) assert check_access(user["expected_features"]) # 报告显示: # 管理员权限测试 # 运营人员权限测试
步骤4:失败数据自动溯源
配置pytest.ini:
[pytest] addopts = --tb=short --durations=0 ; 失败时重跑2次 reruns = 2 ; 自动保存失败用例数据 failed_data_file = reports/failed_cases.json
定位失败数据:
// failed_cases.json { "test_permission[运营人员权限测试]": { "user": {"name": "ops01", "pwd": "*****", "role": "operator"}, "error": "AssertionError: 缺少'删除'权限" } }
三、企业级数据安全方案(金融项目实战)
场景:测试含敏感数据(银行卡/身份证)
传统风险:
-
测试脚本含明文密码
-
CSV文件泄露客户信息
解决方案:
from cryptography.fernet import Fernet # 数据加密存储 key = Fernet.generate_key() cipher = Fernet(key) encrypted_pwd = cipher.encrypt(b"123456") # 写入测试数据文件 # 运行时动态解密 @pytest.fixture(scope="function") def decrypt_data(request): request.param["password"] = cipher.decrypt(request.param["enc_password"]).decode() return request.param # 使用: @pytest.mark.parametrize("user", test_data, indirect=True) def test_payment(user): pay(user["card_num"], user["password"])
明日预告:
《拒绝脚本屎山!Page Object模式让代码复用率提升300%》
(评论区挑战)
“你的测试脚本参数化率是多少?”
本文原创于【程序员二黑】公众号,转载请注明出处!
欢迎大家关注笔者的公众号:程序员二黑,专注于软件测试干活分享,全套测试资源可免费分享!
最后如果你想学习自动化测试,欢迎加入笔者的交流群:785128166,里面会有很多资源和大佬答疑解惑,我们一起交流一起学习!
来源链接:https://www.cnblogs.com/hebendexiaomao/p/18996768
没有回复内容