『 tep is a testing tool to help you write pytest more easily. Try Easy Pytest! 』html
tep的前身是接口自動化測試框架pyface,一款面向對象設計的測試框架,我寫過一篇博客介紹。python
tep的定位是 a testing tool
,不是 a testing framework
。git
框架/工具,是有區別的。最大的區別,就是我自認爲是沒有足夠的能力去自主開發一套「框架」!工具的能力,仍是妥妥的!github
自研的框架意味着不穩定,要花不少精力來踩坑填坑,別人不敢隨便用的。工具只是站在巨人的肩膀上,出了問題,這個鍋我不背!web
tep是 try easy pytest
的首字母縮寫,tep的目的是幫助你更簡單地寫pytest,好比用pytest+requests寫接口自動化。json
pytest是python的測試框架,很成熟。tep是pytest的測試工具,很簡單。後端
pytest和tep都是開源項目。緩存
很大程度上借鑑了HttpRunner(優秀的框架)。不一樣的是,tep更着重寫python,而不是寫YAML文件。session
這就是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了。
安裝tep,自動就把這些開源利器安裝上了,無需單獨安裝。將來會集成更多實用工具到tep中。
tep自己是很輕的。
我是2014年參加工做的,2018年纔開始接觸接口測試(汗!),如今有2年多的接口測試經驗,其中包括一全年的純後端接口測試經驗。
接口自動化第一次寫了接口自動化框架AIM(基於unittest),後來又有pyface,以及中間改造過的各類臨時版本。也用過一些開源框架如RobotFramwork、HttpRunner,使用過自研工具,如基於JMeter封裝的平臺。還有一些網上開源的「web接口自動化平臺」,這個我是打個大大的問號的。實用性不好,功能很雞肋,報錯還多。接口自動化測試框架的輪子,造也造不完。
tep「測試工具」的定位完美的避開了全部這些框架的弊端。工具不會定義你如何寫自動化腳本,工具只會幫你更好地寫自動化腳本。
有理由相信,tep會成長爲一款實用的測試工具。
https://github.com/dongfanger/tep
這裏安利一波pytest官網教程,閱讀英文文檔,才能真正理解做者的意思。不過,我也會經過"try easy pytest"一系列的文章,把pytest的知識點提煉出來,供你學習。學python,寫pytest,用tep。測試更專業!
專一測試,堅持原創,只作精品。歡迎關注公衆號『東方er』
版權申明:本文爲博主原創文章,轉載請保留原文連接及做者。