pytest初始化与清除fixture(二)
@pytest.fixture用法
1.导入pytest模块:import pytest
2.调用装饰器函数:@pytest.fixture(callable_or_scope=None,*args,scope='function',params=None,autouse=False,ids=None,name=None)
scope=function(默认值),表示作用于每一个测试用例
scope=class,表示每一个类调用一次,一个类中可以有多个方法
scope=moudle,表示每一个.py文件调用一次
scope=session,表示多个文件调用一次
autouse=True,表示每个测试用例都会执行初始化清除操作
import pytest @pytest.fixture(autouse=True)
def before():
print("this is setup")
yield
after() '''以下是初始化配套清除操作的第二种写法,代替yield'''
@pytest.fixture(autouse=True)
def before(request):
print("this is setup")
request.addfinalizer(after()) def after():
print("this is teardown") def test_001():
print("this is test_001()") def test_002():
print("this is test_002()")
C:\Users\cale\checkapi\test>pytest -s test_gy.py
================================================= test session starts =================================================
platform win32 -- Python 3.7.3, pytest-5.2.1, py-1.8.0, pluggy-0.13.0
rootdir: C:\Users\cale\checkapi\test
plugins: html-2.0.0, metadata-1.8.0, rerunfailures-7.0
collected 2 items
test_gy.py this is setup
this is test_001()
.this is teardown
this is setup
this is test_002()
.this is teardown
autouse=False(默认值),不会作用于每个测试用例,哪些测试用例要执行初始化清除操作需在测试用例里面传入对应的参数
from api.compare_result import CompareResult
from api.gy import gy_v4
import pytest class TestSuite():
def test_gy1(self,start):
'''start:调用start()方法作为该测试用例的初始化清除方法'''
inputxml1 = 'C:/Users/cale/checkapi/data/input/gyopt.xml'
outputxml1 = 'C:/Users/cale/checkapi/data/output/gyopt.xml'
cmpr=CompareResult()
cmpr.compareXML(gy_v4,inputxml1,outputxml1) @pytest.fixture(autouse=False)
def start(self):
'''调用fixture()装饰器,将此方法装饰成初始化清除方法'''
print("执行测试套件前会先执行此方法")
yield
self.end() def end(self):
print('执行完测试套件后会执行此方法') 执行结果:
test_gy.py 执行测试套件前会先执行此方法
.<?xml version="1.0" encoding="UTF-8"?>
<root><result><base><hospital_code>H0003</hospital_code><event_no></event_no><patient_id>004026990100aa</patient_id><source>门诊</source></base><btnStatus></btnStatus><invoke_result><invoke_status>0</invoke_status><invoke_message>调用失败</invoke_message></invoke_result><message><recipe_id></recipe_id><infos><info><info_id>1585813554277</info_id><recipe_item_id></recipe_item_id><group_no></group_no><drug_id></drug_id><drug_name></drug_name><error_info>干预异常!</error_info><advice></advice><source></source><rt></rt><source_id></source_id><severity></severity><message_id></message_id><type></type><analysis_type></analysis_type><analysis_result_type></analysis_result_type><info_type>0</info_type></info></infos></message></result></root>
比标准出参多出来的节点如下>>>>>>>>>>>>>>>>>
没有多余的节点
比标准出参少的节点如下>>>>>>>>>>>>>>>>>
没有缺少的节点
与标准出参类型不一致的节点如下>>>>>>>>>>>>>>>>>
节点名称:event_no ,标准出参类型:str ,实际出参类型:<class 'NoneType'>
节点名称:source ,标准出参类型:str ,实际出参类型:<class 'NoneType'>
执行完测试套件后会执行此方法
[100%] ============================== 1 passed in 1.71s ==============================
用fixture decorator调用fixture(autouse=False的情况下)
import pytest @pytest.fixture(autouse=True)
def before():
print("this is setup")
yield
after() def after():
print("this is teardown") class TestSuite():
@pytest.mark.usefixtures("before")
def test_003(self):
print("test_003()") @pytest.mark.usefixtures("before")
def test_004(self):
print("test_004()") @pytest.mark.usefixtures("before")
class TestSuite2():
def test_004(self):
print("test_004()") def test_005(self):
print("test_005()")
C:\Users\cale\checkapi\test>pytest -s test_gy.py
================================================= test session starts =================================================
platform win32 -- Python 3.7.3, pytest-5.2.1, py-1.8.0, pluggy-0.13.0
rootdir: C:\Users\cale\checkapi\test
plugins: html-2.0.0, metadata-1.8.0, rerunfailures-7.0
collected 4 items
test_gy.py this is setup
test_003()
.this is teardown
this is setup
test_004()
.this is teardown
this is setup
test_004()
.this is teardown
this is setup
test_005()
.this is teardown
用autos调用fixture (autouse=True的情况下)
import pytest @pytest.fixture(scope='module',autouse=True)
def mod_header(request):
print("module:%s"%(request.module.__name__)) @pytest.fixture(scope='function',autouse=True)
def func_header(request):
print("function:%s"%(request.function.__name__)) def test_006():
print("test_006") def test_007():
print("test_007")
运行结果:
C:\Users\cale\checkapi\test>pytest test_gy.py -s
================================================= test session starts =================================================
platform win32 -- Python 3.7.3, pytest-5.2.1, py-1.8.0, pluggy-0.13.0
rootdir: C:\Users\cale\checkapi\test
plugins: html-2.0.0, metadata-1.8.0, rerunfailures-7.0
collected 2 items
test_gy.py module:test_gy
function:test_006
test_006
.function:test_007
test_007
.
================================================== 2 passed in 0.12s ==================================================
以上mod_header()函数运行了一次,在所有测试用例执行前运行了一次;func_header()运行了两次,每个测试用例执行前都会运行一次
fixture返回值的使用
import pytest @pytest.fixture(params=[1,2])
def test_data(request):
return request.param def test_not_2(test_data):
print("test_data:%s"%(test_data))
assert test_data!=2
运行结果:
C:\Users\cale\checkapi\test>pytest test_gy.py -s
================================================= test session starts =================================================
platform win32 -- Python 3.7.3, pytest-5.2.1, py-1.8.0, pluggy-0.13.0
rootdir: C:\Users\cale\checkapi\test
plugins: html-2.0.0, metadata-1.8.0, rerunfailures-7.0
collected 2 items
test_gy.py test_data:1
.test_data:2
F
====================================================== FAILURES =======================================================
____________________________________________________ test_not_2[2] ____________________________________________________
test_data = 2
def test_not_2(test_data):
print("test_data:%s"%(test_data))
> assert test_data!=2
E assert 2 != 2
test_gy.py:49: AssertionError
============================================= 1 failed, 1 passed in 0.47s =============================================
可以看到test_not_2这个测试用例执行了两次,test_data函数中params这个变量传了几个参数,测试用例就会运行几次
链接:https://www.jianshu.com/p/54b0f4016300
目录下的初始化(session):https://blog.csdn.net/qq_36502272/article/details/100776789
pytest初始化与清除fixture(二)的更多相关文章
- pytest初始化与清除(一)
一.初始化函数 1.测试用例级别:def setup() 2.套件级别(在模块文件中定义):def setup_module() 3.套件级别(在类中定义): @classmethod def set ...
- Pytest(3)fixture的使用
fixture的优势 Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进: 命名方式灵活,不局限于 setup 和teardown 这几个命名 conf ...
- 《C++编程思想》第四章 初始化与清除(原书代码+习题+解答)
相关代码: 1. #include <stdio.h> class tree { int height; public: tree(int initialHeight); ~tree(); ...
- pytest进阶之xunit fixture
前言 今天我们再说一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学应该知道我们在初始化环境和销毁工作时,unittest使用的是setUp,tearD ...
- pytest自动化3:fixture之conftest.py实现setup
出处:https://www.cnblogs.com/yoyoketang/p/9390073.html 前言: 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作 ...
- Pytest高级进阶之Fixture
From: https://www.cnblogs.com/feiyi211/p/6626314.html 一. fixture介绍 fixture是pytest的一个闪光点,pytest要精通怎么能 ...
- Pytest单元测试框架之FixTure基本使用
前言: 在单元测试框架中,主要分为:测试固件,测试用例,测试套件,测试执行及测试报告: 测试固件不难理解,也就是我们在执行测试用例前需要做的动作和测试执行后的需要做的事情: 比如在UI自动化测试中,我 ...
- bss段为什么要初始化,清除
我们都知道bss段需要初始化,但是这是为什么呢? 通过浏览资料,我们都会发现,bss段是不会出现在程序下载文件(*.bin *.hex)中的,因为全都是0.如果把它们出现在程序下载文件中,会增加程序下 ...
- pytest.5.参数化的Fixture
From: http://www.testclass.net/pytest/parametrize_fixture/ 背景 继续上一节的测试需求,在上一节里,任何1条测试数据导致断言不通过后测试用例就 ...
随机推荐
- Portswigger web security academy:WebSockets
Portswigger web security academy:WebSockets 目录 Portswigger web security academy:WebSockets Lab: Mani ...
- VS Code插件推荐-Settings Sync
Settings Sync功能 将vscode的本地设置.插件保存至远端,方便保存 Usage 插件市场安装Setting Sync之后,⌘+P输入>sync,即可看到相关操作,选中点击之后官方 ...
- 【Docker】2. Docker的架构介绍、安装与卸载 (CentOS 7)
一.docker的基本组成 开局一张图. docker的组成: Client:客户端,可以通过它与docker服务进行交互.比如容器的构建.拉取.运行. DOCKER_HOST:就是docker服务. ...
- IIS部署.Net5全流程
介绍 Internet Information Services (IIS) 是一种灵活.安全且可管理的 Web 服务器,用于托管 Web 应用(包括 ASP.NET Core).虽然我们的程序可以跨 ...
- OO_Unit2_多线程电梯
CSDN博客链接 一.第一次作业 1.需求分析 单部多线程傻瓜调度(FAFS)电梯 2.实现方案 输入接口解析 类似于Scanner,我们使用ElevatorInput进行阻塞式读取(第一次作业较简单 ...
- zimbra启用SMTP认证
zmprov modifyServer {{ you domain }} zimbraMtaTlsAuthOnly FALSE zmcontrol restart 查看对应配置 zmprov getS ...
- [bug] Navicat 连 虚拟机MySQL
参考 https://www.cnblogs.com/brankoliu/p/10845491.html https://blog.csdn.net/qq_40087740/article/detai ...
- [刷题] PTA 查验身份证
题目: 7-63 查验身份证 (15 分) 一个合法的身份证号码由17位地区.日期编号和顺序编号加1位校验码组成.校验码的计算规则如下: 首先对前17位数字加权求和,权重分配为:{7,9,10,5, ...
- xpath元素定位语法
举个栗子 -------------------------------------------------------------------------------------- <?xml ...
- docker部署harbor私有镜像库(3)
一.harbor介绍 在实际生产运维中,往往需要把镜像发布到几十.上百台或更多的节点上.这时单台Docker主机上镜像已无法满足,项目越来越多,镜像就越来越多,都放到一台Docker主机上是不行的,我 ...