pytest的学习过程

本篇章为pytest的学习过程,仅是个人的观点

1、unittest和pytest的介绍

核心对比内容如下:

1、安装与版本管理:

  • unittest:作为 Python 的内置标准库,它无需额外安装,但无法灵活升级或降级
  • pytest:是一个第三方库,需要手动安装,可以自由指定、升级或降级到任何需要的版本

2、代码风格与易用性:

  • unittest:代码风格被描述为类似 Java 语言(需要创建类、继承、使用特定断言方法,代码稍显繁琐)
  • pytest:代码风格更 "Pythonic",语法更简洁,可以用简单的 assert 语句进行断言,减少了大量的样板代码

3、插件生态与扩展性(核心优势):

  • unittest:插件生态非常有限,扩展能力弱
  • pytest:拥有一个极其强大的插件生态,覆盖了报告、异步、Web测试、性能等方方面面,扩展性极强

4、兼容性与维护:

  • unittest:由 Python 官方直接维护,是官方标准
  • pytest:一个关键优势是它完全兼容用 unittest 编写的测试用例,使得从 unittest 迁移到 pytest 的成本非常低

2、如何快速上手?

需要安装pytest:pip install pytest

升级到最新版:pip install pytest -u

对于pytest来说有三种启动方式:

1、命令:需要在终端上输入pytest【推荐使用】

2、代码:需要新建一个main.py的文件,在main里面启动【推荐使用】

import pytest

pytest .main()

3、鼠标【不推荐】:这种操作方式是由pycham提供的,不是pytest提供的

3、如何看懂结果?

1、执行环境:版本、根目录、用例数量

2、执行过程:文件名称、用例结果、执行速度

3、失败详情:用例内容、断言提示

4、整体摘要:结果情况、结果数量、花费时间

用例结果的缩写:

. : passed (通过)

F: failed (失败:用例执行时报错)

E: error (出错:fixture执行时报错)

s: skipped (跳过)

X: xpassed (预期外的通过:不符合预期)

x: xfailed (预期内的失败:符合预期)

4、用例规则

分为两部分:用例发现规则,用例内容规则

1、用例发现规则:测试框架在识别、加载用例的过程

pytest的用例发现步骤:

1、遍历所有的目录,例外:venv,.开头的目录

2、打开python文件,test_开头或者_test结尾

3、遍历所有的Test开头类

4、收集所有的test_开头的函数或者方法

2、用例内容规则:pytest 8.4增加了一个强制要求

pytest对用例的要求:

1、可调用的(函数、方法、类、对象)

2、名字test_开头

3、没有参数(参数有另外含义)

4、没有返回值(默认为None)

参数self:函数本身的变量

5、配置框架

配置可以改变pytest的默认规则:

  • 命令参数
  • ini配置文件

所有的配置方式,可以一键获取:pytest -h

配置文件可以使用pytest.ini来命名,一般介绍有哪些配置,分别使用什么方式等

常用的参数有:

  • -v:增加详细程度
  • -s:在用例中正常的使用输入输出
  • -x:快速退出,当遇到失败的用例停止执行
  • -m:用例筛选

6、标记mark

标记可以让用例与众不同,进而可以让用例被区别对待

1、用户自定义标记:用户自定义标记只能实现用例筛选

操作步骤:

  • 先注册
  • 再标记
  • 后筛选
class TestAdd: @pytest.mark.api def test_int(self): res = add(2, 3) assert res == 5 @pytest.mark.web def test_str(self): res = add("hello", "world") assert res == "helloworld" @pytest.mark.ut def test_list(self): res = add([1, 2, 3], [4, 5, 6]) assert res == [1, 2, 3, 4, 5, 6]

运行的时候可以使用:pytest -m ut来筛选特定的运行结果

2、框架内置标记

框架内置标记为用例增加特殊的执行效果

和用户自定义标记区别:

1、不需注册,可以直接使用

2、不仅可以筛选,还可以增加特殊效果

3、不同的标记,增加不同的特殊效果

  • skip:无条件跳过
  • skipif:有条件跳过
  • xfail:预期失败
  • parametrize:参数化
  • ousefixtures:使用fixtures

