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


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

    功能展示

    conftest.py

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

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

    环境变量模板

    使用yaml维护环境变量:

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

    1. domain: "http://127.0.0.1:5000"
    2. env: "dev"
    3. db:
    4. mysql:
    5. host: "localhost"
    6. port: "3306"
    7. user: "root"
    8. password: "123456"
    9. db: "sys"

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

    1. from loguru import logger
    2. def test(env_vars):
    3. logger.info(env_vars["domain"])
    4. logger.info(env_vars["env"])
    5. logger.info(env_vars["db"]["mysql"]["host"])

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

    1. env:
    2. active: "dev"

    工具包与示例代码

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

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

    项目脚手架

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

    没有杂质,纯粹的pytest!

    tep技术内幕

    化繁为简

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

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

    项目路径识别

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

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

    fixture自动导入

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

    1. def fixture_paths():
    2. """
    3. fixture路径,1、项目下的fixtures;2、tep下的fixture;
    4. :return:
    5. """
    6. _fixtures_dir = os.path.join(Config.project_root_dir, "fixtures")
    7. paths = []
    8. # 项目下的fixtures
    9. for root, _, files in os.walk(_fixtures_dir):
    10. for file in files:
    11. if file.startswith("fixture_") and file.endswith(".py"):
    12. full_path = os.path.join(root, file)
    13. import_path = full_path.replace(_fixtures_dir, "").replace("\\", ".")
    14. import_path = import_path.replace("/", ".").replace(".py", "")
    15. paths.append("fixtures" + import_path)
    16. # tep下的fixture
    17. paths.append("tep.fixture")
    18. return paths

    环境变量

    内置env_vars fixture:

    1. #!/usr/bin/python
    2. # encoding=utf-8
    3. """
    4. @Author : dongfanger
    5. @Date : 2020/12/30 9:30
    6. @Desc : 预置fixture
    7. """
    8. import os
    9. import pytest
    10. import yaml
    11. from loguru import logger
    12. from tep.config import tep_config, Config
    13. class TepVars:
    14. """全局变量池"""
    15. def __init__(self):
    16. self.vars_ = {}
    17. def put(self, key, value):
    18. self.vars_[key] = value
    19. def get(self, key):
    20. value = ""
    21. try:
    22. value = self.vars_[key]
    23. except KeyError:
    24. logger.error(f"env_vars doesnt have this key: {key}")
    25. return value
    26. @pytest.fixture(scope="session")
    27. def env_vars():
    28. """环境变量,读取resources/env_vars下的变量模板"""
    29. class Clazz(TepVars):
    30. def dict_(self):
    31. env_active = tep_config()['env']["active"]
    32. env_filename = f"env_vars_{env_active}.yaml"
    33. with open(
    34. os.path.join(Config.project_root_dir, "resources", "env_vars", env_filename)) as f:
    35. return yaml.load(f.read(), Loader=yaml.FullLoader)
    36. 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

  • 相关阅读:
    记一次用dataframe进行数据清理
    Android 白天黑夜模式切换适配及引起的Activity销毁重启解决
    计算机网络学习
    干货 | 在Docker 上搭建持续集成平台 Jenkins
    MySQL(六)在主从复制条件下搭建读写分离
    【计组 期末版】1.计算机系统概论(一)勇闯期末考试
    在vscode使用MATLAB
    后端研发工程师面经——数据库
    ESP32网络开发实例-TCP服务器数据传输
    论文阅读-Dr.Deep_基于医疗特征上下文学习的患者健康状态可解释评估
  • 原文地址:https://blog.csdn.net/weixin_45741835/article/details/128029113