第一種,測試數據放在Excel里面
test_Login:
import unittest
import time
import ddt
import os
from selenium import webdriver
from SWYJR.common.readexcel import ExcelUtil
from SWYJR.encapsulation.LoginPage import Login
# # 獲取xlsx路徑
# curpath = os.path.dirname(os.path.realpath(__file__))
# testxlsx = os.path.join(curpath, "demo_api.xlsx")
#
# # 復制demo_api.xlsx文件到report下
# report_path = os.path.join(os.path.dirname(curpath), "report")
# reportxlsx = os.path.join(report_path, "result.xlsx")
# sheetName = "登錄"
# testdata = readexcel.ExcelUtil(testxlsx, sheetName).dict_data()
excel = ExcelUtil("testdata.xlsx", "登錄")
print(excel.dict_data())
datas = excel.dict_data()
@ddt.ddt
class LogIn(unittest.TestCase):
''' 登錄測試 '''
def setUp(self):
self.driver = webdriver.Firefox()
self.login = Login(self.driver)
self.login.login_before() # 調前置條件
def tearDown(self):
self.driver.quit()
@ddt.data(*datas)
def test_login(self, data):
self.login.login(data['userName'], data['psw'])
self.text = self.login.exit_button()
self.assertIn(data['result'], self.text)
if __name__ == "__main__":
unittest.main()
readExcel:
# coding:utf-8
import xlrd
class ExcelUtil():
def __init__(self, excelPath, sheetName):
#def __init__(self, excelPath, sheetName):
self.data = xlrd.open_workbook(excelPath)
self.table = self.data.sheet_by_name(sheetName)
# 獲取第一行作為key值
self.keys = self.table.row_values(0)
# 獲取總行數
self.rowNum = self.table.nrows
# 獲取總列數
self.colNum = self.table.ncols
def dict_data(self):
if self.rowNum <= 1:
print("總行數小於1")
else:
r = []
j=1
for i in range(self.rowNum-1):
s = {}
# 從第二行取對應values值
values = self.table.row_values(j)
for x in range(self.colNum):
s[self.keys[x]] = values[x]
r.append(s)
j+=1
return r
if __name__ == "__main__":
# filepath = "D:\\test\\web-project\\5ke\\testdata.xlsx"
filepath = "E:\\testdata.xlsx"
sheetName = "登錄"
data = ExcelUtil(filepath, sheetName)
print(data.dict_data())
第二種,搭建個數據庫,測試數據放在數據庫里面,如:MySQL(個人比較喜歡用數據庫的方式做數據分離)
導入第三方庫pymysql,進行二次封裝
import unittest, ddt, urllib3
from interfaces.Process import login
from common.MySQL import MysqlUtil
urllib3.disable_warnings()
# 拿測試數據
datas = MysqlUtil("SELECT explanation, userName, password, expect FROM Login").mysql_getrows()
# print(datas)
@ddt.ddt
class LogIn(unittest.TestCase):
''' 登錄測試 '''
@ddt.data(*datas)
def test_login(self, data):
''' 測試用例 '''
self.user = data[1]
print(f'\n用戶名:{self.user}')
self.password = data[2]
print(f'\n密碼:{self.user}')
loginResult = login(self.user, self.password)[0]
print(f'\n預期結果: {data[3]} \n執行結果: {loginResult}')
self.assertEqual(loginResult, data[3])
if __name__=='__main__':
unittest.main()