tep0.9.5 支持自定义扩展 request
tep0.9.5 更新了以下内容:
tep0.9.5 更新了以下内容:
经过 Python 测试交流群的小伙伴群策群力,teprunner 添加了一个重要功能,把 PyCharm 中的代码,通过 Git 同步到测试平台中,生成测试用例。这样,teprunner 就成了一个名副其实的pytest 脚本在线管理平台。
大家好,我是刚哥。
teprunner 测试平台已经有一个多月没有更新了,主要原因是定时任务不够稳定,经过反复试错,找到了解决办法,这次终于稳定了。
大家好,我是刚哥。
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 本文开发内容 在免费开源的测试平台中,teprunner 的 UI 界面应该算得上第一梯度了,BUT,美中不足,在不同分辨率显示器(比如 13.3 寸小屏笔记本)下布局大的弹出窗口,表现不尽如人意。而这又是核心功能代码编辑的界面,比如用例编写、fixture 编写,很有必要优化升级。除此之外还有滚动条的问题:竖向双滚动条和横向滚动条,也对体验造成影响。本文将对这些内容进行改造,具体如下: 编写用例页面,从弹窗改为子页面。 编写 fixture 页面,从弹窗改为子页面。 代码编辑区域高度自适应。 缩小左侧菜单,移动项目环境和新增按钮同一行,扩大编辑区面积。 消除所有双向滚动条。 消除所有横向滚动条。 语法说明添加环境变量和 fixtures 示例代码。 其他细节优化。 响应式是指同一套前端代码在不同浏览器(PC 端、移动端等)都能适配,Element UI 已经是响应式设计了,本文的响应式体现在代码编辑区行高根据 window.innerHeight 自动计算设定。 升级效果展示 左侧菜单栏变窄;添加环境变量和 fixtures 示例代码。 项目环境和新增按钮同一行显示,扩大有效内容可视面积。 fixtures 的新增和编辑从弹窗改为子路由页面,代码编辑区高度自适应,纵向滚动条只出现一个。 消除横向滚动条;缩小了用例描述列以外其他列宽;替换操作按钮文字为图标。 用例的新增和编辑从弹窗改为子路由页面,代码编辑区高度自适应,纵向滚动条只出现一个。 用例运行结果的新增和编辑从弹窗改为子路由页面,代码编辑区高度自适应,纵向滚动条只出现一个。 测试计划的新增,编辑,运行结果也做了相同调整。 整体而言,有效信息的可视面积和可操作面积都尽可能扩大了! 关键技术点 前端代码修改文件如下: 比较繁琐,没有新知识,这里就不一一讲解了,而是选择用到的关键技术点来进行知识回顾: template 添加<router-view></router-view> 主页面 div 添加v-if="$route.name === 'name'" 在 router/index.js 中添加 children 子路由 跳转页面前,存 localStorage 新页面 create()时,取 localStorage this.$router.push跳转路由 div 同行显示用float: left,紧跟的 div 换行用clear: both window.innerHeight 获取屏幕高度 小结 本文完成了对 teprunner 测试平台前端 UI 界面的体验升级,已经适配 13.3 寸到 27 寸显示器,如果还在担心不好用的话,那么现在可以好好试试了。定时任务从目前优化效果来看,已经趋于稳定,不久就会和大家见面。 ...
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 本文开发内容 上一篇文章已经把 pytest 引入到测试平台中,通过多线程和多进程的方式,运行测试用例。有了这个基础,做批量运行用例的功能就很简单了,只需要前端传入一个 CaseList 即可。本文的后端代码是增删改查和复用 run_case 相关代码做个 run_plan。前端代码将学习如何通过 LocalStorage 在非父子组件之间传递数据。具体开发内容如下: 测试计划增删改查 测试计划动态添加移除测试用例 运行测试计划,批量运行用例 计划运行结果、用例运行结果 编写后端代码 编辑 teprunner/urls.py 文件,添加测试计划的路由: 编辑 teprunner/models.py 文件,添加 3 张表的 model: Plan 存放测试计划,PlanCase 存放计划和用例关联关系,PlanResult 和 CaseResult 类似,这里之所以把单独出来一张结果表,是为了和用例结果 CaseResult 相互独立,防止计划结果覆盖用例结果,毕竟 CaseResult 一般是手工跑出来的,PlanResult 一般是定时任务跑出来的,功能数据解耦后处理起来也更方便。 编辑 teprunner/serializers.py 文件,添加序列化器: 为了前端展示需要,这里额外关联了一些字段进行展示。尤其是: caseNum 用例总条数,passedNum 成功条数,failedNum 失败条数,errorNum 错误条数。成功定义为:只有 passed,没有 failed 和 error 的用例。失败定义为:只有 failed,没有 error 的用例。错误定义为:只要有 error 的用例。 本文还展示了,如果序列化器的某个字段只在存库时使用,返回响应时不展示,该怎么处理: 重写 to_representation 方法,把不需要返回的字段 pop 移出去。这里 output 在计划运行结果不需要,在用例运行结果才需要,为了减少传输数据,就在计划运行结果的接口响应中移出去了。 ...
最近几个月时间有些小伙伴问到为什么 tep 项目初始化文件没有了?
tep 是一款测试工具,在 pytest 测试框架基础上集成了第三方包,提供项目脚手架,帮助以写 Python 代码方式,快速实现自动化项目落地。
本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 本文开发内容 pytest 登场!本文将在 Django 中引入 pytest,原理是先执行 tep startproject 命令创建 pytest 项目文件,然后从数据库中拉取代码写入文件,最后调用 pytest 命令运行用例。为了提高运行效率,用例运行是并行的,采用了多线程和多进程,两个都有,这在最后有个单独小结进行比较完整的说明。因为用例运行是异步的,所以前端并不知道什么时候执行完才能拿到运行结果,可以发多个 HTTP 请求轮询,但这种方式并不优雅,本文将采用 WebSocket 来实现用例结果查询。具体内容为: cases/<int:pk>/run运行用例接口 ws/teprunner/cases/<int:case_id>/result/用例结果查询接口 projects/<int:pk>/export下载项目环境接口 前端添加 WebSocket 请求 知识点涉及有点多:tep、pytest、同步、异步、多线程、多进程、回调函数、WebSocket、长连接、全双工、ASGI、WSGI、打 ZIP 包、文件字节流传输。 编写后端代码 编辑 requirements.txt,添加 tep 和 channels: tep==0.6.9 channels==3.0.3 tep 是用来创建 pytest 项目的,channels 是用来实现 WebSocket 的。 编辑 teprunner/urls.py 文件,添加 HTTP 路由: 首先实现 run 接口,新建 teprunner/views/run.py 文件: 这是运行用例的主体流程: 第一步从请求中获取用例 id、运行环境、运行人,这里演示了获取 user 数据的两种方式:接口传参和从 token 中解析。然后根据 project_id,run_env,user_id 定义了 pytest 项目的路径。 第二步使用 tep startproject 创建项目文件,清空 fixtures 和 tests 目录,目的有两个:一是清掉 tep 默认 fixtures 和示例 cases,防止对平台产生干扰;二是保证每次运行目录都是干净的,就不用单独去处理前端手动删掉 fixture/case 后,文件残留的问题。然后从数据库中拉取环境变量、fixtures 等数据更新文件。 起多个线程,分别执行用例,执行前先拉取用例代码写入文件,这里是单条用例运行,之所以要用 for 循环,是因为用例迟早是要批量执行,在设计时就考虑到,避免后面走弯路。然后删掉数据库运行结果,通过 subprocess 起子进程调用 pytest 命令,最后在线程的回调函数中根据 pytest_result 保存用例结果到数据库中。 注意!run_case 接口不会直接返回结果,前端是用 WebSocket 来查询结果的。 ...