12.8
数据驱动
数据驱动的思想:在自动化测试过程中,把测试过程中使用到的数据单独
数据驱动的思想:在自动化测试过程中,把测试过程中使用到的数据单独
的分离到文件中,这样统一来管理具体的测试数据。
文件的形式有:
json
yaml
csv 操作csv文件
excel 操作Excel
mysql
文件的形式有:
json
yaml
csv 操作csv文件
excel 操作Excel
mysql
JSON文件
JSON库主要应用于序列化以及反序列化中,针对文件的序列化可以简单的理解为就是把
第三方的数据写到文件里面,使用JSON库里面的方法是dump(),那么针对文件的反对序
列化可以理解为是从文件中读取数据,使用到的JSON库里面的load()的方法。

把测试的数据分离到JSON文件中
{
"loginNull": {"username": "","password": "","result": "请输入邮箱名"},
"emailFormat": {"username": "sadert","password": "asrtr","result": "您输入的邮箱名格式不正确"},
"loginError": {"username": "sdrtdt@sina.cn","password": "aserty","result": "登录名或密码错误"}
}
json文件用""双引号
operationJson 写入读取函数
import json import os def base_dir(): return os.path.dirname(os.path.dirname(__file__)) def readJson(): return json.load(open( os.path.join(base_dir(),'data','sina.json'), encoding='utf-8'))
完善后的测试模块
from selenium import webdriver import unittest import time as t from 单元测试框架.utils.operationJson import readJson class SinaLogin(unittest.TestCase): def setUp(self) -> None: self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.get('https://mail.sina.com.cn/') self.driver.implicitly_wait(30) def tearDown(self) -> None: self.driver.quit() def test_sina_longin_Null(self): '''sina邮箱验证:登录账户为空''' self.driver.find_element_by_id('freename').send_keys(readJson()['loginNull']['username']) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(readJson()['loginNull']['password']) t.sleep(2) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(2) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') t.sleep(2) self.assertEqual(divText.text,readJson()['loginNull']['result']) def test_sina_emai_Format(self): '''sina邮箱验证:登录邮箱格式不正确''' self.driver.find_element_by_id('freename').send_keys(readJson()['emailFormat']['username']) t.sleep(3) self.driver.find_element_by_id('freepassword').send_keys(readJson()['emailFormat']['password']) t.sleep(3) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(3) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') t.sleep(3) self.assertEqual(divText.text,readJson()['emailFormat']['result']) def test_sina_longin_Error(self): '''sina邮箱验证:登录账户不匹配''' self.driver.find_element_by_id('freename').send_keys(readJson()['loginError']['username']) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(readJson()['loginError']['password']) t.sleep(2) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(3) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') self.assertEqual(divText.text,readJson()['loginError']['result']) if __name__ == '__main__': run()
YAML文件
它的基本语法规则如下
- 大小写敏感
- 使用缩进表示层级关系
- 缩进时不允许使用Tab键,只允许使用空格。
- 缩进的空格数目不重要,只要相同层级的元素左侧对齐即可
安装yaml库代码
pip3 install pyyaml
把测试的数据分离到yaml文件中
loginNUll: username: "" password: "" result: "请输入邮箱名" emailFormat: username: "sdrgtdf" password: "werserty" result: "您输入的邮箱名格式不正确" loginError: username: "scsdfgh@sina.cn" password: "qwertaasdf" result: "登录名或密码错误"
operationyaml 写入读取函数
import yaml import os def base_dir(): return os.path.dirname(os.path.dirname(__file__)) def readYaml(): with open(os.path.join(base_dir(),'data','sina.yaml'),encoding='utf-8') as f: return yaml.safe_load(f)
完善后的测试模块
from selenium import webdriver import unittest import time as t from 单元测试框架.utils.operationYaml import readYaml class SinaLogin(unittest.TestCase): def setUp(self) -> None: self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.get('https://mail.sina.com.cn/') self.driver.implicitly_wait(30) def tearDown(self) -> None: self.driver.quit() def test_sina_longin_Null(self): '''sina邮箱验证:登录账户为空''' self.driver.find_element_by_id('freename').send_keys(readYaml()['loginNUll']['username']) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(readYaml()['loginNUll']['password']) t.sleep(2) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(2) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') t.sleep(2) self.assertEqual(divText.text,readYaml()['loginNUll']['result']) def test_sina_emai_Format(self): '''sina邮箱验证:登录邮箱格式不正确''' self.driver.find_element_by_id('freename').send_keys(readYaml()['emailFormat']['username']) t.sleep(3) self.driver.find_element_by_id('freepassword').send_keys(readYaml()['emailFormat']['password']) t.sleep(3) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(3) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') t.sleep(3) self.assertEqual(divText.text,readYaml()['emailFormat']['result']) def test_sina_longin_Error(self): '''sina邮箱验证:登录账户不匹配''' self.driver.find_element_by_id('freename').send_keys(readYaml()['loginError']['username']) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(readYaml()['loginError']['password']) t.sleep(2) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(3) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') self.assertEqual(divText.text,readYaml()['loginError']['result']) if __name__ == '__main__': run()
CSV文件
把测试的数据分离到csv文件中username,password,result ,,请输入邮箱名 sdfsdfsg,Asrety,您输入的邮箱名格式不正确 awesras@sina.com,sdfdrtsdzf,登录名或密码错误
operationcsv 写入读取函数
import csv
import os
def base_dir():
return os.path.dirname(os.path.dirname(__file__))
def redCsvDict():
'''读取的文件为字典形式'''
lists=[]
with open(os.path.join(base_dir(),'data','sina.csv'),encoding='utf-8-sig') as f:
reader=csv.DictReader(f)
for item in reader:
lists.append(dict(item))
return lists
# print(redCsvDict()[2]['result']) 调用函数
完善后的测试模块
from selenium import webdriver import unittest import time as t from 单元测试框架.utils.operationCsv import redCsvDict class SinaLogin(unittest.TestCase): def setUp(self) -> None: self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.get('https://mail.sina.com.cn/') self.driver.implicitly_wait(30) def tearDown(self) -> None: self.driver.quit() def test_sina_longin_Null(self): '''sina邮箱验证:登录账户为空''' self.driver.find_element_by_id('freename').send_keys(redCsvDict()[0]['username']) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(redCsvDict()[0]['password']) t.sleep(2) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(2) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') t.sleep(2) self.assertEqual(divText.text,redCsvDict()[0]['result']) def test_sina_emai_Format(self): '''sina邮箱验证:登录邮箱格式不正确''' self.driver.find_element_by_id('freename').send_keys(redCsvDict()[1]['username']) t.sleep(3) self.driver.find_element_by_id('freepassword').send_keys(redCsvDict()[1]['password']) t.sleep(3) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(3) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') t.sleep(3) self.assertEqual(divText.text,redCsvDict()[1]['result']) def test_sina_longin_Error(self): '''sina邮箱验证:登录账户不匹配''' self.driver.find_element_by_id('freename').send_keys(redCsvDict()[2]['username']) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(redCsvDict()[2]['password']) t.sleep(2) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(3) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') self.assertEqual(divText.text,redCsvDict()[2]['result']) if __name__ == '__main__': run()
list文件
把测试的数据分离到csv文件中
username,password,result ,,请输入邮箱名 sdfsdfsg,Asrety,您输入的邮箱名格式不正确 awesras@sina.com,sdfdrtsdzf,登录名或密码错误
operationlist 写入读取函数
def readCsvList(): '''列表的形式读取数据''' lists=[] with open(os.path.join(base_dir(),'data','sina.csv'),encoding='utf-8-sig') as f: reader=csv.reader(f) # 忽略第一行的内容 next(reader) for item in reader: lists.append(item) return lists # print(readCsvList()[1][2])
完善后的测试模块
from selenium import webdriver import unittest import time as t from 单元测试框架.utils.operationCsv import readCsvList class SinaLogin(unittest.TestCase): def setUp(self) -> None: self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.get('https://mail.sina.com.cn/') self.driver.implicitly_wait(30) def tearDown(self) -> None: self.driver.quit() def test_sina_longin_Null(self): '''sina邮箱验证:登录账户为空''' self.driver.find_element_by_id('freename').send_keys(readCsvList()[0][0]) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(readCsvList()[0][1]) t.sleep(2) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(2) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') t.sleep(2) self.assertEqual(divText.text,readCsvList()[0][2]) def test_sina_emai_Format(self): '''sina邮箱验证:登录邮箱格式不正确''' self.driver.find_element_by_id('freename').send_keys(readCsvList()[1][0]) t.sleep(3) self.driver.find_element_by_id('freepassword').send_keys(readCsvList()[1][1]) t.sleep(3) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(3) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') t.sleep(3) self.assertEqual(divText.text,readCsvList()[1][2]) def test_sina_longin_Error(self): '''sina邮箱验证:登录账户不匹配''' self.driver.find_element_by_id('freename').send_keys(readCsvList()[2][0]) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(readCsvList()[2][1]) t.sleep(2) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(3) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') self.assertEqual(divText.text,readCsvList()[2][2]) if __name__ == '__main__': run()
Exce文件
安装xlrd库代码
pip3 install xlrd
把测试的数据分离到csv文件中
operationexcel 写入读取函数
import os import xlrd def base_dir(): return os.path.dirname(os.path.dirname(__file__)) def reaExcel(): lists=[] sheet=xlrd.open_workbook(os.path.join(base_dir(),'data','sina.xls')) book=sheet.sheet_by_index(0) excel表格第一页 for itme in range(1,book.nrows): lists.append(book.row_values(itme)) return lists print(reaExcel())
完善后的测试模块
from selenium import webdriver import unittest import time as t from 单元测试框架.utils.operationExcel import reaExcel class SinaLogin(unittest.TestCase): def setUp(self) -> None: self.driver=webdriver.Chrome() self.driver.maximize_window() self.driver.get('https://mail.sina.com.cn/') self.driver.implicitly_wait(30) def tearDown(self) -> None: self.driver.quit() def test_sina_longin_Null(self): '''sina邮箱验证:登录账户为空''' self.driver.find_element_by_id('freename').send_keys(reaExcel()[0][0]) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(reaExcel()[0][1]) t.sleep(2) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(2) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') t.sleep(2) self.assertEqual(divText.text,reaExcel()[0][2]) def test_sina_emai_Format(self): '''sina邮箱验证:登录邮箱格式不正确''' self.driver.find_element_by_id('freename').send_keys(reaExcel()[1][0]) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(reaExcel()[1][1]) t.sleep(2) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(2) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') t.sleep(2) self.assertEqual(divText.text,reaExcel()[1][2]) def test_sina_longin_Error(self): '''sina邮箱验证:登录账户不匹配''' self.driver.find_element_by_id('freename').send_keys(reaExcel()[2][0]) t.sleep(2) self.driver.find_element_by_id('freepassword').send_keys(reaExcel()[2][1]) t.sleep(2) self.driver.find_element_by_class_name('loginBtn').click() t.sleep(2) divText=self.driver.find_element_by_xpath('/html/body/div[3]/div/div[2]/div/div/div[4]/div[1]/div[1]/div[1]/span[1]') self.assertEqual(divText.text,reaExcel()[2][2]) if __name__ == '__main__': run()

浙公网安备 33010602011771号