TEP自動化測試工具


tep測試工具簡介

tep的定位是工具也是一種理念而不是框架,因為它是基於pytest框架,tep的作用:

1.使目錄更加規范化

 

 

files: 存放腳本依賴的圖片,數據,音頻之類的文件

fixture: 存放用例所需要的一些公共方法

reports: 存放allure測試報告

tests:存放測試用例

conf.yaml: 配置文件,一般應用當前運行用例環境的區分

conftest.py: 把fixture, 在conftest文件中進行封裝,conftest 會遍歷 fixtures 目錄下面所有以fixture_ 開頭 .py 結尾的文件.,把里面的 fixture進行自動導入

pytest.ini: pytest配置

 

2. 搭建方便

tep已經收錄到了pypi,使得tep擁有了可以快速的項目的能力,也就是腳手架,命令行 執行 pip install tep 進行安裝

執行 tep startproject project_name,就可以創建項目結構

 

 

 

3. 公共方法存儲簡潔

fixtures公用方法詳情:

 

 

 

 

fixture_admin.py: 管理員所需要維護的一些公用方法

fixture_env_var.py: 存放全局環境變量,根據conf.yaml 內填寫的環境 來進行判斷拼接 需要請求的url,或用於其他的環境變量

fixture_login.py: 登錄接口

fixture_your_name.py: 項目成員共享的一些fixture

 

簡潔的接口自動化運行示例:

在tests目錄下進行編寫用例文件,接口用例運用的yaml進行存儲,好處就是在於yaml文件支持數組,配置有序,簡潔

 

 

 yaml 一個接口的用例結構:

-
name: 當前的用例名稱
case_id: 1
request:
method: post # 接口請求方法
url: /*****/****/ # 接口名
headers: # 請求頭
Content-Type: application/json
authorization: Bearer 7209b501-0680-4a3e-be70-c20f0b64c941
Cache-Control: no-cache
User-AgentL: PostmanRuntime/7.26.8


params: # 請求參數
type: P
department_id: []
approve_start_date: "2021-06-10"

check: # 需要校驗的數據
expected_result: test_all_examine_check.json # 由於需要校驗接口響應的數據過大 可以單獨創建一個json文件進行存儲

 用例完成后,可以再寫一個文件的取的公共方法

# 查詢yaml文件 並返回
def read_yaml(yaml_name):
'''
讀取yaml,將yaml反序列化,就是把yaml格式轉換成dict格式
:return:
'''

try:
yaml_file = "../tests/test_case/" + yaml_name
with open(yaml_file, encoding="utf-8") as f:
value = yaml.load(f, Loader=yaml.FullLoader) # 文件流,加載方式

return value

except Exception as e:
yaml_file = "./tests/test_case/" + yaml_name
with open(yaml_file, encoding="utf-8") as f:
value = yaml.load(f, Loader=yaml.FullLoader) # 文件流,加載方式

return value

接口用例編寫:

(用例支持日志存儲,失敗重跑,響應字段的鍵/值校驗,報告定期刪除)

import pytest
from fixtures.fixture_your_name import read_yaml, ys, cmp
from tep.client import request
from loguru import logger
import time
import decimal
import json
import allure
@allure.description("""簡介:此執行集只做調試使用""")
class Test_Examine(object):

yaml_data = read_yaml("test_all_examine.yaml") # 獲取測試集文件內容

@allure.description_html("""
<h1>調試版本</h1>
""")
@pytest.mark.flaky(reruns=3, reruns_delay=3) # 失敗重試 每3秒重試一次,共重試3次
@pytest.mark.parametrize('yaml_case', yaml_data) # 數據驅動,讀取用例執行集yaml文件中的列表,
@allure.title('審核模塊')
def test_examine(self, yaml_case, env_vars, config):

api = ys(yaml_case, "url")[0] # ys 只是封裝了一個 jsonpath 查詢的公共方法
method = ys(yaml_case, "method")[0]
params = ys(yaml_case, "params")[0]
apinam = ys(yaml_case, "name")[0] # 接口名稱
headers = ys(yaml_case, "headers")[0]
url = env_vars.domain + api # 完整url

logger.info("當前請求用例:%s,URL:%s,請求方法:%s,params:%s,headers:%s"%(apinam, url, method, params, headers))

# 起始時間
start = time.process_time()

# 接口請求
response = request(method, url=url, headers=headers, json=params)

# 請求結束時間
end = time.process_time()

# 接口耗時
elapsed = str(decimal.Decimal("%.3f" % float(end - start))) + "s"
logger.info(' 接口:%s,*************** 執行耗時:%s ***************' % (url, elapsed))

ret = response.json() # 獲取接口json 類型響應:ret
      case_id = str(ys(yaml_case, 'case_id')[0])  # 用例唯一c ase ID
check_field = read_yaml(ys(yaml_case, "expected_result")[0]) # yaml用例需要校驗id
# 取出 當前用例需要校驗的json響應:chek_data
chek_data = None
for check in check_field:
if check.get(case_id):
chek_data = check.get(case_id)
break
# 開始校驗
for r in ret:
print('-'*50 )
check_response = cmp(json.dumps(chek_data), json.dumps(r))
if check_response == 0:
print('當前校驗json包含在響應列表中。'*10)

if __name__ == '__main__':

pytest.main(["-s", "-v", "examine_test.py"])
# pytest --tep-reports 生成測試報告

用例運行 pytest --tep-reports運行所有用例 或 pytest -文件名--tep-reports 運行一個執行集

運行過后可在根目錄生成測試報告目錄 reports 以及allure測試報告

 

 

 

 

 

 

一個簡單的接口測試就完成了~


免責聲明!

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



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