013 python介面 資料驅動ddt
阿新 • • 發佈:2018-11-05
''' 時間:2018/11/05 目錄: 一: 安裝ddt 二: 禪道登入 1 工程結構 2 unittest檔案 3 實現功能檔案 4 執行結果 三: 使用excel 1 安裝xlrd 2 準備測試資料 四: 禪道登入
1 工程結構 2 unittest檔案 3 實現功能檔案
4 read_excel.py 5 執行結果 '''
一: 安裝ddt
1 : 執行輸入"cmd",進入Dos視窗。
2 : 輸入"pip install ddt"(安裝ddt模組)。
1 : 輸入"pip list"(檢視安裝的庫)。
2 : 可以看見已經安裝了ddt(1.2.0)。
1 : 輸入"pip show ddt"(檢視ddt的資訊)。
二: 禪道登入
1 工程結構
2 unittest檔案
# coding:utf-8 import unittest import ddt import requests from DataDriver.chandao_login_api import* data = [{"user": "admin", "psw": "123456", "expect": True}, {"user": "admin2", "psw": "123456", "expect": False}, {"user": "admin", "psw": "123456", "expect": True}, {"user": "admin4", "psw": "123123", "expect": False} ] @ddt.ddt class Test(unittest.TestCase):def setUp(self): self.session = requests.session() def tearDown(self): self.session.cookies.clear() # 清除快取 - cookies self.session.close() # 去除警告 - 關閉程序 @ddt.data(*data) # *data : 分組傳送 - 字典型別 def test_001(self, testData): strUser = testData["user"] strPass = testData["psw"] strResult = Login(self.session, strUser, strPass) bResult = DecideResult(strResult) self.assertTrue(bResult == testData["expect"]) if __name__ == '__main__': unittest.main()
3 實現功能檔案
# coding:utf-8 import requests url = "http://127.0.0.1/zentao/user-login.htm" # url經常變 : 做全域性變數 - 做配置檔案 def Login(session, strUser, strPass): ''' 登入禪道 :param session: session :param strUser: 使用者名稱 :param strPass: 密碼 :return: 請求結果 - 服務端 ''' body = { "account": strUser, "password": strPass, "keepLogin[]": "on", "referer": "/zentao/my.html" } r = session.post(url, data = body) strResult = r.content.decode("utf-8") return strResult def DecideResult(strResult): ''' 判斷結果 - 登入禪道 :param strResult: 請求結果 - 服務端 :return: True - 登入成功 Fasle - 登入失敗 ''' if "登入失敗" in strResult: print("登入失敗") return False elif "parent.location" in strResult: print("登入成功") return True else: print("登入失敗 - 其他情況") return False if __name__ == '__main__': s = requests.session() result = Login(s, "admin", "123456") DecideResult(result)
4 執行結果
1 : 測試用例全部執行pass。
1 : 測試用例有failed。
三: 使用excel
1 安裝xlrd
1 : 執行輸入"cmd",進入Dos視窗。
2 : 輸入"pip install xlrd"(安裝xlrd模組)。
1 : 輸入"pip list"(檢視安裝的庫)。
2 : 可以看見已經安裝了xlrd(1.1.0)。
2 準備測試資料
1 : 建立excel檔案,命名為testData。
2 : 填寫測試資料。
四: 禪道登入
1 工程結構
2 unittest檔案
# coding:utf-8 import unittest import ddt import requests from DataDriver.chandao_login_api import * from DataDriver.read_excel import ExcelUtil data = ExcelUtil("testData.xlsx", "Sheet1") data = data.dict_data() print(data) @ddt.ddt class Test(unittest.TestCase): def setUp(self): self.session = requests.session() def tearDown(self): self.session.cookies.clear() # 清除快取 - cookies self.session.close() # 去除警告 - 關閉程序 @ddt.data(*data) # *data : 分組傳送 - 字典型別 def test_001(self, testData): strUser = testData["user"] strPass = testData["psw"] strResult = Login(self.session, strUser, strPass) bResult = DecideResult(strResult) self.assertTrue(str(bResult) == testData["expect"]) if __name__ == '__main__': unittest.main()
3 實現功能檔案
# coding:utf-8 import requests url = "http://127.0.0.1/zentao/user-login.htm" # url經常變 : 做全域性變數 - 做配置檔案 def Login(session, strUser, strPass): ''' 登入禪道 :param session: session :param strUser: 使用者名稱 :param strPass: 密碼 :return: 請求結果 - 服務端 ''' body = { "account": strUser, "password": strPass, "keepLogin[]": "on", "referer": "/zentao/my.html" } r = session.post(url, data = body) strResult = r.content.decode("utf-8") return strResult def DecideResult(strResult): ''' 判斷結果 - 登入禪道 :param strResult: 請求結果 - 服務端 :return: ''' if "登入失敗" in strResult: print("登入失敗") return False elif "parent.location" in strResult: print("登入成功") return True else: print("登入失敗 - 其他情況") return False if __name__ == '__main__': s = requests.session() result = Login(s, "admin", "123456") DecideResult(result)
4 read_excel.py
# coding:utf-8 import xlrd class ExcelUtil(): def __init__(self, excelPath, sheetName="Sheet1"): 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 = "testData.xlsx" sheetName = "Sheet1" data = ExcelUtil(filepath, sheetName) print(data.dict_data())
5 執行結果
1 : 測試用例全部執行pass。
1 : 測試用例有failed。