
大家好,我是搞自动化的大飞~
最近有小伙伴在后台问我:“看了好多自动化测试的文章,都在讲数据分离,到底是啥啊?”
说实话,我刚开始接触自动化测试那会儿也懵。什么数据驱动、关键字驱动、Page Object,一堆名词砸过来,脑子直接宕机。后来自己做项目踩了几次坑,才慢慢摸清楚——其实这东西很简单
所谓的数据分离,就是把你的测试数据单独放到一个文件夹里,代码里面只写逻辑。用的时候,代码去读那个文件拿数据就行了。
举个例子你就懂了。
假如你写了一个登录脚本,用户名密码直接写在代码里,像这样:
driver.find_element(By.NAME, "username").send_keys("john")
driver.find_element(By.NAME, "password").send_keys("demo")
看起来没啥问题是吧?好,第二天产品过来说:“大飞,测试账号换了啊,改成admin了。”
你怎么办?打开代码,找到这两行,改了,保存。
如果只有这一个脚本,还行。但如果你有几十个脚本都用到了这个账号呢?你得一个一个打开改,改到怀疑人生。
数据分离就是帮你避开这种尴尬的。
把数据抽出来放到外面,代码只负责干活。以后要改数据,直接改外面的文件就行,代码一行都不用动。
而且更爽的是,不懂代码的人也能改。你给测试同事丢一个json文件说“改这里就行”,他打开一看就懂了,不需要搞懂你的代码逻辑。
光说理论不好理解,咱们直接上手一个小的Demo项目
这里我用一个开源测试网站来做演示:https://parabank.parasoft.com/
默认账号密码是:
johndemo新建一个项目文件夹,就叫test01吧。里面放三个文件:
test01/
├── login.json # 存测试数据的
├── read_json.py # 读数据的工具
└── test_login.py # 测试脚本
先看read_json.py:
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')
这段代码干了几件事:
with open打开json文件读数据这里有个坑要提醒一下:一定要用return把数据传出去。之前有个小伙伴照着抄,结果发现调用的时候拿不到数据,折腾了半天发现是忘了写return,返回了个空值😂
然后看login.json:
{
"url": "https://parabank.parasoft.com/",
"name": "john",
"password": "demo"
}
很简单对吧?就是把网址、用户名、密码全塞进去了。
最后是test_login.py:
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等等格式,道理都一样。用什么格式看你团队的偏好和场景。
今天就到这,有搞不明白的地方评论区留言,咱们下期见👋