适合中小型公司的自动化测试的测试框架,OpenSourceTest
适合中小型公司的自动化测试的测试框架,OpenSourceTest
文档地址:
http://docs.opensourcetest.cn/
代码仓库:
https://github.com/chineseluo/opensourcetest
安装方式:
pip3 install opensourcetest -i https://pypi.tuna.tsinghua.edu.cn/simple
适用人群: OpenSourceTest面向的测试人员,只需要具备基础的python语言基础即可,想要学习自动化,又不会搭建项目架构,对于接口请求响应封装比较弱项的小伙伴,都可以使用OpenSourceTest进行学习。
OpenSourceTest框架(后文简称OST),OST开发于2021年,距今已经三个多年头,历经多个大中小型的项目检验,被频繁集成于各个流水线和多个测试平台中作为基础设施而存在,也可以独立运行,或者集成于jenkins中。内部核心框架使用的pytest,allure,requests,OST本身只基于requests进行了基础封装,帮助测试人员创建干净整洁的项目架构。
为什么OST不进行高度封装,提供更加简单的使用方式,例如类似postman这种工具。
首先我们要明白,对于基础框架进行高度简化使用人操作的封装有哪些优缺点?
- 优点是降低了使用门槛,使很多人知其然,不知其所以然,主打一个能用就行,例如postman,jmeter等,其实对于测试人员的能力发展是相当不友好的。
- 缺点是必然会导致弱化基础框架的功能,越是高度封装,越会使代码变得冗余,基础框架的特性也会被限制的越死,当面对某些复杂的场景,例如物联网/人工智能/大数据等,想要定制化某些功能的时候,变得很困难。
基于上面两个方面的考虑,OST不会进行过多简化操作的封装,即使封装也不会变更任何基础框架的功能,只是提供一种简化使用的方式,下面简单介绍一下。
首先我们必须明白一些概念,先抛开自动化运行环境/任务调度/统计/平台那些东西,仅从自动化编写来讲,其与测试用例是高度一致的,用例模块划分、前置操作、测试标题、测试步骤、预期结果,实际结果,后置操作,当然还有一些其他的要素,核心都是这几个。
用例模块划分,主要是测试人员对于系统被测功能进行的人为主观上的划分,通常来说建议和业务系统的菜单级别一致,通过一二三级菜单来划分用例模块,在OST中,使用allure的feature/story注解来进行标记,意味着你可以使用所有的allure注解
import allure
@allure.feature(“用户管理”)
@allure.story(“用户列表”)
class TestUserList:
@allure.title(“通过用户名称搜索”)
def test_search_name(self, token):
…
测试标题,测试功能点的简要描述,在OST中,使用allure的title注解来进行标记
@allure.feature(“用户管理”)
@allure.story(“用户列表”)
class TestUserList:
@allure.title(“通过用户名称搜索”)
def test_search_name(self, token):
…
前置步骤/后置步骤,在OST中,直接使用pytest的方式进行编写即可,通过@pytest.fixture(scope=“session”)的作用域进行控制
测试步骤,在OST中,使用allure的step注解来进行标记
@allure.step(“查询成本详情”)
def get_order_cost_detail(token, resellerOrderId, checker=None):
payload = {
“resellerOrderId”: resellerOrderId
}
return start_run_case(OrderList, “订单成本详情”, session_connection=token, checker=checker,
json=payload)
问题来了,从上面的描述来看,似乎OST本身什么都没做,用的都是allure,pytest本身的能力,和平时直接编写自动化脚本没什么不同。
接下来我们看一下OST到底做了什么?
1、帮助测试用户搭建自动化项目测试架构,在你安装opensourcetest之后,可以在控制台通过OST -h 找到OST提供的命令,通过OST start_http_project 项目名称,就会在当前路径,创建一个自动化项目,直接使用pycharm打开即可,内置了一个Login的demo,仿写即可上手。
2、配置了pytest的日志级别,用户根据需要直接修改pytest.ini
3、在run.py中封装了allure的报告生成操作,用户可以根据自己的需求进行修改
4、重点部分,OST创建的项目架构中,有两个比较方便的操作
- 测试接口数据YAML化,通过在YAML中编写接口配置,然后进行YAML对象注册,直接调用对象即可
- requests封装,基于三个维度进行封装,请求/响应/断言
YAMl对象
先编写YAML文件,如下所示,通常是基于业务系统的功能模块进行增删改查接口分类
description: 用户管理-用户列表
parameters:-
url: /user/list
desc: 获取用户列表
method: post
headers: {
“Content-Type”: “application/json”
}
params: {}
data: {}
json: {}
files: {} -
url: /user/delete/$
desc: 删除用户
method: delete
headers: {
“Content-Type”: “application/json”
}
params: { }
data: { }
json: { }
files: { }
注册YAML对象,在OST创建的项目架构的Parameter中的yamlChoice.py中进行注册
from opensourcetest.builtin.autoParamInjection import AutoInjection
-
class User(AutoInjection):
def init(self):
super(User, self).init(self.class.name)
接口请求
在OST创建的项目架构的Base中的requestEngine.py中有一个start_run_case方法,引入即可
[图片]
import allure
from Parameter.yamlChoice import User
from Base.requestEngine import start_run_case
@allure.step(“查询用户列表”)
def get_user_list(token, page=1, pageSize=20, checker=None):
payload = {
“page”: {
“page”: page,
“pageSize”: pageSize
}
}
return start_run_case(User, “获取用户列表”,json=payload, session_connection=token, checker=checker)
在start_run_case中使用yamlChoice中注册的YAML对象User,通过desc和索引进行定位,上面的写法还可以写成
import allure
from Parameter.yamlChoice import User
from Base.requestEngine import start_run_case
@allure.step(“查询用户列表”)
def get_user_list(token, page=1, pageSize=20, checker=None):
payload = {
“page”: {
“page”: page,
“pageSize”: pageSize
}
}
return start_run_case(User, 0,json=payload, session_connection=token, checker=checker)
start_run_case中害包含了session_connection,checker,url_converter,以及隐式重试ost_timeout/ost_poll_frequency,更多内容参考文档:http://docs.opensourcetest.cn/
相关文章:
适合中小型公司的自动化测试的测试框架,OpenSourceTest
适合中小型公司的自动化测试的测试框架,OpenSourceTest 文档地址: http://docs.opensourcetest.cn/代码仓库: https://github.com/chineseluo/opensourcetest安装方式: pip3 install opensourcetest -i https://pypi.tuna.tsin…...
实现跨语言通信:Rust 和 Thrift 的最佳实践
前言 在分布式系统中,服务之间高效且安全的通信至关重要。Apache Thrift 是一个被广泛应用的跨语言 RPC(远程过程调用)框架,它支持多种编程语言,包括 Rust。Rust 以其卓越的性能和内存安全保障,成为越来越…...
js判断空对象
1. 使用 Object.keys() 方法 Object.keys(obj) 方法返回一个包含对象可枚举属性名称的数组。如果返回的数组长度为 0,表示对象为空。 const isEmpty (obj) > Object.keys(obj).length 0;// 示例 const emptyObject {}; const nonEmptyObject { key: value …...
visionpro官方示例分析(一) 模板匹配工具 缺陷检测工具
1.需求:找出图像中的这个图形。 2.步骤 使用CogPMAlignTool工具,该工具是模板匹配工具,见名知意,所谓模板匹配工具就是说先使用该工具对一张图像建立模板,然后用这个模板在其他图像上进行匹配,匹配上了就说…...
PyCharm中Python项目打包并运行到服务器的简明指南
目录 一、准备工作 二、创建并设置Python项目 创建新项目 配置项目依赖 安装PyInstaller 三、打包项目 打包为可执行文件 另一种打包方式(使用setup.py) 四、配置服务器环境 五、上传可执行文件到服务器 六、在服务器上运行项目 配置SSH解释…...
cocos creator 3.8 合成大西瓜Demo 11
界面上的Node节点: 背景 警戒线 三面墙 初始位置节点 水果容器 先分组吧,墙 地板 水果 创建预制体 先挂一个脚本 刚体碰撞器先弄上再说 import { _decorator, Component, Node } from cc; const { ccclass, property } _decorator;ccclass(FruitData) e…...
Vue前端开发-动态插槽
不仅父组件可以通过插槽方式访问并控制子组件传入的数据,而且可以控制传入父组件时插槽的名称,从而使不同的插槽根据名称的不同,使用场景也不同,例如在一个小区详细页中,可以根据小区类型,调用不同名称的详…...
使用easyexcel导出复杂模板,同时使用bean,map,list填充
背景 在使用easyexcel导出时,如果遇到一个模板中同时存在 一部分是实体类中的字段,另外部分是列表的字段,需要特殊处理一下,比如下面的模板: 这里面 user, addr 是实体类(或者map)…...
最大值(Java Python JS C++ C )
题目描述 给定一组整数(非负),重排顺序后输出一个最大的整数。 示例1 输入:[10,9] 输出:910 说明:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 输入描述 数字组合 输出描述 最大的整数 示例1 输入 10 9输出 910解题思路 题目要求 是:给定一…...
17.5k Star,ThingsBoard 一款开源、免费、功能全面的物联网 IoT 平台 -慧知开源充电桩平台
项目介绍 ThingsBoard是一个开源、免费、功能全面、灵活易用的物联网(IoT)平台,专注于数据收集、处理、可视化以及设备管理。它提供了一个全面的解决方案,用于构建和管理物联网应用。支持从各种设备收集数据,通过内置…...
《C++ 与神经网络:自动微分在反向传播中的高效实现之道》
在深度学习蓬勃发展的今天,神经网络成为了众多领域的核心技术驱动力。而反向传播算法作为训练神经网络的关键手段,其背后的自动微分技术的高效实现尤为重要,特别是在 C 这样追求性能与内存控制极致的编程语言环境下。 神经网络通过大量的参数…...
【CSS】设置文本超出N行省略
文章目录 基本使用 这种方法主要是针对Webkit浏览器,因此可能在一些非Chrome浏览器中不适用。 基本使用 例如:设置文本超出两行显示省略号。 核心代码: .ellipsis-multiline {display: -webkit-box; -webkit-box-orient: vertical; /* 设置…...
open-instruct - 训练开放式指令跟随语言模型
文章目录 关于 open-instruct设置训练微调偏好调整RLVR 污染检查开发中仓库结构 致谢 关于 open-instruct github : https://github.com/allenai/open-instruct 这个仓库是我们对在公共数据集上对流行的预训练语言模型进行指令微调的开放努力。我们发布这个仓库,并…...
DI依赖注入详解
DI依赖注入 声明了一个成员变量(对象)之后,在该对象上面加上注解AutoWired注解,那么在程序运行时,该对象自动在IOC容器中寻找对应的bean对象,并且将其赋值给成员变量,完成依赖注入。 AutoWire…...
TDengine在debian安装
参考官网文档: 官网安装文档链接 从列表中下载获得 Deb 安装包; TDengine-server-3.3.4.3-Linux-x64.deb (61 M) 进入到安装包所在目录,执行如下的安装命令: sudo dpkg -i TDengine-server-<version>-Linux-x64.debNOTE 当…...
【C#设计模式(15)——命令模式(Command Pattern)】
前言 命令模式的关键通过将请求封装成一个对象,使命令的发送者和接收者解耦。这种方式能更方便地添加新的命令,如执行命令的排队、延迟、撤销和重做等操作。 代码 #region 基础的命令模式 //命令(抽象类) public abstract class …...
XGBoost库介绍:提升机器学习模型的性能
XGBoost库介绍:提升机器学习模型的性能 在机器学习领域,模型的准确性和训练效率是最为关注的两大因素。特别是在处理大量数据和复杂任务时,传统的机器学习算法可能无法满足高效和准确性的需求。XGBoost(eXtreme Gradient Boostin…...
网络安全构成要素
一、防火墙 组织机构内部的网络与互联网相连时,为了避免域内受到非法访问的威胁,往往会设置防火墙。 使用NAT(NAPT)的情况下,由于限定了可以从外部访问的地址,因此也能起到防火墙的作用。 二、IDS入侵检…...
SpringMVC——SSM整合
SSM整合 创建工程 在pom.xml中导入坐标 <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation"http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_…...
Windows系统电脑安装TightVNC服务端结合内网穿透实现异地远程桌面
文章目录 前言1. 安装TightVNC服务端2. 局域网VNC远程测试3. Win安装Cpolar工具4. 配置VNC远程地址5. VNC远程桌面连接6. 固定VNC远程地址7. 固定VNC地址测试 前言 在追求高效、便捷的数字化办公与生活的今天,远程桌面服务成为了连接不同地点、不同设备之间的重要桥…...
【ubuntu24.04】GTX4700 配置安装cuda
筛选显卡驱动显卡驱动 NVIDIA-Linux-x86_64-550.135.run 而后重启:最新的是12.6 用于ubuntu24.04 ,但是我的4700的显卡驱动要求12.4 cuda...
Spring Boot 动态数据源切换
背景 随着互联网应用的快速发展,多数据源的需求日益增多。Spring Boot 以其简洁的配置和强大的功能,成为实现动态数据源切换的理想选择。本文将通过具体的配置和代码示例,详细介绍如何在 Spring Boot 应用中实现动态数据源切换,帮…...
MySQL技巧之跨服务器数据查询:进阶篇-从A服务器的MySQ数据库复制到B服务器的SQL Server数据库的表中
MySQL技巧之跨服务器数据查询:进阶篇-从A服务器的MySQ数据库复制到B服务器的SQL Server数据库的表中 基础篇已经描述:借用微软的SQL Server ODBC 即可实现MySQL跨服务器间的数据查询。 而且还介绍了如何获得一个在MS SQL Server 可以连接指定实例的MyS…...
大语言模型LLM的微调中 QA 转换的小工具 xlsx2json.py
在训练语言模型中,需要将文件整理成规范的文档,因为文档本身会有很多不规范的地方,为了训练的正确,将文档进行规范处理。代码的功能是读取一个 Excel 文件,将其数据转换为 JSON 格式,并将 JSON 数据写入到一…...
CFD 在生物反应器放大过程中的作用
工艺工程师最常想到的一个问题是“如何将台式反应器扩大到工业规模的反应器?”。这个问题的答案并不简单,也不容易得到。例如,人们误以为工业规模的反应器的性能与台式反应器相同。因此,扩大规模的过程并不是一件容易的事。必须对…...
Axios与FastAPI结合:构建并请求用户增删改查接口
在现代Web开发中,FastAPI以其高性能和简洁的代码结构成为了构建RESTful API的热门选择。而Axios则因其基于Promise的HTTP客户端特性,成为了前端与后端交互的理想工具。本文将介绍FastAPI和Axios的结合使用,通过一个用户增删改查(C…...
美畅物联丨如何通过ffmpeg排查视频问题
在我们日常使用畅联AIoT开放云平台的过程中,摄像机视频无法播放是较为常见的故障。尤其是当碰到摄像机视频不能正常播放的状况时,哪怕重启摄像机,也仍然无法使其恢复正常的工作状态,这着实让人感到头疼。这个时候,可以…...
基于OpenCV视觉库让机械手根据视觉判断物体有无和分类抓取的例程
项目实例,在一个无人封闭的隔绝场景中,根据视觉判断物件的有无,通过机械手 进行物件分类提取,并且返回状态结果; 实际的场景是有一个类似采血的固件支架盘,上面很多采血管,采血管帽颜色可能不同…...
QChart数据可视化
目录 一、QChart基本介绍 1.1 QChart基本概念与用途 1.2 主要类的介绍 1.2.1 QChartView类 1.2.2 QChart类 1.2.3QAbstractSeries类 1.2.4 QAbstractAxis类 1.2.5 QLegendMarker 二、与图表交互 1. 动态绘制数据 2. 深入数据 3. 缩放和滚动 4. 鼠标悬停 三、主题 …...
转换的艺术:如何在JavaScript中序列化Set为Array、Object及逆向操作
先认识一下Set 概念:存储唯一值的集合,元素只能是值,没有键与之对应。Set中的每个值都是唯一的。 特性: 值的集合,值可以是任何类型。 值的唯一性,每个值只能出现一次。 保持了插入顺序。 不支持通过索引来…...
汕头 做网站/百度官方客服电话
原标题:国科大生物试卷玩诗意走红网络《蛋白质工程原理》试卷节选孤山叶落春梦在,杏花疏影笛横吹。下列哪种氨基酸易在肽链中形成拐角:( )A、缬氨酸 B、酪氨酸 C、脯氨酸 D、苏氨酸 E、色氨酸我自开来我自落,有人没人香四方。唯有…...
大型信息类PC网站适合vue做吗/此网站不支持下载视频怎么办
2、解压缩tar -zxvf ffmpeg-2.0.1.tar.gz3、配置,生成Makefile./configure --enable-shared --disable-yasm--prefix/usr/local/ffmpeg如果执行结果不对,可以根据提示信息,并查看帮助,解决问题./configure--help4、编译安装makemake install5…...
wordpress自定义页面引用/在哪里查关键词排名
1、错误原因2、错误原因上面左侧图是SQL语句查询出来的结果,右侧是导出Excel展示的数据,结果发现两者竟然不一致3、解决办法拼接的SQL:sql.append("SELECT CONCAT((rowNum : rowNum 1),) AS rownum,t.* FROM(");导出中的赋值&…...
wordpress 免费餐饮主题/最近发生的热点事件
简介 InfluxDB是一个由InfluxData开发的开源时序型数据。它由Go写成,着力于高性能地查询与存储时序型数据。InfluxDB被广泛应用于存储系统的监控数据,IoT行业的实时数据等场景。常用的一种使用场景:监控数据统计。每毫秒记录一下电脑内存的使…...
那个网站推作者/安卓优化大师app下载安装
没错,小编昨天才放假回家,今天就开始卷了!话不对说: 第一种方式:<标签 style"样式名:样式值;样式名:样式值 ;样式名:样式值“></标签> <!DOCTYPE html> <html> <head>…...
网站搭建课程标准/谷歌浏览器手机版
试题 算法提高 成绩排名资源限制时间限制:1.0s 内存限制:256.0MB问题描述小明刚经过了一次数学考试,老师由于忙碌忘记排名了,于是老师把这个光荣的任务交给了小明,小明则找到了聪明的你,希望你能帮他解决这…...