首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >大厂面试都在问的「数据分离」到底是个啥?

大厂面试都在问的「数据分离」到底是个啥?

作者头像
大飞记Python
发布2026-07-06 17:54:17
发布2026-07-06 17:54:17
10
举报

大家好,我是搞自动化的大飞~

最近有小伙伴在后台问我:“看了好多自动化测试的文章,都在讲数据分离,到底是啥啊?”

说实话,我刚开始接触自动化测试那会儿也懵。什么数据驱动、关键字驱动、Page Object,一堆名词砸过来,脑子直接宕机。后来自己做项目踩了几次坑,才慢慢摸清楚——其实这东西很简单

数据分离到底是个啥?

所谓的数据分离,就是把你的测试数据单独放到一个文件夹里,代码里面只写逻辑。用的时候,代码去读那个文件拿数据就行了。

举个例子你就懂了。

假如你写了一个登录脚本,用户名密码直接写在代码里,像这样:

代码语言:javascript
复制
driver.find_element(By.NAME, "username").send_keys("john")
driver.find_element(By.NAME, "password").send_keys("demo")

看起来没啥问题是吧?好,第二天产品过来说:“大飞,测试账号换了啊,改成admin了。”

你怎么办?打开代码,找到这两行,改了,保存。

如果只有这一个脚本,还行。但如果你有几十个脚本都用到了这个账号呢?你得一个一个打开改,改到怀疑人生。

数据分离就是帮你避开这种尴尬的。

把数据抽出来放到外面,代码只负责干活。以后要改数据,直接改外面的文件就行,代码一行都不用动。

而且更爽的是,不懂代码的人也能改。你给测试同事丢一个json文件说“改这里就行”,他打开一看就懂了,不需要搞懂你的代码逻辑。

一个小Demo,一看就明白

光说理论不好理解,咱们直接上手一个小的Demo项目

这里我用一个开源测试网站来做演示:https://parabank.parasoft.com/

默认账号密码是:

  • 用户名:john
  • 密码:demo

先搭个架子

新建一个项目文件夹,就叫test01吧。里面放三个文件:

代码语言:javascript
复制
test01/
├── login.json       # 存测试数据的
├── read_json.py     # 读数据的工具
└── test_login.py    # 测试脚本

写读数据的工具

先看read_json.py

代码语言:javascript
复制
import os
import json


class ReadJson:

    def read_json(self, file_name):
        # 项目目录
        BASE_PATH = os.path.dirname(__file__)
        # json文件目录
        file_path = BASE_PATH + os.sep + file_name

        # 读取json文件
        with open(file_path, "r", encoding='utf-8', errors='ignore') as fp:
            # 返回列表化json数据
            return list(json.load(fp).values())


if __name__ == '__main__':
    el = ReadJson()
    el.read_json('login.json')

这段代码干了几件事:

  1. 动态获取当前项目的路径,不管你把这个项目挪到哪都能自动找到
  2. with open打开json文件读数据
  3. 把数据转成列表返回

这里有个坑要提醒一下:一定要用return把数据传出去。之前有个小伙伴照着抄,结果发现调用的时候拿不到数据,折腾了半天发现是忘了写return,返回了个空值😂

把数据放进去

然后看login.json

代码语言:javascript
复制
{
  "url": "https://parabank.parasoft.com/",
  "name": "john",
  "password": "demo"
}

很简单对吧?就是把网址、用户名、密码全塞进去了。

写测试脚本

最后是test_login.py

代码语言:javascript
复制
from selenium import webdriver
from time import sleep
from selenium.webdriver.common.by import By
from read_json import read_json

# 启动浏览器驱动
driver = webdriver.Chrome()

# 读取数据
data = read_json("login.json")

# 输入测试地址
driver.get(data[0])
sleep(3)

# 找到用户名
driver.find_element(By.NAME, "username").send_keys(data[1])
sleep(1)

# 找到密码
driver.find_element(By.NAME, "password").send_keys(data[2])

# 点击登录
driver.find_element(By.CSS_SELECTOR, "[value='Log In']").click()
sleep(2)

# 关闭浏览器
driver.quit()

看到没?data[0]就是网址,data[1]是用户名,data[2]是密码。脚本里面一个硬编码的数据都没有。

以后账号换成admin了怎么办?

打开login.json,把"name": "john"改成"name": "admin",完事儿

这只是个开始

上面这个demo确实很简单,但数据分离的价值在项目变大的时候才能真正体现出来。

想象一下,你的测试用例有几百条,涉及不同的账号、不同的测试数据、不同的环境配置。如果所有数据都散落在代码里,维护起来就是一场噩梦。

但如果你用了数据分离:

  • 测试数据统一放一个目录,谁都能改
  • 开发环境和测试环境的切换只需要改配置文件
  • 非开发人员也能参与数据维护
  • 跑多组数据的时候,循环读文件就行了

说白了就是一句话:让数据归数据,代码归代码

当然了,除了json,你还可以用yaml、excel、csv等等格式,道理都一样。用什么格式看你团队的偏好和场景。

今天就到这,有搞不明白的地方评论区留言,咱们下期见👋

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2026-07-03,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 大飞记Python 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 数据分离到底是个啥?
  • 一个小Demo,一看就明白
    • 先搭个架子
    • 写读数据的工具
    • 把数据放进去
    • 写测试脚本
  • 这只是个开始
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档