测试平台,有人说它鸡肋,有人说它有用,有人说它轮子,众说纷纭,不如从自身出发,考虑是否要做测试平台:

  • 第1阶段,用Python+requests写接口自动化。
  • 第2阶段,选择unitttest或pytest,更熟悉pytest选了pytest。
  • 第3阶段,快速搭建pytest项目脚手架,封装tep测试工具。
  • 第4阶段,通过Git管理测试脚本,多分支合并代码。
  • 第5阶段,去除本地环境同步麻烦,方便团队共享脚本。

需要有个测试平台。

使用篇

环境变量

环境变量是字符串键值对,全局作用域。比如不同环境不同域名:

使用:env_vars.name

fixtures

fixtures即pytest的fixture,可以添加自定义函数,供测试用例使用。比如封装登录接口返回token:

tep.fixture提供了url fixture,自动拼接环境变量env_vars.domain + uri

测试用例

在前端网页写代码,1条用例对应1个pytest的test_name.py文件。比如调用login fixture登录:

本地编写

PyCharm写代码体验更好,正确姿势是从平台下载包含环境变量和fixtures等项目结构代码,本地编写用例,调试,跑通后,粘贴到平台上共享和维护:

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

扩展能力

用例是Python代码,理论上所有Python能写出来的,平台都能支持,比如HTTP、WebSocket、Protobuf等协议。

原理篇

pytest内核

  1. vue2-ace-editor作为前端代码编辑组件。
  2. 前端把代码通过HTTP请求传给后端。
  3. 后端把代码存入MySQL数据库。
  4. 运行用例,从数据库取出代码,生成pytest文件。
  5. Shell命令调用pytest -s test_name.py,执行测试。
  6. 后端把运行结果日志返给前端展示。

之所以要折腾数据库,是因为每次部署后docker容器里面的文件会被清掉,只能动态生成。

tep脚手架

测试平台功能是从tep项目脚手架中抽取出来的:

  • fixture_env_vars.py做成了环境变量功能。
  • fixture_login.py等做成了fixtures功能。
  • tests做成了测试用例功能。

运行用例

整体流程如下:

tep startproject project_name

运行用例时,判断项目目录是否存在,如果不存在就调用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
mapping = {
"qa": {
"domain": "https://qa.com",
},
"release": {
"domain": "https://release.com",
}
# Add your environment and variables
}
# Define properties for auto display
domain = mapping[env]["domain"]
"""Variables define end""" return Clazz()

动态生成或更新fixtures目录下所有文件

根据fixtures功能模块的数据,动态生成fixture_login.py等所有文件:

from tep.client import request
from tep.fixture import * def _jwt_headers(token):
return {"Content-Type": "application/json", "authorization": f"Bearer {token}"} @pytest.fixture(scope="session")
def login(url):
# Code your login
logger.info("Administrator login")
response = request(
"post",
url=url("/api/users/login"),
headers={"Content-Type": "application/json"},
json={
"username": "admin",
"password": "123456",
}
)
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

参考资料:

https://github.com/dongfanger/tep

