說明:以上9篇文章是爲自動化框架作準備,接下來開始記錄測試用例篇,test case部分
這裏簡單介紹下test case 的大概框架,具體項目內容需要和實際業務關聯
import configparser
import json
import os
import unittest
from TeacherWebsite.common.config_handler import config
from TeacherWebsite.common.excel_handler import ExcelHandler
from TeacherWebsite.common.logger_handler import logger
from TeacherWebsite.common.requests_handler import RequestsHandler
from TeacherWebsite.libs.ddt import ddt, data
from TeacherWebsite.setting.constant import p_path
@ddt
class TestLogin(unittest.TestCase):
# 通過讀取配置文件得到cases.xlxs
file_name = config.read('excel', 'file_name')
file_path = os.path.join(p_path.DATA_PATH,file_name)#獲取整個路徑
#獲取sheet_name
sheet_name =config.read('excel', 'login_sheet')
# 讀取excel數據(測試數據)
test_data = ExcelHandler(file_path).read(sheet_name)
req = RequestsHandler()
#獲取配置文件的url
url = config.read('http','base_url_3')
#獲取配置文件的headers
cf = configparser.RawConfigParser()
cf.read('../setting/config.ini')
headers = cf.get('http','headers')
print()
#@classmethod不需要每次進入測試用例數據之前再執行初始化一次
@classmethod
def setUpClass(cls):
cls.req = RequestsHandler()#作爲一個類屬性,每次都會初始化
cls.logger = logger
@classmethod
def tearDownClass(cls):
pass
def setUp(self): #前置條件,測試用例方法之前自動運行setup裏面的程序
pass
def tearDown(self):##後置條件,測試用例方法之後自動運行tearDown裏面的程序
pass
#以上都是前置條件前置條件
1、以上是爲了前置條件作準備、比如讀取測試數據的路徑啊,req(接口驅動)的路徑之類的,讀取配置文件等等、headers讀取,這裏邊因爲我的header轉義問題,暫時先這麼寫入,後續可以將headers可以寫入Excel文件裏邊
導入的時候一定要看準導入路徑
2、寫入接口
@data(*test_data)#一定要加'*'
def test_login(self,test_info):#test_info是接收測試數據
#調用requests模塊訪問接口
res = self.req.json(test_info['method'],
self.url,
json = test_info['data'],
headers = eval(self.headers))#類屬性能通過實例去訪問
print(res)
try:
self.assertEqual(json.loads(test_info['expected']),res['msg'])
#json.loads:json 轉化爲字典,轉化就是爲了方便對照結果
# JsonDecodeerror 說明你用了一個非法的字符串方式,要用雙引號來包裝,外邊用單引號(在Excel 裏邊將該字段用雙引號闊起來就成,比如"系統繁忙")
#寫回excel,靜態方法
self.logger.info('斷言成功')#日誌記錄
ExcelHandler.write(self.file_path,
self.sheet_name,
test_info['caseid']+1,
2,
'pass')
except AssertionError as e:
#寫入斷言失敗
self.logger.error('斷言失敗')#日誌記錄
ExcelHandler.write(self.file_path,
self.sheet_name,
test_info['caseid'] + 1,
2,
'failed')# 2是表示第二列爲了以後測試方便,第二列就寫入測試結果用
raise e #拋出異常
#寫回Excel 不是必須的,這裏是爲了靈活展示Excel的操作,因爲我們在斷言的時候會寫入到測試報告裏
這裏邊try 函數是寫回的函數,可以不用寫在代碼裏邊
讀取測試數據的方式最好使用字典
Excelhandler: