数据驱动,指在自动化测试中处理测试数据的方式。
通常测试数据与功能函数分离,存储在功能函数的外部位置。在自动化测试运行时,数据驱动框架会读取
数据源中的数据,把数据作为参数传递到功能函数中,并会根据数据的条数多次运行同一个功能函数。
1、便于维护(维护的焦点从代码转到测试数据)
2、数据所属的测试用例失败,不会影响到其他测试数据对应的测试用例
1、编写数据存储文件
2、编写读取数据工具
3、使用参数化引用
1.2 实际操作
口诀:
1、新建json文件,在文件中编写一个{}
2、有几个模块,写几个key,值为列表
3、列表中参数化数据有几组,就写几个{}
4、每个{}中组成->说明+参数数据+预期结果
{
"login": [
{
"desc": "登录成功",
"ptone": "18886007825",
"password": "123456",
"code": "8888",
"expect_text": "18886007825"
}
]
}
import json
import os
def read_json(filename,key):
filepath = os.path.dirname(__file__) + os.sep + "data" + os.sep + filename
arr = []
with open(filepath,"r",encoding="utf-8") as fp:
for data in json.load(fp).get(key):
arr.append(tuple(data.values())[1:])
return arr
if __name__ == '__main__':
print(read_json("login.json","login"))
import unittest
from parameterized import parameterized
from selenium import webdriver
from page.page_login import PageLogin
from time import sleep
from util import read_json
class TestLogin(unittest.TestCase):
def setUp(self) -> None:
self.driver = webdriver.Chrome()
self.driver.maximize_window()
self.driver.get("http://hmshop-test.itheima.net/Home/user/login.html")
self.login = PageLogin(self.driver)
def tearDown(self) -> None:
sleep(3)
self.driver.quit()
@parameterized.expand(read_json("login.json","login"))
def test01_login(self,phone,password,code,expect_text):
try:
self.login.page_login(phone,password,code)
nickname = self.login.page_get_nickname()
print("nickname:",nickname)
self.assertEqual(nickname,expect_text)
except Exception as e:
print("错误!",e)