pytest内核测试平台落地初体验的更多相关文章

  1. 学习版pytest内核测试平台开发万字长文入门篇

    前言 2021年,测试平台如雨后春笋般冒了出来,我就是其中一员,写了一款pytest内核测试平台,在公司落地.分享出来后,有同学觉得挺不错,希望能开源,本着"公司代码不要传到网上去,以免引起 ...

  2. 自动测试工具agitarOne 初体验之-MockingBird的使用

    大名鼎鼎的AgitarOne就不用解释了,在昨天的随笔中有一些解释,今天主要说说Agitar 中Mockingbird的使用.          为了提高测试代 码的Coverage,仅仅靠Agita ...

  3. django初体验 学习笔记

    django环境搭建     1.安装Python     2.ipython         sudo apt-get install ipython         sudo pip instal ...

  4. Testin云测试平台初体验

    这几天偶然接触到了一个叫做Testin的云测试平台,经过一番体验,感觉还是不错的,因为里面提供了大量的测试机型,可以针对Android手机的严重碎片化现象做出比较全面的测试,同时Testin的测试内容 ...

  5. Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验

    Net Core平台灵活简单的日志记录框架NLog+SqlServer初体验 前几天分享的"[Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验][http://www ...

  6. Net Core平台灵活简单的日志记录框架NLog+Mysql组合初体验

    Net Core平台灵活简单的日志记录框架NLog初体验 前几天分享的"[Net Core集成Exceptionless分布式日志功能以及全局异常过滤][https://www.cnblog ...

  7. teprunner测试平台Django引入pytest完整源码

    本文开发内容 pytest登场!本文将在Django中引入pytest,原理是先执行tep startproject命令创建pytest项目文件,然后从数据库中拉取代码写入文件,最后调用pytest命 ...

  8. .NET平台开源项目速览(15)文档数据库RavenDB-介绍与初体验

    不知不觉,“.NET平台开源项目速览“系列文章已经15篇了,每一篇都非常受欢迎,可能技术水平不高,但足够入门了.虽然工作很忙,但还是会抽空把自己知道的,已经平时遇到的好的开源项目分享出来.今天就给大家 ...

  9. Linux内核驱动学习(三)字符型设备驱动之初体验

    Linux字符型设备驱动之初体验 文章目录 Linux字符型设备驱动之初体验 前言 框架 字符型设备 程序实现 cdev kobj owner file_operations dev_t 设备注册过程 ...

随机推荐

  1. 4.5万字手把手教你实现MySQL TB级数据存储!!

    写在前面 业界对系统的高可用有着基本的要求,简单的说,这些要求可以总结为如下所示. 系统架构中不存在单点问题. 可以最大限度的保障服务的可用性. 一般情况下系统的高可用可以用几个9来评估.所谓的几个9 ...

  2. Modbus 协议图文详解

    1.概论 Modbus是一种串行通信协议,由于其协议简单易用,且没有版权要求,目前已经成为工业领域通信协议的实时标准.ModBus协议是又施耐德电气的前身Modicon公司在1979年提出的.Modb ...

  3. 第1章 什么是JavaScript

    目录 1. JavaScript实现 1.1 ECMAScript 1.2 DOM 1.3 BOM 1995年JavaScript问世时主要用途时代替Perl等服务器段语言处理输入验证 1. Java ...

  4. SAAS云平台搭建札记: (三) AntDesign + .Net Core WebAPI权限控制、动态菜单的生成

    我们知道,当下最火的前端框架,非蚂蚁金服的AntDesign莫属,这个框架不仅在国内非常有名,在国外GitHub上React前端框架也排名第一.而且这个框架涵盖了React.Vue.Angular等多 ...

  5. springboot源码解析-管中窥豹系列之Initializer(四)

    一.前言 Springboot源码解析是一件大工程,逐行逐句的去研究代码,会很枯燥,也不容易坚持下去. 我们不追求大而全,而是试着每次去研究一个小知识点,最终聚沙成塔,这就是我们的springboot ...

  6. GitLab的安装及使用

    Gitlab环境部署 安装依赖包.   sudo yum install -y curl policycoreutils-python openssh-server 设置SSH开机自启动并启动SSH服 ...

  7. MongoDB Sharding(二) -- 搭建分片集群

    在上一篇文章中,我们基本了解了分片的概念,本文将着手实践,进行分片集群的搭建 首先我们再来了解一下分片集群的架构,分片集群由三部分构成: mongos:查询路由,在客户端程序和分片之间提供接口.本次实 ...

  8. python学习笔记 | 国内常用源镜像地址

    各镜像列表 清华:https://pypi.tuna.tsinghua.edu.cn/simple 阿里云:http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 ...

  9. 简单的JS+CSS实现网页自定义换肤

     1,实现效果 2,实现原理 主要原理是利用css变量设置颜色,用js动态修改变量,使颜色变化,兼容性如下: 实现换肤之前先要了解一下伪类选择器 :root ,还有css的 var() 函数和 set ...

  10. CSS 奇思妙想边框动画

    今天逛博客网站 -- shoptalkshow,看到这样一个界面,非常有意思: 觉得它的风格很独特,尤其是其中一些边框. 嘿嘿,所以来一篇边框特辑,看看运用 CSS,可以在边框上整些什么花样. bor ...