介面測試工具 tep 介紹 (開源)
『 tep is a testing tool to help you write pytest more easily. Try Easy Pytest! 』
tep前身
tep的前身是介面自動化測試框架pyface,一款物件導向設計的測試框架,我寫過一篇部落格介紹。
測試框架 / 測試工具
tep的定位是 a testing tool
,不是 a testing framework
。
框架/工具,是有區別的。最大的區別,就是我自認為是沒有足夠的能力去自主開發一套“框架”!工具的能力,還是妥妥的!
自研的框架意味著不穩定,要花很多精力來踩坑填坑,別人不敢隨便用的。工具只是站在巨人的肩膀上,出了問題,這個鍋我不背!
tep是 try easy pytest
的首字母縮寫,tep的目的是幫助你更簡單地寫pytest,比如用pytest+requests寫介面自動化。
pytest是python的測試框架,很成熟。tep是pytest的測試工具,很簡單。
pytest和tep都是開源專案。
設計理念
很大程度上借鑑了HttpRunner(優秀的框架)。不同的是,tep更著重寫python,而不是寫YAML檔案。
- 簡單是更好的
- 每個人都能用python寫自動化
這就是tep的設計理念。
專案結構
tests
__init__.py
.gitignore
conftest.py
tep提供了快速建立專案的能力,也就是腳手架。執行 tep startproject project_name
,就可以建立專案結構,如,這裡建立一個demo,
$ tep startproject demo
2020-07-28 14:34:57.649 | INFO | tep.scaffold:create_scaffold:40 - Create new project: demo
Project root dir: \PycharmProjects\demo
Created folder: demo
Created folder: demo\tests
Created file: demo\tests\__init__.py
Created file: demo\conftest.py
Created file: demo\.gitignore
tests是一個package,用於存放測試指令碼,指令碼檔案以test_開頭或_test結尾,pytest才能識別到。個人喜歡以_test結尾。
conftest.py是一個全域性檔案,定義全域性變數,也可以定義fixture、hook、plugin等,
import os
import pytest
@pytest.fixture(scope="session", autouse=True)
def project_cache(request):
request.config.cache.set("project_dir", os.path.dirname(os.path.abspath(__file__)))
class Dev:
test_url = 'https://dev.com'
class Qa:
test_url = 'https://qa.com'
class Release:
test_url = 'https://release.com'
# choose environment
env = Qa
# you can define your variables and functions and so on
1 定義了一個fixture,把專案路徑儲存到pytest快取中。
2 定義了環境的class,多環境切換,不需要修改測試指令碼。
3 自定義內容,比如使用者登入token等。
專注於寫指令碼
專案結構很清晰。在conftest.py
進行一些初始化/引數化/清理工作,在tests/
寫測試指令碼。
不像pyface那樣物件導向的封裝,tep更注重平鋪寫指令碼的方式,這樣就離“每個人都能用python寫自動化”更近一步。畢竟封裝之後看著容易暈,我也暈。
去除掉框架的約束,給每個人寫python的自由,在測試指令碼里你可以盡情發揮你的程式碼風格,程式碼能力,千人千面。代價呢,就是程式碼質量參差不齊。
這又怎麼樣呢,用過各種開源/自主研發的測試平臺,還不是每個人都在寫著自己風格的自動化case!
大膽寫,能寫,寫出來,跑通,就已經是在寫自動化,就已經是在創造價值了!
tep預設是不會建立 reports
資料夾的, 原因有二。
其一,如果你是本地執行的話,可以使用 --tep-reports
自定義命令列引數,來生成測試報告。
$ pytest --tep-reports
測試結束後會在 project_dir/reports
生成 report-2020-07-28
的allure測試報告。
其二,如果你是持續整合的話,如Jenkins,已經提供了allure report的外掛,配置一下就可以自動生成測試報告,百度“jenkins allure”。
附上allure常用命令,
pytest --alluredir=result # 報告目錄,會生成一堆資料檔案
allure generate result -o html # 生成html報告
allure serve html # 啟動服務
allure open html # 開啟報告(直接執行自動啟動服務) PyCharm可以右鍵index.html選擇Open in Browser
allure下載地址,下載解壓後,把bin絕對路徑新增到系統環境變數Path中。allure需要安裝jdk。
輕封裝
tep尊重原生用法。
requests的封裝只通過裝飾器做了2個封裝,一是記錄介面請求響應耗時,二是列印日誌。只需要 from tep.client import request
,就可以和 requests.request
一樣使用了,沒有做任何其他的冗餘修改。
#!/usr/bin/python
# encoding=utf-8
"""
@Author : Don
@Date : 7/25/2020 2:02 PM
@Desc :
"""
import decimal
import json
import time
import requests
import urllib3
from loguru import logger
from requests import sessions
from tep.funcs import NpEncoder
urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
def request_encapsulate(req):
def send(*args, **kwargs):
# elapsed
start = time.process_time()
response = req(*args, **kwargs)
end = time.process_time()
elapsed = str(decimal.Decimal("%.3f" % float(end - start))) + "s"
# log
try:
log4a = {"method": args[0]}
for k, v in kwargs.items():
# if not json, str()
try:
json.dumps(v)
except TypeError:
v = str(v)
log4a.setdefault(k, v)
log4a.setdefault("status", response.status_code)
log4a.setdefault("response", response.text)
log4a.setdefault("elapsed", elapsed)
logger.info(json.dumps(log4a, ensure_ascii=False, cls=NpEncoder))
except AttributeError:
logger.error("request failed")
except TypeError:
logger.warning(log4a)
return response
return send
@request_encapsulate
def request(method, url, **kwargs):
"""此處省略1萬行程式碼,沒做任何修改,從原始碼copy過來,只加了個裝飾器"""
1 使用 time.process_time()
,記錄了耗時。
2 列印日誌,把請求響應的method、url、headers、引數、響應狀態碼、響應體、耗時等資料儲存到json中,輸出控制檯。
日誌選擇用loguru取代logging,from loguru import logger
直接用,不用再管handler了。
- faker,造資料工具
- jmespath,json解析工具
- deepdiff,json比較工具
- pandas、numpy,資料處理工具
安裝tep,自動就把這些開源利器安裝上了,無需單獨安裝。未來會整合更多實用工具到tep中。
tep本身是很輕的。
原始碼
https://github.com/dongfanger/tep
這裡安利一波pytest官網教程,閱讀英文文件,才能真正理解作者的意思。不過,我也會通過"try easy pytest"一系列的文章,把pytest的知識點提煉出來,供你學習。學python,寫pytest,用tep。測試更專業!
版權申明:本文為博主原創文章,轉載請保留原文連結及作者。
如果您喜歡我寫的文章,請關注公眾號支援一下,謝謝哈哈哈。
相關文章
- 開源測試工具 JMeter 介紹JMeter
- 資料介面測試工具 Postman 介紹Postman
- 開源測試工具 JMeter 介紹 - 物聯網大併發測試實戰 01JMeter
- 效能測試:主流壓測工具介紹
- QAliber - 介紹一款開源的GUI自動化測試工具GUI
- sitespeedio前端效能測試工具介紹前端
- 測試跟蹤工具Bugzilla介紹
- 前端單元測試總結及測試工具介紹前端
- 軟體測試工具之開源測試工具彙總
- Huxley:開源 UI 測試工具UXUI
- 『居善地』介面測試 — 3、Requests庫介紹
- 『居善地』介面測試 — 12、Moco框架介紹框架
- 介面測試工具
- 伺服器效能測試典型工具介紹伺服器
- 混沌測試介紹
- 『居善地』介面測試 — 6、Httpbin服務介紹HTTP
- 50個開源效能測試工具
- selenium開源功能測試工具
- [原創]Fitnesse測試工具介紹及安裝
- 開源工具 SAP UI5 Tools 介紹開源工具UI
- 介面測試工具-PostmanPostman
- 開源的負載測試/壓力測試工具 NBomber負載
- [Android]開源效能測試工具antoolAndroid
- 效能測試的流程及常用工具介紹
- Android測試工具 UIAutomator入門與介紹AndroidUI
- [原創]H5前端效能測試工具介紹H5前端
- 介面測試工具和使用
- Web介面測試工具--JmeterWebJMeter
- Python-PyQt5介面效能測試工具分享PythonQT
- 滲透測試工具多個應用場合介紹
- Apifox介面測試教程(一)介面測試的原理與工具API
- mysqlslap壓力測試介紹MySql
- XCharts 開源庫介紹
- 如何寫好測試用例以及go單元測試工具testify簡單介紹Go
- postman工具進行介面測試Postman
- 開源介面自動化測試專案--時默
- WinAMS―嵌入式軟體白盒測試工具介紹
- 滲透測試之BurpSuite工具的使用介紹(三)UI