7、数据驱动测试参数

数据文件,驱动用例执行数量,内容

data.csv文件:

a,b,c
1,1,2
2,3,5
3,3,6
4,4,7

@pytest.mark.ddt @pytest.mark.parametrize( "a,b,c", read_csv("../data.csv") ) def test_ddt(self, a, b, c): res = add(int(a), int(b)) assert res == int(c)

8、夹具fixture

夹具:在用例执行之前、执行之后,自动运行代码

  • 之前:加密参数/之后:解密结果
  • 之前:启动浏览器/之后:关闭浏览器
  • 之前:注册、登录账号/之后:删除账号

1、创建夹具fixture:

@pytest.fixture def f(): # 前置操作 yield # 后置操作
1、创建函数 2、添加装饰器 3、添加yield关键字

2、使用fixture:

  • 在用例的参数列表中,加入fixture名字即可
  • 给用例加上usefixtures标记
def test_1(f): pass @pytest.mark.usefixtures("f") def test_2(): pass

从Python的角度来看,函数中可以有多个yield,但是pytest中只能有一个yield

3、高级用法:

1、自动使用

2、依赖使用:

  • linux:使用linux进行编译
  • git:使用git进行版本控制
  • fixture:使用fixture进行前后置自动操作

3、返回内容:接口自动化封装:接口关联

4、范围共享:

  • 默认范围:function
  • 全局范围:session
  • 使用conftest.py

9、插件管理

pytest插件生态是pytest特别的优势之处

插件分成两类:

  • 不需要安装:内置插件
  • 需要安装:第三方插件

插件的使用方式:

  • 参数
  • 配置文件
  • fixture
  • mark

10、常用的插件

1、pytest-html

用途:生成HTML测试报告

安装:pip install pytest-html

使用:--html=report.html --self-contained-html

2、pytest-xdist

用途:分布式执行

安装:pip install pytest-xdist

使用:-n N(N指的是次数)

只有在任务本身耗时较长,超出调用成本很多的时候,才有意义

3、pytest-rerunfailures

用途:用例失败之后,重新执行

安装:pip install pytest-rerunfailures

使用:-reruns 5 --reruns-delay 1

pytest 有140+插件:https://docs:pxtest.org/en/stable/reference/plugin_list.html

11、企业级测试报告

allure是一个测试报告框架

安装:pip install allure-pytest

配置:--alluredir=temps --clean-alluredir

生成报告:allure generate -0 report -c temps

allure支持对用例进行分组和关联(敏捷开发术语)

  • @allure.epic :史诗 / 项目
  • @allure.feature:主题 / 模块
  • @allure.story:故事 / 功能
  • @allure.title:标题 /用例
@allure.epic("自动化") @allure.feature("测试用例") @allure.story("测试用例1") @allure.title ("测试用例1标题") @pytest.mark.ut def test_a(): pass @allure.epic("自动化") @allure.feature("测试用例") @allure.story("测试用例2") @allure.title("测试用例2标题") @pytest.mark.ut def test_b(): pass

12、Web自动化测试

pytest仅进行用例管理,不会控制浏览器,需要借助新的工具:Selenium

安装:pip install pytest-selenium

同时也提供不使用Selenium插件的方法:

@pytest.fixture() def selenium(): d = webdriver.chrome yield d d.quit()

13、测试框架要封装什么

封装:

  • 隐藏细节
  • 增加功能
  • 优化功能

接口自动化封装:

  • 使用yaml作为用例,降低自动化门槛
  • 自动请求接口、断言接口
  • 自动在日志记录HTTP报文
  • 自动生成allure测试报告

14、yaml文件格式

一句话:YAML完全兼容ISON格式,并且支持Python相似写法

重点:

  • YAML完全兼容ISON
  • 是数据格式,不是变成语言
  • 像Python一样容易编辑和阅读

编写yaml文件

1、#作为注释符号

2、缩进:使用2个空格

3.、成员表示

  • - 表示列表成员
  • :表示字典成员

4、完全兼容ISON

