news 2026/4/17 22:14:01

web自动化测试——pytest快速上手

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
web自动化测试——pytest快速上手

1. pytest

pytest是一个非常成熟的全功能的Python测试框架,主要有以下几个特点:

  • 简单灵活,容易上手
  • 支持参数化
  • 能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试、接口自动化测试(pytest+requests)
  • pytest具有很多第三方插件,并且可以自定义扩展,比较好用的如pytest-selenium(集成selenium)、pytest-html(完美html测试报告生成)、pytest-rerunfailures(失败case重复执行)、pytest-xdist(多CPU分发)等
  • 测试用例的skip和xfail处理
  • 可以很好的和jenkins集成
  • report框架----allure 也支持了pytest
1.1安装
pip install pytest
1.2 验证安装
pytest --version # 会展示当前已安装版本

1.3 pytest文档

官方文档:https://docs.pytest.org/en/latest/contents.html

在pytest框架中,有如下约束:

  • 所有的单测文件名都需要满足test_*.py格式或*_test.py格式。
  • 在单测文件中,测试类以Test开头,并且不能带有 init 方法(注意:定义class时,需要以T开头,不然pytest是不会去运行该class的)
  • 在单测类中,可以包含一个或多个test_开头的函数。
  • 此时,在执行pytest命令时,会自动从当前目录及子目录中寻找符合上述约束的测试函数来执行。

1.4 创建测试用例

1.创建test_开头的文件,测试文件以 test_xx.py 命名需要以 test_开头(或_test 结尾)

2.若是新建类,测试类需要以 Test_开头,并且不能带有 init 方法(Test开头的类,这个类也叫做测试套件,类下面的是函数才是测试用例)

3.测试用例(方法)需要以 test_开头

import pytest #导入pytest模块 def test_beifan(): #测试用例 pass class TestBaili: #测试套件 def test_a(self): #测试用例,第一个测试方法 pass def test_b(self): #测试用例,第二个测试方法 pass

4.在用例中使用断言

Pytest 最常用的断言一般有以下五种:

assert xx:判断 xx 为真

assert not xx:判断 xx 不为真

assert a in b:判断 b 包含 a

assert a == b:判断 a 等于 b

assert a !=b:判断 a 不等于 b

添加断言在对应的方法里面,做判断测试用例结果是否满足预期,示例如下:

5.优化断言

如果想要在失败的时候看到更详细的信息,可以在断言上添加说明,示例如下:

执行结果如下图,可以看到失败时断言的说明信息:

1.5 执行测试用例
1.5.1 使用命令行执行

cmd 窗口,然后执行 pytest 文件路径/测试文件名例如 pytest ./test_tt.py

如果当前路径已经是放测试用例文件的文件夹下,想要测试文件,则直接可以输入pytest 测试文件名 即可:

如果只输入 pytest,则会默认执行当前文件夹下所有以 test_开头(或_test 结尾)的文件。

1.5.2 IDE(PyChram)执行

写法如截图所示,pytest.main()(参数以列表的形式给出,如截图)

执行当前文件所在路径下的文件,指定文件名则执行指定的文件,若没指定,执行所有 test_开头或者_test 结尾的文件。

也可以新建一个main.py文件

import pytest if __name__ == '__main__': pytest.main() #程序入口
1.5.3 执行指定文件指定方法
1.5.3.1 命令行编写方式

pytest路径/文件名::类名::方法名例如

1.5.3.2pycharm 编写方式

如果是用 pycharm 写法如图,与上面的命令行等价:

1.5.4 带参数执行

常用的 pytest 带参数执行:列举几种,其余扩展可以自行百度

1.5.4.1 pytest -q简化控制台的输出

不带参数执行结果:

带参数执行结果:

1.5.4.2 Pytest -v 输出用例更加详细的执行信息,比如用例所在文件和用例名称
1.5.4.3 pytest -k 执行用例中包含‘关键字’的用例
1.5.4.4 pytest -s 输出用例中的调试信息,比如 print 打印信息,如果不加参数则不输出待执行的用例
1.5.4.5 pytest -m执行‘标记’的内容,执行特定的测试用例,执行有相同标记的测试用例,添加标记的方法如下
1.5.4.6 pytest -x执行失败则停止执行,后面的用例不会被执行
1.5.4.7 pytest --maxfail=n执行失败 n 次之后停止执行,n 是执行失败的次数
1.5.4.8 pytest --count=n 执行用例 n 次,n=2 就是执行两次
1.5.4.9 pytest --lf (last failed)重新运行上次失败的用例,若没有失败的会全部跑
1.5.4.10 pytest --ff (failed first)重新运行所有用例,但首先运行上次失败的用例

1.6 读懂测试结果

.代表一个测试用例通过,…代表两个测试用例通过,以此类推;
s,即Skip,代表用例跳过执行;
F,即Failure,一般是断言发生错误;
E,即Error,一般是用例执行过程中报错。

