tep0.6.0更新聊聊pytest变量接口用例3个级别复用

tep是一款测试工具,在pytest测试框架基础上集成了第三方包,提供项目脚手架,帮助以写Python代码方式,快速实现自动化项目落地。fixture是pytest核心技术,本文聊聊如何使用fixture完成变量、接口、用例3个级别复用。

2026-01-05 · 2 分钟 · 300 字 · 测试开发刚哥 · 原创项目 · #Tep

teprunner测试平台开发用例管理不只有增删改查

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 本文开发内容 用例管理是对用例进行增删改查,按照前面文章的思路,把它做出来应该不难,如果你已经自己写好了,那么可以和本文提交的代码比较下看看。除了增删改查,用例管理还需要提供运行用例的入口,在操作列添加一个运行按钮,单条用例运行,并弹窗展示运行结果。用例列表需要能看到每条用例执行情况,添加表格列用于展示,其中“运行结果”列要有超链接,点击查看上次运行结果。为了避免修改别人用例出错,还需要有个复制用例功能。除了在线编辑,平台应支持下载项目环境到本地,无缝切换到PyCharm,让新用户快速上手。综上所述,本文开发内容如下: 用例增删改查。 运行按钮,点击后弹出“运行用例结果”。 添加表格展示列,其中“运行结果”用颜色区分不同结果状态:passed,failed,error,点击超链接后弹出“查看用例结果”。 复制按钮,点击后生成一条复制的新用例。 新增/编辑页面,添加运行按钮。 运行/查看页面,添加编辑按钮。 下载环境到本地。 工作量主要在前端,后端先做一部分。 编写后端代码 编辑teprunner/urls.py,添加路由: 除了增删改查,还添加了2个接口,一个用于获取用例运行的结果,一个用于复制测试用例。 编辑teprunner/models.py,添加模型: 第一个Model是Case,没有定义name字段,实际上用例ID和用例描述已经够用了,name不知道填什么,有点多余。第二个Model是CaseResult,会记录运行结果,这个运行结果是从pytest执行日志最后一行的Summary截取出来的,比如1 passed,1 failed,耗时也是从Summary截取出来的。output存放代码运行后打到控制台的输出日志。最后三个字段记录运行环境、运行人和运行时间,运行时间取的数据库记录被添加/更新的时间。添加好以后迁移到数据库中: python manage.py makemigrations python manage.py migrate 编辑teprunner/serializers.py,添加序列化器,第一个序列化器是CaseSerializer: 只关联了Case模型的字段。 第二个序列化器是CaseListSerializer: 它主要用来返回用例列表的数据,除了用例本身,还需要用例结果。serializers.SerializerMethodField用于自定义序列化字段,定义好字段后,在下面添加get_前缀+字段名的方法,这是Django的规则,然后在方法内部添加取值代码,比如get_result(),instance是指Meta.model定义的模型,这里就等同于Case,通过instance.id获取到Case.id并赋值给case_id变量,从CaseResult的对象中过滤case_id匹配的用例结果,按运行时间倒序,取最新1条结果的result字段的值。其他字段的处理是类似的,runTime这里做了下日期格式化: 第三个序列化器是CaseResultSerializer: 只关联了CaseResult模型的字段,runTime同样做了日期格式化。从这里也能更清晰的看到,instance就是指的自己! 新建teprunner/views/case.py文件,添加视图,先把简单的两个视图做了,第一个视图是case_result: 这里是个知识点,采用@api_view注解的函数视图,如果想用序列化器,那么采用这种方式。 第二个视图是copy_case: 根据case_id查找到现有Case对象,在case.desc后面添加--复制后缀,其他字段数据复用,保存,就完成复制用例了。 第三个视图是CaseViewSet: 继承了ModelViewSet,重写了list列表查询,因为如果不重写,默认返回的结果是serializer_class = CaseSerializer序列化器的内容。我们需要的是CaseListSerializer这个序列化器的内容。这里也是一个知识点!如果想在类视图中,使用serializer_class以外的序列化器加分页,采用这种方式。 重写的list方法首先添加了project_id、case_id、desc、api四个过滤条件,与前端的当前项目、用例ID搜索框、用例描述搜索框、API路径搜索框一一对应。__icontains表示包含,相当于模糊匹配,i忽略大小写。接着用到了自定义分页的类,按照统一的分页格式,返回序列化器的数据。 最后,重写了update方法,用现有的创建人进行更新。 编写前端代码 编辑router/index.js,添加路由: 编辑views/teprunner/index.vue,添加菜单项: 新建views/teprunner/case/CaseManagement.vue文件,增删改查基础代码不再另加赘述,挑选新代码: 在运行结果列,添加了超链接,点击后打开用例结果弹窗,这个弹窗查看和运行用例都会用到,用第一个参数type做区分: getResultColor方法返回颜色样式: 由于用例结果弹窗和用例列表表格都会有这个字段,于是把resultColor方法提取到了utils/commonMethods.js文件中: CaseManagement.vue是一个父组件,它有3个子组件,如下图所示: 通过import后,添加标签代码引入: 是否显示弹窗通过DialogFormVisible的true/false来控制,DialogTitle指定弹窗标题。:开头是父组件向子组件传值, @开头是接受子组件发过来的emit事件通知,从而调用父组件中方法。这样就把这几个组件绑定在一起了! 从这里开始,这几个组件之间的关系会稍微有点绕,读不懂的话多结合源码看看! ...

