12.8

 
数据驱动

数据驱动的思想:在自动化测试过程中,把测试过程中使用到的数据单独
的分离到文件中,这样统一来管理具体的测试数据。

文件的形式有:
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() 
posted @ 2021-12-08 20:10  高。  阅读(162)  评论(0)    收藏  举报