012 python接口 參數化與封裝
阿新 • • 發佈:2018-11-05
ima failed 用例 dir pen 配置 keep true 技術
‘‘‘ 時間:2018/11/04 目錄: 一: 禪道登錄
1 工程結構 2 unittest文件 3 實現功能文件
4 執行結果 二: 禪道登錄 - 報告
1 工程結構 2 Common 3 TestCase 4 TestFunction 5 TestReport 6 run_all.py
7 執行結果 三: 拉勾網登錄 四: 博客園登錄 ‘‘‘
一: 禪道登錄
1 工程結構
1 : 主要兩個文件,unittest文件和操作文件。
2 : unittest文件的功能:輸入數據、預期結果、斷言判斷。
2 : 操作文件的功能:步驟執行、返回實際結果 。
2 unittest文件
# coding:utf-8 import unittest from chandao_login.chandao_login_api_v2 import * class TestLogin(unittest.TestCase): #session = requests.session() def setUp(self): self.session = requests.session() deftearDown(self): self.session.cookies.clear() # 清除緩存 - cookies self.session.close() # 去除警告 - 關閉進程 def test_001(self): ‘‘‘ 登錄成功: 正確賬號 + 正確密碼 ‘‘‘ strUser = "admin" strPass = "123456" strResult = Login(self.session, strUser, strPass) bResult= DecideResult(strResult) self.assertTrue(bResult) def test_002(self): ‘‘‘ 登錄失敗: 正確賬號 + 錯誤密碼 ‘‘‘ strUser = "admin" strPass = "123456789" strResult = Login(self.session, strUser, strPass) bResult = DecideResult(strResult) self.assertFalse(bResult) def test_003(self): ‘‘‘ 登錄失敗: 錯誤賬號 + 錯誤密碼 ‘‘‘ strUser = "admin123" strPass = "123456789" strResult = Login(self.session, strUser, strPass) bResult = DecideResult(strResult) self.assertFalse(bResult) 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 執行結果
1 : 測試用例全部運行pass。
1 : 測試用例有failed。
二: 禪道登錄 - 報告
1 工程結構
1 : 由5個部分組成:4個文件夾 + 1個運行文件。
2 : Common文件夾: 存放公共的文件
3 : TestCase文件夾: 存放unittest文件
4 : TestFunction文件夾: 存放功能操作文件
5 : TestReport文件夾: 存放測試報告文件
6 : run_all.py: 執行測試、生成報告。
2 Common
1 : 使用第三方 HTMLTestRunner_cn.py,方便查看測試結果。
3 TestCase
# coding:utf-8 import unittest from TestFunction.chandao_login_api import * class TestLogin(unittest.TestCase): #session = requests.session() def setUp(self): self.session = requests.session() def tearDown(self): self.session.cookies.clear() # 清除緩存 - cookies self.session.close() # 去除警告 - 關閉進程 def test_001(self): ‘‘‘ 登錄成功: 正確賬號 + 正確密碼 ‘‘‘ strUser = "admin" strPass = "123456" strResult = Login(self.session, strUser, strPass) bResult = DecideResult(strResult) self.assertTrue(bResult) def test_002(self): ‘‘‘ 登錄失敗: 正確賬號 + 錯誤密碼 ‘‘‘ strUser = "admin" strPass = "123456789" strResult = Login(self.session, strUser, strPass) bResult = DecideResult(strResult) self.assertFalse(bResult) def test_003(self): ‘‘‘ 登錄失敗: 錯誤賬號 + 錯誤密碼 ‘‘‘ strUser = "admin123" strPass = "123456789" strResult = Login(self.session, strUser, strPass) bResult = DecideResult(strResult) self.assertFalse(bResult) if __name__ == ‘__main__‘: unittest.main()
4 TestFunction
# 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)
5 TestReport
1 : 運行完程序,生成一個report.html文件。
1 : 測試用例全部運行pass。
1 : 測試用例有failed。
6 run_all.py
# coding:utf-8 import unittest import os from Common import HTMLTestRunner_cn # 路徑兼容 - windows/mac cur_path = os.path.dirname(os.path.realpath(__file__)) # 獲取路徑 - 當前腳本 cur_path = os.path.join(cur_path, "TestCase") # 拼接路徑 # 顯示結果 - unnitest pattern = "test*.py" # 匹配文件 discover = unittest.defaultTestLoader.discover(start_dir = cur_path, pattern = pattern) print(discover) # 路徑兼容 - windows/mac cur_path = os.path.dirname(os.path.realpath(__file__)) # 獲取路徑 - 當前腳本 report_path = os.path.join(cur_path, "TestReport", "report.html") fp = open(report_path, "wb") runner = HTMLTestRunner_cn.HTMLTestRunner(stream = fp, # 報告路徑 title = "接口測試用例報告", # 報告標題 description = "測試用例詳情報告", # 報告描述 retry = 1, # 錯誤重寫執行 verbosity = 2) # 註釋顯示 runner.run(discover)
三: 拉勾網登錄
四: 博客園登錄
012 python接口 參數化與封裝