端到端自动化的开源框架

本书作者:测试开发刚哥,文章版权归个人所有,未经授权请勿转载。 什么是Playwright? Playwright是一个开源框架,用于对Web应用进行端到端测试。 什么是端到端测试? 这里的“端”,不是指A模块或B模块,而是可以理解为从前端到后端。举个例子,对于登录功能来说,如果只测前端,那么测试范围就是前端页面,可能会对后端接口进行mock。如果只测后端,那么测试范围就是后端接口等。而端到端呢,就是前端输入用户名密码,点击登录,与后端交互,查询数据库,鉴权,后端返回登录成功,前端进行页面跳转。端到端测试,可以理解为全流程测试,也可以理解为模拟用户场景测试。 Playwright框架特点 官方网站首页:https://playwright.dev/python/ 总结下重点,一是跨浏览器、跨平台、跨语言;二是自动等待;三是多用户场景测试;四是只需要一次登录;五是可以录制脚本。 快速入门 在官网的顶部菜单可以切换不同编程语言的教程: 本文及后续文章均选择Python。 安装 安装Python的Playwright,这里结合了pytest: pip install pytest-playwright 成功后安装浏览器: playwright install 这里也可以不安装浏览器,而是在脚本里面指定现有浏览器路径。 示例 test_example.py import re from playwright.sync_api import Page, expect def test_has_title(page: Page): page.goto("https://playwright.dev/") # Expect a title "to contain" a substring. expect(page).to_have_title(re.compile("Playwright")) def test_get_started_link(page: Page): page.goto("https://playwright.dev/") # Click the get started link. page.get_by_role("link", name="Get started").click() # Expects page to have a heading with the name of Installation. expect(page.get_by_role("heading", name="Installation")).to_be_visible() 执行pytest后默认会选择chrome在headless模式下运行,可以通过日志观察运行过程。 更新命令: pip install pytest-playwright playwright -U 编写测试 访问url: ...

解决“测试流程”问题的底层逻辑

这3个问题本质上都是测试流程问题,解决的底层逻辑是建立自己的流程并灵活调整。

你知道Python基本数据类型是哪6个么

Python 是强类型语言,在学习 Python 时,有必要了解 Python 有哪些基本数据类型,一共 6 个:Number(数字)、String(字符串)、List(列表)、Tuple(元组)、Set(集合)、Dictionary(字典)。数据类型的知识是非常多的,一篇文章讲不明白,本文仍然属于入门系列,内容主要是基础简介。

字符集其实很简单

字符集其实是个很简单的东西,但很多人当时看懂了,过了就忘了。

自定义Django认证系统的技术方案

Django已经提供了开箱即用的认证系统,但是可能并不满足我们的个性化需求。自定义认证系统需要知道哪些地方可以扩展,哪些地方可以替换。本文就来介绍自定义Django认证系统的相关技术细节。

Django认证系统并不鸡肋反而很重要

在使用django-admin startproject创建项目后,Django就默认安装了一个采用session实现的认证系统。这是Django相比于其他框架的一大特点:自带认证系统,开箱即用。有人说它方便,有人说它鸡肋,但它作为Django的重要组成部分,学习它有助于我们理解Django框架的核心技术。

FastAPI使用typing类型提示

typing是Python标准库,用来做类型提示。FastAPI使用typing做了:

Flask启动应用时都干了些啥

一个Flask应用(Flask Application)是Flask类(Flask Class)的实例。在前面的文章中,都是通过定义全局Flask实例的方式来编写的Flask应用代码,比如:

2026-01-04 · 1 分钟 · 162 字 · 测试开发刚哥 · Python生态 · #Flask