1.7 pytest的fixures

fixtures(夹具)可以在测试用例执行之前,执行之后,自动执行一些代码

在不同用例中,相同的代码进行复用

在不同用例中,实现依赖管理

1.7.1 创建fixtures

pytest的夹具,本质是“函数”,加上fixtures装饰器。

夹具=函数+fixtures装饰器

创建一个conftest.py文件

import pytest from selenium import webdriver from selenium.webdriver.common.by import By @pytest.fixture() def driver(): d = webdriver.Chrome() d.get("http://101.34.221.219:8010/") # 控制浏览器,访问百度 d.quit() return d
1.7.2 使用fixtures

在测试用例的参数列表中,加上夹具名称,夹具就会被自动地使用。

通过使用fixtures实现,复用fixture中的代码

再用例中调用:

import pytest #导入pytest模块 def test_beifan(): #测试用例 pass class TestBaili: #测试套件 def test_a(self,driver): #测试用例,第一个测试方法 pass def test_b(self,driver): #测试用例,第二个测试方法 pass

这样就会打开自动两次浏览器了。

有个要求:两个测试用例,只启动一次浏览器

100个测试用例,但是只启动1次浏览器

1.7.3 fixture的范围

创建夹具,可以指定夹具的共享范围,在共享范围内的用例,会共享同一个夹具。

pytest的夹具共享范围有5个:

function(默认,最小,自己和自己共享,不和其他用例共享)

class(同一个类中)

module(文件)

package(文件夹)

session(会话,最大,全局)

@pytest.fixture(scope='function') def driver(): d = webdriver.Chrome() d.get("http://101.34.221.219:8010/") # 控制浏览器,访问百度 d.quit() return d

在fixture这个装饰器中传递一个范围参数,用来说明用例在什么范围中是相互共享的。

我们解决了多次打开浏览器的问题,那么下一个问题是元素的定位存在重复,下面我们去处理这个问题。

最后作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些软件测试的学习资料,这些资料希望能给你前进的路上带来帮助。

视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/18 8:04:30

给餐桌“Debug”:为何我们需要重构“东方健康操作系统”?

引子:当“人体服务器”亮起红灯 朋友们好。 作为一名在IT行业摸爬滚打了三十多年的“老兵”,我最习惯的就是跟各种“系统”打交道 。年轻时,我追求系统的“高性能”——速度要快,效率要高;年纪大了,我开始更看重系统的“稳定性”——不仅要跑得快,还得扛得住压,不出错…

作者头像 李华
网站建设 2026/4/18 8:07:43

信创环境下SpringBoot大文件上传的适配与优化

要求:免费,开源,技术支持 技术:分片,分块,分割,支持第三方软件集成, 前端:vue2,vue3,vue-cli,webuploader,html5 后端:java,SpringBoot 协议:HTTP WebServer:Tomcat,Resi…

作者头像 李华
网站建设 2026/4/18 5:39:02

GLM-4.6V-Flash-WEB模型能否识别候鸟飞行编队模式?

GLM-4.6V-Flash-WEB模型能否识别候鸟飞行编队模式? 在一片辽阔的湿地天空中,成群的候鸟划破云层,以精准的V字形编队向南迁徙。这种自然界的“空中舞蹈”不仅是生存智慧的体现,也蕴藏着生态行为学的重要信息。然而,要从…

作者头像 李华
网站建设 2026/4/18 3:58:09

GLM-4.6V-Flash-WEB模型对冰川退缩变化的长期监测潜力

GLM-4.6V-Flash-WEB模型对冰川退缩变化的长期监测潜力 在气候变化持续加剧的今天,全球冰川正以前所未有的速度消融。从阿尔卑斯山到喜马拉雅山脉,再到格陵兰岛的广阔冰盖,科学家们迫切需要一种高效、智能且可扩展的方法来持续追踪这些关键生态…

作者头像 李华
网站建设 2026/4/18 5:31:13

GLM-4.6V-Flash-WEB模型对火山喷发图像的科学解读能力

GLM-4.6V-Flash-WEB模型对火山喷发图像的科学解读能力 在遥感影像与灾害响应日益紧密交织的今天,一张来自卫星或无人机的火山喷发图像,不再只是地质学家手中的分析素材——它正成为AI系统理解地球动态的关键入口。当灰白色的喷发羽流刺破云层、热红外信号…

作者头像 李华
网站建设 2026/4/18 8:37:34

GLM-4.6V-Flash-WEB模型与RPA机器人流程自动化结合应用

GLM-4.6V-Flash-WEB 模型与 RPA 机器人的融合实践:让自动化真正“看得懂世界” 在企业数字化转型的浪潮中,机器人流程自动化(RPA)早已不是新鲜词。从财务报销到合同归档,从客户信息录入到系统巡检,RPA 能够…

作者头像 李华