1.pytest入门
一、pytest单元测试框架
概念:单元测试是指在软件开发中,针对软件的最小单位(函数、方法等)进行正确性的检查测试
单元测试框架是自动化测试框架中的组成部分之一
pom设计模式是自动化测试框架中的组成部分之一
用途:
- 测试发现:从多个文件里面去找到我们的测试用例
- 测试执行:按照一定的顺序和规则去执行,生成结果
- 测试判断:通过断言判断逾期结果和实际结果的差异
- 测试报告:统计测试进度,耗时,通过率,生成测试报告
二、pytest简介
- pytest是一个非常成熟的单元框架,比unittest更灵活,容易上手
- pytest可以和selenium、request、appium结合实现web自动化、接口自动化、app自动化
- pytest可以实现测试用例的跳过以及reruns失败用例充实
- pytest可以和allure生成非常美观的测试报告
- pytest可以和jenkins持续继承
- pytest有很多非常强大的插件,并且这些插件能够实现很多的实用操作
例如
- pyest-html 生成html格式的测试报告
- pytest-xdist 测试用例分布式执行,多CPU分发
- pytest-ordering 改变测试用例的执行顺序
- pytest-rerunfailures 用例失败后重跑
- allure-pytest 生成美观的测试报告
- ......
- 安装方式:pip3 install xxx
三、pytest默认的测试用例规则及基础应用
- 模块名必须以test_开通或者_test结尾,必须有_
- 测试类必须以Test开头,并且不能有init初始化方法
- 测试方法必须以test开头,_可有可无
四、pytest测试用例的运行方法
1.主函数模式
# -*- coding: utf-8 -*- # @Time: 2022/5/3 16:37 # @Author: LiQi # @Describe: import pytest """ main函数建议在项目主目录创建一个py文件,统一管理case执行情况 """ if __name__ == '__main__': #1.全部模块运行 pytest.main() #2.指定模块运行,比如我们有多个py文件,我们只执行指定模块,main方法传参必须是list,里面可以有多个参数 pytest.main(['test_login.py']) #模块名.py #3.指定目录运行,比如我们有多个文件夹测试用例集合,我们指定某一个文件夹全部指向,而不是里面的某一个模块 pytest.main(['文件夹名']) #4.通过nodeid指定用例运行,nodeid由模块名,分隔符,类名,方法名,函数名组成,分隔符是:: pytest.main(['文件夹名/模块名.py::类名::函数名']) #类里面包含的函数 pytest.main(['文件夹名/模块名.py::函数名']) #没有写类,单独的函数
2.命令行模式
# 命令行直接输入pytest全部执行 ~/Desktop/py_scripy/pytest_x ❯ pytest # 命令行指定模块执行 ~/Desktop/py_scripy/pytest_x ❯ pytest 模块名.py # 命令行指定目录执行 ~/Desktop/py_scripy/pytest_x ❯ pytest 文件夹名 # 命令行指定函数 ~/Desktop/py_scripy/pytest_x ❯ pytest 文件夹名/模块名.py::函数名 ~/Desktop/py_scripy/pytest_x ❯ pytest 文件夹名/模块名.py::类名::函数名
3.通过读取pytest.ini配置文件运行
- pytest.ini是pytest单元测试框架的核心配置文件
- 位置:一般放在项目的根目录下
- 名字:必须是pytest.ini ,不可以自定义
- 编码:必须是ANSI编码格式
- 作用:改变pytest的默认行为
- 运行的规则:不管主函数模式还是命令行运行,都会去读取这个文件,按里面的规则执行
下面是一些常用配置:
#固定格式
[pytest]
# 执行时添加的运行参数
addopts = -vs -s
#测试用例执行的文件夹
testpaths = testcase
#配置测试搜索的模块文件名称
python_files = test*.py
# 配置测试搜索的测试类名
python_classes = Test*
#配置测试搜索的测试函数名
python_functions = test
4.运行参数详解
-s:输出用例里面的调试信息,包括print打印信息
#main函数
if __name__ == '__main__':
#全部模块
pytest.main(['-s'])
# 指定模块调试,其余组合场景与主函数运行一致
pytest.main(['-s','模块名.py'])
#命令行
pyest -s
pytest -s 模块名.py
-v:输出用例的详细信息,包含执行路径等
#main函数
if __name__ == '__main__':
# main方法传参必须是list,里面可以有多个参数
pytest.main(['-v'])
#命令行
pytest -v
-vs:-v和-vs两个参数组合使用,输出详细的信息
#main函数
if __name__ == '__main__':
pytest.main(['-vs'])
#命令行
pytest -vs
-n:分布式或者多线程执行
#main函数
if __name__ == '__main__':
pytest.main(['-vs','-n=2'])# 2指的是线程数,自定义
#命令行
pytest -vs -n 2
--reruns:失败用例重跑
#main函数
if __name__ == '__main__':
pytest.main(['-vs','-n=2','--reruns=3'])# 3指的是用例执行失败重跑的次数,自定义
#命令行
pytest -vs -n 2 --reruns 3
-x:只要有一个用例报错,那么测试停止不再执行
#main函数
if __name__ == '__main__':
pytest.main(['-vs','-n=2','-x'])
#命令行
pytest -vs -n 2 -x
--maxfail:最大用例失败数
#main函数
if __name__ == '__main__':
pytest.main(['-vs','-n=2','--maxfail=3'])# 3指的是用例执行最大失败数,达到次数则停止
#命令行
pytest -vs -n 2 --maxfail 3
--html:输出测试报告
安装:pip3 install pytest-html
#main函数
if __name__ == '__main__':
pytest.main(['-vs','--html="xxx/xxx.html"'])#指定在哪里路径生成
#命令行
pytest --html xxx/xxx.html
-k:根据测试用例部分字符串指定测试用例
#main函数
if __name__ == '__main__':
pytest.main(['-vs','-k=str'])# str指的是包含的字符串,包含该字符串的所有case会执行
#命令行
pytest -k 字符串
五、pytest执行顺序
- unittest执行顺序是按ASSIC码大小顺序执行
- pytest执行测试顺序是从上向下执行
- 我们可以通过装饰器指定执行顺序
安装:pip3 install pytest-ordering
使用:@pytest.mark.run(order=number)
参数: order:int类型,指定case第几个执行
执行的时候,pytest会按顺序优先执行有该标记的用例,之后继续按顺序执行没有标记的用例
#示例
import pytest
class TestRegister:
#指定该用例第二个执行
@pytest.mark.run(order=2)
def test_login(self):
print('测试登录')
#指定该用例第一关执行
@pytest.mark.run(order=1)
def test_register(self):
print('测试注册')
六、分组执行
我们的项目有多种类型的用例,比如冒烟、模块、接口等,我们要分组执行,使用装饰器
#pytest.ini配置
#用例分组执行 ,格式:标签名:描述
markers =
smokey:冒烟用例
api:模块用例
#用例py文件
@pytest.mark.smoke
def test_register(self):
print('测试注册')
@pytest.mark.api
def test_login(self):
print('测试登录')
执行
#指定一个组执行
pytest -vs -m "分组标签名"
#指定多个组执行 使用or
pytest -vs -m "分组标签名 or 分组标签名"
七、pytest跳过测试用例
无条件跳过:
@pytest.mark.skip(reason='原因描述')
#使用skip装饰器跳过,reason可添加跳过的原因
有条件跳过
@pytest.mark.skipif(i=1,reason='描述')
#使用skipif装饰器跳过,reason可添加跳过的原因,格式:判断表达式,原因
风月都好看,人间也浪漫.
分类:
Pytest测试框架
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· winform 绘制太阳,地球,月球 运作规律
· AI与.NET技术实操系列(五):向量存储与相似性搜索在 .NET 中的实现
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)