数字: -123 字符串: - "hello world" 空值: - null 列表: - [1, 2, 3] 字典: - {name: "Alice", age: 25}

加载yaml文件

import yaml def read_yaml(file_path): f = open(file_path, encoding="utf-8") # 打開文件 s = f.read() # 读取文件内容 data = yaml.safe_load(s) return data

15、接口自动化测试

设计测试用例

1、名字:请求首页数据接口
2、标记【可选】
3、步骤

  • 请求接口:GET https://www.baidu.com
  • 响应断言:status_code ==200
  • 提取变量:json() ['code']

1、请求接口

使用外部工具:requests

安装:pip install requests

从HTTP协议抓包角度,请求由三部分组成:

  • 行:方法+地址(必填)
  • 头:请求头(键值对)
  • 体:参数内容
# 请求行 url='https://baidu.com' # GET方法 requests.get(url) # POST方法 requests.post(url) # 任意方法 requests.request('MOVE',url)

2、断言相应

  • 响应里有什么
  • 响应如何断言

从HTTP协议抓包角度,响应由三部分组成:

  • 行:状态码
  • 头:响应头(键值对)
  • 体:响应内容

3、变量提取

基本原则:

  • JSON:JSONPATH
  • HTML:XPATH
  • 字符串:RE

进一步完善:

1、YAML用例测试文件上传?

2、YAML用例进行数据去掉测试?

3、YAML用例进行自定义的断言

4、YAML用例进行数据库查询?

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1145746.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

抖音下载神器:5分钟快速上手,永久保存心仪短视频

抖音下载神器:5分钟快速上手,永久保存心仪短视频 【免费下载链接】douyin-downloader 项目地址: https://gitcode.com/GitHub_Trending/do/douyin-downloader 还在为抖音上那些精彩视频一闪而过感到遗憾吗?😔 当你看到教学…

如何5分钟彻底清理Windows右键菜单:免费工具一键优化桌面效率

如何5分钟彻底清理Windows右键菜单:免费工具一键优化桌面效率 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为Windows右键菜单越来越臃肿而烦恼…

Windows右键菜单清理神器:3分钟告别臃肿杂乱,打造高效工作流

Windows右键菜单清理神器:3分钟告别臃肿杂乱,打造高效工作流 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 还在为层层叠叠的右键菜单烦…

终极指南:3个快速解决Modern Fortran扩展配置难题的技巧

终极指南:3个快速解决Modern Fortran扩展配置难题的技巧 【免费下载链接】vscode-fortran-support Fortran language support for Visual Studio Code 项目地址: https://gitcode.com/gh_mirrors/vs/vscode-fortran-support Modern Fortran扩展为Visual Stud…

电话号码定位完全手册:三分钟掌握精准位置查询技术

电话号码定位完全手册:三分钟掌握精准位置查询技术 【免费下载链接】location-to-phone-number This a project to search a location of a specified phone number, and locate the map to the phone number location. 项目地址: https://gitcode.com/gh_mirrors…

RVC语音转换WebUI完整使用指南:从安装到精通应用

RVC语音转换WebUI完整使用指南:从安装到精通应用 【免费下载链接】rvc-webui liujing04/Retrieval-based-Voice-Conversion-WebUI reconstruction project 项目地址: https://gitcode.com/gh_mirrors/rv/rvc-webui RVC(Retrieval-based Voice Con…

ncmToMp3终极教程:5分钟解锁网易云VIP加密音乐

ncmToMp3终极教程:5分钟解锁网易云VIP加密音乐 【免费下载链接】ncmToMp3 网易云vip的ncm文件转mp3/flac - ncm file to mp3 or flac 项目地址: https://gitcode.com/gh_mirrors/nc/ncmToMp3 还在为网易云音乐VIP下载的NCM文件无法在其他播放器使用而烦恼吗&…

USACO历年黄金组真题解析 | 2020年2月Timeline

​欢迎大家订阅我的专栏:算法题解:C与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选…

如何快速获取百度网盘提取码:技术解析与实用指南

