tep时隔8个月迎来重大全新升级

news2025/8/6 6:25:09

tep此次更新,旨在从“工具”升级为“框架”,为此做了大量的代码整洁工作,重新设计了部分功能,项目脚手架也焕然一新。

功能展示

conftest.py

脚手架生成的conftest.py只有一行代码:

fixture自动加载等操作都隐藏到了tep的科技与狠活里面。

环境变量模板

使用yaml维护环境变量:

你可以env_vars目录下维护env_vars_开头的任意命名的yaml模板,内容自定义:

domain: "http://127.0.0.1:5000"
env: "dev"
db:
  mysql:
    host: "localhost"
    port: "3306"
    user: "root"
    password: "123456"
    db: "sys"

取值时只需要引入env_vars fixture,像字典一样取值:

from loguru import logger


def test(env_vars):
    logger.info(env_vars["domain"])
    logger.info(env_vars["env"])
    logger.info(env_vars["db"]["mysql"]["host"])

激活哪个模板,就在tep.yaml中配置:

env:
  active: "dev"

工具包与示例代码

工具包有MySql访问、FastAPI Mock、常用函数、HTTP请求、流量录制:

示例代码有断言、数据库访问、环境变量、faker造数据、常用函数、HTTP请求、从登陆到下单自动化用例:

项目脚手架

tep startproject demo生成的项目脚手架如图所示:

没有杂质,纯粹的pytest!

tep技术内幕

化繁为简

tep只保留了“框架”层面的模块:

三方库都抽出来到了脚手架的utils包里,譬如HTTP请求在utils/http_client里面。

项目路径识别

在conftest加载插件时,使用inspect.stack()[1]反推项目路径:

def tep_plugins():
    caller = inspect.stack()[1]
    Config.project_root_dir = os.path.dirname(caller.filename)
    plugins = fixture_paths()  # +[其他插件]
    return plugins

fixture自动导入

conftest.py加载时,将fixture路径作为插件加载,一个是项目目录下的fixtures包,一个是tep里面的fixture模块:

def fixture_paths():
    """
    fixture路径,1、项目下的fixtures;2、tep下的fixture;
    :return:
    """
    _fixtures_dir = os.path.join(Config.project_root_dir, "fixtures")
    paths = []
    # 项目下的fixtures
    for root, _, files in os.walk(_fixtures_dir):
        for file in files:
            if file.startswith("fixture_") and file.endswith(".py"):
                full_path = os.path.join(root, file)
                import_path = full_path.replace(_fixtures_dir, "").replace("\\", ".")
                import_path = import_path.replace("/", ".").replace(".py", "")
                paths.append("fixtures" + import_path)
    # tep下的fixture
    paths.append("tep.fixture")
    return paths

环境变量

内置env_vars fixture:

#!/usr/bin/python
# encoding=utf-8

"""
@Author  :  dongfanger
@Date    :  2020/12/30 9:30
@Desc    :  预置fixture
"""
import os

import pytest
import yaml
from loguru import logger

from tep.config import tep_config, Config


class TepVars:
    """全局变量池"""

    def __init__(self):
        self.vars_ = {}

    def put(self, key, value):
        self.vars_[key] = value

    def get(self, key):
        value = ""
        try:
            value = self.vars_[key]
        except KeyError:
            logger.error(f"env_vars doesnt have this key: {key}")
        return value


@pytest.fixture(scope="session")
def env_vars():
    """环境变量,读取resources/env_vars下的变量模板"""
    class Clazz(TepVars):
        def dict_(self):
            env_active = tep_config()['env']["active"]
            env_filename = f"env_vars_{env_active}.yaml"
            with open(
                    os.path.join(Config.project_root_dir, "resources", "env_vars", env_filename)) as f:
                return yaml.load(f.read(), Loader=yaml.FullLoader)

    return Clazz().dict_()

TepVars是全局变量池,支持动态put和get。

env_vars根据tep.yaml配置的active,获取对应的环境变量模板,解析yaml,返回字典。

项目脚手架

脚手架代码完整的放在template下面:

文件后缀均加上了.tep,这样就不会扰乱实际项目代码,在tep startproject时会将这些文件拷贝到目标项目,同时去除.tep后缀,快速生成自动化项目。

