Pytest框架实现一些前后置(固件、夹具)的处理
Pytest框架实现一些前后置(固件、夹具)的处理,常用三种。
一、setup/teardown,setup_class/teardown_class所有用例
为什么需要这些功能?
class TestProduct(): ##这个在所有的用例之前只执行一次 def setup_class(self): print("在每个类执行前的初始化工作:比如创建日志对象,创建数据库的连接,创建接口的请求对象") def setup(self): print("在执行测试用例之前初始化的代码:找开浏览器,加载网页面") def test_01_tester(self): print("我是电视机") def test_02_developer(self): print("我是沙发") def test_03_producter(self): print("我是衣柜") def teardown(self): print("在执行测试用例之后的扫尾的代码") def teardown_class(self): print("在每个类执行后的扫尾工作:比如销毁日志对象,销毁数据库的连接,销毁接口的请求对象")
注意:和Unittest不一样的是,全是小写
二、使用@pytest.fixture()装饰器来实现部分用例的前后置。
@pytest.fixture(scope="",params="",autouse="",ids="",name="")
-
scope表示的是被pytest.fixture标记的方法的作用域。function(默认),class,module,package/session
@pytest.fixture()如果不写参数,参数默认就是scope="function",它的作用范围是每个测试用例之前运行一次,销毁代码在测试用例之后运行。
fixture为class级别的时候,如果一个class里面有多个用例,都调用了次fixture,那么此fixture只在此class里所有用例开始前执行一次。
fixture为module时,在当前.py脚本里面所有用例开始前只执行一次
fixture为session级别是可以跨.py模块调用的,也就是当我们有多个.py文件的用例的时候,如果多个用例只需调用一次fixture,那就可以设置为scope="session",并且写到conftest.py文件里。
2. params:参数化(支持列表[], 元祖(),字典列表[{},{},{}],字典元祖({},{},{})
@pytest.fixture(scope="function",params=['爸爸','妈妈','宝贝']) def my_fixture(request): print("前置") yield request.param ##另外一种方法即return request.param,区别:return和yield都表示返回的意思,但是return的后面不能有代码,yield 返回后后面可以接代码 print("后置") class TestLogin(): def test_01_tester(self): print("我是测试,可以登录") def test_02_developer(self,my_fixture): print("我是开发,可以登录") print('-------------------------'+ str(my_fixture)) def test_03_producter(self): print("我是产品,不可以登录") ###输入结果: test_login.py::TestLogin::test_01_tester 我是测试,可以登录 PASSED test_login.py::TestLogin::test_02_developer[\u7238\u7238] 我是开发,可以登录 -------------------------爸爸 PASSED test_login.py::TestLogin::test_02_developer[\u5988\u5988] 我是开发,可以登录 -------------------------妈妈 PASSED test_login.py::TestLogin::test_02_developer[\u5b9d\u8d1d] 我是开发,可以登录 -------------------------宝贝 PASSED test_login.py::TestLogin::test_03_producter 我是产品,不可以登录 PASSED
3.autouse=True : 自动执行,默认False,为true时每个用例前执行一次前置
4. ids: 当使用params参数化,给每一个值设置一个变量名,意义不大,作用于传参时返回[\u7238\u7238] 的问题
@pytest.fixture(scope="function",params=['爸爸','妈妈','宝贝'],ids=['dad','mom','baby']) def my_fixture(request): print("前置") yield request.param print("后置")
5. name: 表示的是被@pytest.fixture标记的方法取一个别名,当取了别名之后,那么原来的名称就用不了了。
三、通过conftest.py和@pytest.fixture()结合使用实现全局的前置应用(比如:项目的全局登录,模块的全局处理)
-
conftest.py文件是单独存放的一个夹具配置文件,名称是不能更改。
-
可以作用于不同的py文件中的使用同一个fixture的函数。
-
conftest.py需要和运行的用例放到同一层目录下,并且不需要做任何的import导入的操作。
总结:
setup/teardown, setup_class/teardown_class, 它是作用于所有用例或者所有的类
@pytest.fixture() 它的作用是既可以部分也可以全部前后置
conftest.py 和@pytest.fixture()结合使用,作用于全局的前后置
四、断言
assert 1==2
五、pytest结合allure-pytest插件生成allure测试报告
-
下载,解压,配置path路径
验证:allure --version
问题:终端中可以验证,pycharm中不能验证,重启pycharm
2. 加入命令生成json格式的临时报告
--alluredir ./temp
3. 生成allure报告
os.system('allure generate ./temp -o ./report --clean')
-
-
allure generate 命令,固定写法
-
./temp 临时的json格式报告的路径
-
-o 输出output
-
./report 生成的allure报告的路径
-
--clean 清空./report 路径原来的报告
-
三十六般武艺,七十二般变化,修练出个人品牌并发出光芒
分类:
Pytest
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律