如何快速获取百度网盘提取码:技术解析与实用指南 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 百度网盘资源访问过程中,提取码缺失是常见的技术痛点。baidupankey作为一款专业的网盘密码查询工具&…

Navicat密码解密工具终极使用指南:轻松找回遗忘的数据库连接密码

Navicat密码解密工具终极使用指南:轻松找回遗忘的数据库连接密码 【免费下载链接】navicat_password_decrypt 忘记navicat密码时,此工具可以帮您查看密码 项目地址: https://gitcode.com/gh_mirrors/na/navicat_password_decrypt Navicat密码解密工具是一款专…

LeagueAkari实战秘籍:英雄联盟辅助工具效率提升完全指南

LeagueAkari实战秘籍:英雄联盟辅助工具效率提升完全指南 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 还在为…

NeverSink过滤器终极配置指南:3步打造流放之路2高效刷图体验

NeverSink过滤器终极配置指南:3步打造流放之路2高效刷图体验 【免费下载链接】NeverSink-Filter-for-PoE2 This is a lootfilter for the game "Path of Exile 2". It adds colors, sounds, map icons, beams to highlight remarkable gear and inform th…

百度网盘提取码智能查询工具:告别资源访问障碍的全新体验

百度网盘提取码智能查询工具:告别资源访问障碍的全新体验 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为频繁查找百度网盘提取码而困扰吗?baidupankey这款专业的百度网盘提取码查询工具将彻底改…

USACO历年白银组真题解析 | 2023年2月Bakery

欢迎大家订阅我的专栏:算法题解:C与Python实现! 本专栏旨在帮助大家从基础到进阶 ,逐步提升编程能力,助力信息学竞赛备战! 专栏特色 1.经典算法练习:根据信息学竞赛大纲,精心挑选经…

LeagueAkari终极指南:英雄联盟辅助工具完整教程

LeagueAkari终极指南:英雄联盟辅助工具完整教程 【免费下载链接】LeagueAkari ✨兴趣使然的,功能全面的英雄联盟工具集。支持战绩查询、自动秒选等功能。基于 LCU API。 项目地址: https://gitcode.com/gh_mirrors/le/LeagueAkari 还在为英雄联盟…

5分钟精通NeverSink过滤器:流放之路2的智能拾取终极配置指南

5分钟精通NeverSink过滤器:流放之路2的智能拾取终极配置指南 【免费下载链接】NeverSink-Filter-for-PoE2 This is a lootfilter for the game "Path of Exile 2". It adds colors, sounds, map icons, beams to highlight remarkable gear and inform th…

ncmToMp3完整教程:3分钟解锁网易云加密音乐

ncmToMp3完整教程:3分钟解锁网易云加密音乐 【免费下载链接】ncmToMp3 网易云vip的ncm文件转mp3/flac - ncm file to mp3 or flac 项目地址: https://gitcode.com/gh_mirrors/nc/ncmToMp3 还在为网易云VIP下载的音乐无法自由播放而困扰吗?ncmToMp…

百度网盘资源解锁大师:秒速获取提取码的终极秘籍

百度网盘资源解锁大师:秒速获取提取码的终极秘籍 【免费下载链接】baidupankey 项目地址: https://gitcode.com/gh_mirrors/ba/baidupankey 还在为百度网盘分享链接的提取码而烦恼吗?每次遇到需要密码的资源,都要在多个平台间来回搜索…

LoRA微调技术详解与实践

1. 大模型微调的效率革命 随着ChatGPT、LLaMA等百亿、千亿参数大语言模型的崛起,如何让这些"通才"模型高效地适应特定领域任务,成为业界面临的核心挑战。传统全参数微调方法需要更新模型全部权重,即使对于70亿参数的模型&#xff0…

Windows右键菜单终极清理指南:5分钟打造清爽高效桌面

Windows右键菜单终极清理指南:5分钟打造清爽高效桌面 【免费下载链接】ContextMenuManager 🖱️ 纯粹的Windows右键菜单管理程序 项目地址: https://gitcode.com/gh_mirrors/co/ContextMenuManager 你是不是也遇到过这样的烦恼?&#…