这些模板的源码可以查阅另外一个项目:

https://github.com/dongfanger/tep-template.git

最新的tep预览功能也能在这个项目看到。

Try Easy Pytest

tep是Try Easy Pytest的首字母缩写,是依托于pytest的一款测试工具。本次工具架构改造是一个开端,tep还会持续迭代开发,逐步引入企业级的一系列技术实践,敬请期待,也欢迎加入我们,一起开发,共创美好未来!

tep源码:https://github.com/dongfanger/tep

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/34635.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【学习笔记22】JavaScript数组的练习题

笔记首发 一、已知一个排序好的数组 将数字按照原有顺序插入到数组内 var arr [10, 20, 30, 40, 50];var n 11;// 1. 将n插入数组中arr.push(n);// 2. 冒泡排序for (var k 0; k < arr.length - 1; k) {for (var i 0; i < arr.length - 1 - k; i) {if (arr[i] > …

antd——使用a-tree组件实现 检索+自动展开+自定义增删改查功能——技能提升

之前写后台管理系统时&#xff0c;遇到一个下面的需求&#xff0c;下面是最终完成的效果图。 实现的功能有&#xff1a; 1. 下拉 选择不同的类型——就是一个普通的select组件&#xff0c;下面并不做介绍 2. 通过关键字可以进行tree树形结构的筛选&#xff0c;然后将筛选后的…

数据结构学习笔记——查找算法

目录前言一、查找的相关概念&#xff08;一&#xff09;内查找和外查找&#xff08;二&#xff09;静态查找和动态查找&#xff08;三&#xff09;平均查找长度二、线性查找&#xff08;一&#xff09;顺序查找1、查找思想2、算法分析3、有序表的顺序查找&#xff08;二&#x…

gitlab-runner 的安装使用(含 .gitlab-ci.yml 的简单使用)

简介 GitLab Runner 是一个开源项目&#xff0c;用于运行您的作业并将结果发送回 GitLab。它与 GitLab CI 一起使用&#xff0c;GitLab CI 是 GitLab 随附的开源持续集成服务&#xff0c;用于协调作业。 简单理解就是一个服务放在那儿&#xff0c;当你提交代码时&#xff0c;…

[附源码]java毕业设计在线课程网站

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

腾讯安全SOC+能力图谱正式发布,助力政企构建闭环安全运营体系

随着云计算、人工智能、5G等新兴技术的融合发展&#xff0c;数字化转型正成为企业数字经济时代的重要发展路径。然而&#xff0c;数字化转型过程中IT架构的重塑、安全产品体系化能力不足带来的安全运营挑战&#xff0c;使得企业在业务突破上面临安全瓶颈。 面对网络安全事件频…

做一个微信小程序需要多少钱?

做一个微信小程序需要多少钱&#xff1f; 如果是选择套用小程序模板&#xff0c;自建的方式的话&#xff0c;价格是在698-3498元一年的。 如果是代建小程序的话&#xff0c;需要在自建的费用上&#xff0c;再加上1500-12000元的代建费用。 下面主要给大家讲讲698-3498元这个…

Spring依赖注入源码解析(上)

文章目录前言一、Spring中到底有几种依赖注入的方式&#xff1f;1、手动注入1.1、set方法进行注入1.2、通过构造方法进行注入2、自动注入2.1、XML的autowire自动注入2.2、Autowired注解的自动注入二、autowireByName && autowireByType核心源码分析2.1、autowireByName…

最新最全的JavaScript入门视频,包含小程序和uniapp相关的JavaScript知识学习

写在前面 我们学习JavaScript不仅可以用于web网站开发&#xff0c;也可以用于小程序&#xff0c;uniapp项目的开发&#xff0c;所以我们学习JavaScript很重要。 准备工作 我们这里学习JavaScript用的是小程序开发者工具或者uniapp开发者工具&#xff0c;所以需要你先装好这两…

基于Servlet+jsp+mysql开发javaWeb学生管理系统(学生信息、学生选课、学生成绩、学生签到考勤)

