pytest核心測試平台落地初體驗

2022-01-10 12:05:29 字數 3605 閱讀 2615

測試平台,有人說它雞肋,有人說它有用,有人說它輪子,眾說紛紜,不如從自身出發,考慮是否要做測試平台:

需要有個測試平台。

環境變數是字串鍵值對,全域性作用域。比如不同環境不同網域名稱:

使用:env_vars.name

fixtures即pytest的fixture,可以新增自定義函式,供測試用例使用。比如封裝登入介面返回token:

tep.fixture提供了urlfixture,自動拼接環境變數env_vars.domain + uri

在前端網頁寫**,1條用例對應1個pytest的test_name.py檔案。比如呼叫loginfixture登入:

本地和平台環境一致,省去前期搭建,關注tests用例。

用例是python**,理論上所有python能寫出來的,平台都能支援,比如http、websocket、protobuf等協議。

vue2-ace-editor作為前端**編輯元件。

前端把**通過http請求傳給後端。

後端把**存入mysql資料庫。

執行用例,從資料庫取出**,生成pytest檔案。

shell命令呼叫pytest -s test_name.py,執行測試。

後端把執行結果日誌返給前端展示。

之所以要折騰資料庫,是因為每次部署後docker容器裡面的檔案會被清掉,只能動態生成。

測試平台功能是從tep專案腳手架中抽取出來的:

整體流程如下:

執行用例時,判斷專案目錄是否存在,如果不存在就呼叫tep startproject project_name建立專案腳手架。

更新conf.yaml中env

把前端傳的當前執行環境更新到conf.yaml檔案中:

env: qa
動態生成或更新fixture_env_vars.py檔案根據環境變數功能模組的資料,動態生成fixture_env_vars.py檔案:

#!/usr/bin/python

# encoding=utf-8

from tep.dao import mysql_engine

from tep.fixture import *

@pytest.fixture(scope="session")

def env_vars(config):

class clazz(tepvars):

env = config["env"]

"""variables define start"""

# environment and variables

"qa": ,

"release":

# add your environment and variables

}# define properties for auto display

"""variables define end"""

return clazz()

動態生成或更新fixtures目錄下所有檔案根據fixtures功能模組的資料,動態生成fixture_login.py等所有檔案:

from tep.client import request

from tep.fixture import *

def _jwt_headers(token):

@pytest.fixture(scope="session")

def login(url):

# code your login

logger.info("administrator login")

response = request(

"post",

url=url("/api/users/login"),

json=

)assert response.status_code < 400

response_token = jmespath.search("token", response.json())

class clazz:

token = response_token

jwt_headers = _jwt_headers(response_token)

return clazz

conftest.py會自動查詢後import,tests用例直接使用。

動態生成或更新tests某個test_檔案從資料庫拿到用例**,動態生成test_檔案。

shell執行pytest命令

從上一步拿到case_path,呼叫pytest -s case_path執行測試。

計畫後續新增suite和marker兩種批量執行用例方式。

本文介紹了我第一次做的測試平台的使用和原理,技術棧為vue+django+django rest framework+jwt+mysql+pytest+git+bitbucket+drone+nginx+docker+k8s,已在公司落地,還未大規模產出,由於服務端有較多磁碟io讀寫,大量使用後不知道效能如何,目前來看問題不大,需要持續觀察和優化。測試平台底層是pytest,用到了tep,那就叫teprunner

pytest韌體功能測試

例項1 conftest.py pytest.fixture def fun1 print run func1 yield print func1 done pytest.fixture def fun2 print run func2 yield print func2 done test db....

pytest學習 基礎測試

import pytest 安裝pytest pip install pytest 檢視pytest版本 pytest version pytest引數幫助 pytest h help pytest遵循其python測試發現約定來發現所有測試 因此它會找到兩個帶test 字首的函式 且無需繼承任何子...

Pytest測試框架(一)

pip install u pytest 用下面的命令去檢查一下pytest是否成功安裝 pytest version this is pytest version 5.4.1 建立名為test 001.py的檔案,敲如下內容 def reverse string return string 1 d...