在自动化测试中,为了减少对脚本的维护,需要将数据和代码进行分离,通过这种分离将对自动化脚本的维护重心由代码转到对数据的维护,所以称之为数据驱动。数据驱动也是我们常说的参数化的一种形式。
接下来我们看一下如何进行数据驱动,整体思路:
1.编写数据存储文件
2.编写读取数据工具
3.使用参数引用
作实际操
步骤1:编写数据存储文件
这里的数据文件可以选择两种:json、csv文件
1.json文件
{
"login_success": [
{
"username": "admin",
"password": "123456",
"expect": "办公"
},
{
"username": "12345678001",
"password": "123456",
"expect": "办公"
}
],
"login_fail":[
{
"username": "18912345677",
"password": "123456",
"expect": "悟空CRM系统"
}
],
"custom": [
{
"customname": "test42205",
"expect": "test42205"
},
{
"customname": "test42306",
"expect": "test42306"
}
]
}
2.csv文件
18986026502,123456,忽略更新
18912345677,123456,忘记密码
18912345688,123456,忘记密码
步骤2:读取工具封装
1.读取json文件
def build_data(file_path,modename):
# file_path=BASE_DIR+r'/data/login_data_success.json'
my_list=[]
with open(file_path,mode='r',encoding='utf-8') as f:
content=json.load(f)
if modename=='login_success':
for dic in content['login_success']:
my_tuple=(dic["username"],dic["password"],dic["expect"])
my_list.append(my_tuple)
elif modename == 'login_fail':
for dic in content['login_fail']:
my_tuple = (dic["username"], dic["password"], dic["expect"])
my_list.append(my_tuple)
else:
print("没有匹配的数据")
return my_list
2.读取csv文件
def build_data_csv(file_path):
# file_path=BASE_DIR+r'/data/login_data_success.json'
my_list=[]
with open(file_path,mode='r',encoding='UTF-8') as f:
reader=csv.reader(f)
for row in reader:
my_tuple=(row[0],row[1],row[2])
my_list.append(my_tuple)
# my_list=[row for row in reader]
return my_list
步骤3:使用参数引用
1.引用json文件
@parameterized.expand(build_data(file_path1,'login_success'))
def test_login1(self,username,password,expect):
my_base = PageLogin(self.browser)
my_base.page_login(username,password)
assert_text=my_base.assert_text_success()
self.assertEqual(expect,assert_text)
2.引用csv文件
@parameterized.expand(build_data_csv(file_path1))
def test_login1(self,username,password,expect):
my_base = PageLogin(self.browser)
my_base.page_login(username,password)
try:
assert_text=my_base.assert_text_success()
self.assertEqual(expect,assert_text)
except Exception as e:
print(e)
assert_text=my_base.assert_text_fail()
self.assertEqual(expect,assert_text)