你知道的越多&#xff0c;你不知道的越多 点赞再看&#xff0c;养成习惯 如果您有疑问或者见解&#xff0c;或者没有积分想获取项目&#xff0c;欢迎指教&#xff1a; 企鹅&#xff1a;869192208 文章目录一、开发背景二、 需求分析三、开发环境四、运行效果五、开发流程工程目…

【web前端开发】HTML知识点超详细总结

文章目录什么是网页常用的浏览器及内核VScode和WebStrom使用HTML常用标签文档类型<!DOCTYPE>网页语言lang字符集title标签标题标签段落和换行标签文本格式化标签div和span标签图像标签路径相对路径同一级路径上一级路径:下一级路径绝对路径链接标签超链接标签外部链接:内…

为什么心脏长在左边?

人体各项生命活动的正常维持&#xff0c;都离不开血液循环系统输送营养和代谢废物&#xff0c;而给全身输送血液的动力器官就是心脏。可以说&#xff0c;心脏是人体的发动机。不过&#xff0c;你有没有思考过&#xff0c;为什么心脏会长在我们身体的左边呢&#xff1f; 为了解释…

css ppt操作面板 预览时其中标签定位问题

最近用网页写了一个类似PPT页面板操作功能&#xff0c;就是把文本框和图片放入操作面板后&#xff0c;手动拖动到自定义位置&#xff0c;并可以控制文本框和图片大小&#xff0c;但是在预览时位置怎么都放不对&#xff0c;可能跟我css知识不扎实有关&#xff0c;两天没解决&…

从一道题到贪心入门

今天,我们将从一道题引入贪心算法的认识. 题目 题目描述 又是一年秋季时&#xff0c;陶陶家的苹果树结了 n 个果子。陶陶又跑去摘苹果&#xff0c;这次他有一个 a 公分的椅子。当他手够不着时&#xff0c;他会站到椅子上再试试。 这次与 NOIp2005 普及组第一题不同的是&#x…

搭建ESP8266开发环境

获取工具 安信可一体化开发环境 Source insight (本菜鸟不太喜欢用Eclipse) 安装 安装ESP8266开发环境(Windows) 1)双击运行解压到文件 2)安装方式一:eclipse 双击运行ConfigTool.exe点击 Default 可以检测当前所在路径&#

图神经网络关系抽取论文阅读笔记(三)

1 用于关系提取的注意引导图卷积网络&#xff08;Attention Guided Graph Convolutional Networks for Relation Extraction&#xff0c;2020&#xff09; 论文&#xff1a;Attention Guided Graph Convolutional Networks for Relation Extraction&#xff0c;2020 1.1 引言 依…

笔试强训第一天

选择题&#xff1a; 题目1&#xff1a; 我们对这道题目进行分析&#xff1a;第一个打印的是computer没有什么问题&#xff0c;但是第二个%5.3s我们需要进行分析&#xff1a; %m.ns m表示输出字符串的宽度&#xff0c;这里输出字符串的宽度为5 n表示左起截取目标字符串的n个…

m基于OFDM系统,对比SC算法,Minn算法,PARK算法同步性能matlab仿真分析

目录 1.算法描述 2.仿真效果预览 3.MATLAB部分代码预览 4.完整MATLAB程序 1.算法描述 OFDM系统下对比SC算法&#xff0c;Minn算法&#xff0c;PARK算法同步性能matlab仿真分析。OFDM系统中的定时估计和频率频率算法——时频联合估计的SC算法&#xff0c;由Schmidl和Cox提出…

Python入门自学进阶-Web框架——27、DjangoAdmin项目应用-数据记录操作2

四、对数据记录删除 1、首先是配置整个流程框架&#xff0c;使整个流程运转顺利&#xff1a; 路由项添加&#xff1a;path(<str:app_name>/<str:table_name>/<int:id_num>/delete/,views.rec_obj_delete,namerec_delete), 主要是匹配记录的id和delete字符…

【LeetCode每日一题:809.情感丰富的文字~~~双指针+计数器】

题目描述 有时候人们会用重复写一些字母来表示额外的感受&#xff0c;比如 “hello” -> “heeellooo”, “hi” -> “hiii”。我们将相邻字母都相同的一串字符定义为相同字母组&#xff0c;例如&#xff1a;“h”, “eee”, “ll”, “ooo”。 对于一个给定的字符串 S…