python接口自動化基礎框架結構 ——分層


python接口自動化基礎框架結構 ——分層

--bin 用於存放啟動文件,如run.py

--cases cases目錄,存放測試腳本

--data   YAML文件

--lib  存放各種附加的代碼文件,如加密、鏈接數據庫、生成測試腳本等

--report   存放報告

--setting.py 存放各種路徑配置、服務器接口配置等等

--case_template.txt   模板文件,生成測試腳本的模板

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

--setting.py 存放各種路徑配置、服務器接口配置等等

import os

#設置目錄的絕對路徑
BASE_PATH = os.path.dirname(os.path.abspath(__file__))
DATA_PATH = os.path.join(BASE_PATH, 'data') #yaml測試用例存放位置
CASE_PATH = os.path.join(BASE_PATH, "testcase") #測試用例存放位置
REPORT_PATH = os.path.join(BASE_PATH, 'report') #測試報告存放位置

 ————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————

 

--case_template.txt   模板文件,生成測試腳本的模板

 

#接口自動化模板
import os
import unittest
import requests
from lib.md5_passwd import hash_code
from ddt import ddt,file_data
from lib.set_case_file import set_res_data
from setting import DATA_PATH

@ddt
class %(class_name)s(unittest.TestCase):
@file_data(os.path.join(DATA_PATH, '%(data_file)s.yaml'))
def test_%(method_name)s(self, **casedata):
url = casedata.get('url')
data = casedata.get('data')
method = casedata.get("method")
if "password" in data: #判斷是否存在密碼
data["password"] = hash_code(data["password"]) # 密碼取出后加密傳給自身
if method == "post":
result = requests.post(url=url, data=data) #post請求
else:
result = requests.get(url=url, params=data) #get請求
try:
if method.lower()=='post':
res = requests.post(url,data=data)
resp = res.text
else:
res = requests.get(url,params = data)
resp =res.text
except Exception as e:
print("接口請求出錯!")
resp = e


asserlist = casedata.get("asserlist")
check = set_res_data(result.text)
for asser in asserlist:
self.assertIn(asser, check)


if __name__ == '__main__':
unittest.main()

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
--bin 用於存放啟動文件,如run.py
run.py文件代碼
import os
import sys
import unittest
from setting import *
from lib.set_case_file import create_case_file
import time
from BeautifulReport import BeautifulReport as BetRep

#將當前項目的目錄加入零時環境變量,避免在其他地方運行時會出現引入錯誤
base_path = os.path.dirname(
os.path.dirname(os.path.abspath(__file__))
)
sys.path.append(base_path)

#首先調用生成用例函數
create_case_file()
#查找用例
discover = unittest.defaultTestLoader.discover(
start_dir=CASE_PATH,
pattern='*.py'
)
#執行生成測試報告
tittle = '接口測試'
time_now = time.strftime('%Y-%m-%d-%H_%M_S')
runner = BetRep(discover)
runner.report(tittle,
filename='{}_接口測試'.format(time_now),
report_dir=REPORT_PATH
)
————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
lib  存放各種附加的代碼文件,如加密、鏈接數據庫、生成測試腳本等

MD5加密
import hashlib
def hash_code(pwd):
md5 = hashlib.md5() #獲取md5對象
md5.update(pwd.encode('utf-8')) #將傳入的pwd編碼后,更新MD5的狀態
return md5.hexdigest() #返回十六進制的MD5碼

if __name__ == '__main__':
print(hash_code('12345'))

set_case_file.py 生成測試腳本
from setting import  *
def set_res_data(res):
if res:
return res.lower().replace('":"', "=").replace('":', "=")

def create_case_file():
file_lists = os.listdir(DATA_PATH) #取出data目錄下的所有文件
template_file = os.path.join(BASE_PATH,'case_template.txt')
for fList in file_lists:
if fList.endswith('.yaml') or fList.endswith('.yml'):
#測試用例文件名和yaml文件名
data_file = fList.replace('.yaml','').replace('.yml','')
#測試用例方法名
test_method_name = data_file.lower() #方法名全小寫
#測試用例類名
test_class_name = test_method_name.capitalize() #首字母大寫
with open(template_file,'r',encoding='utf-8') as temp:
content = temp.read()%{
'class_name' :test_class_name,
'method_name' : test_method_name,
'data_file' : data_file
}
test_case_file = 'test_{}.py'.format(data_file)
#根據模板生成測試用例文件
with open(os.path.join(CASE_PATH,test_case_file),'w',encoding='utf-8') as f:
f.write(content)

————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————
YAML文件
以小白接口為例,數據需替換
-   #用戶注冊
method: post
url: http://hd215.api.okayapi.com/?s=App.User.Register
data:
app_key: XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
username: xxx
password: xxx
asserlist:
- ret=200
- err_code=0
- err_msg=




————————————————————————————————————————————————————————————————————————————————————————————————————————————————————————


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM