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条测试数据导致断言不通过后测试用例就 ...
随机推荐
- layui图片上传
<!DOCTYPE html><html><head> <meta charset="utf-8"> <title>up ...
- Asp.NetCore Web开发之创建项目
这一节,开始讲一下如何创建一个Asp.netCore Web项目,有两种常用的方式,一种是通过.NetCore SDK使用命令创建,另一种如果你使用的VisualStudio,可以直接根据引导创建. ...
- buaaoo_third_assignment
你看这个代码它又长又宽 一.JML (1)理论基础 JML(Java Modeling Language)是用于对Java程序进行规格化设计的一种表示语言.JML是一种行为接口规格语言 (Behavi ...
- ES6学习-2 let
ES6 新增了let命令,用来声明变量.它的用法类似于var,但是let所声明的变量,只在let命令所在的代码块内有效. 1 { 2 let a = 10; 3 var b = 1; 4 } 5 co ...
- 资源限制 ( resource limit 或 rlimit ),是 Linux 内核控制 用户 或 进程 资源占用的机制。
###### https://learn-linux.readthedocs.io/zh_CN/latest/administration/kernel/rlimit.html ########### ...
- megacli修复raid1硬盘
megacli修复raid1硬盘 By HKL, Tuesday 27 August 2019, 评论 [ Hardware Operating ] 使用megaraid修复raid1掉线硬盘 使用说 ...
- 005.Python条件if语句
一 流程控制 流程控制的定义 流程:代码执行的过程 流程控制:对代码执行过程的管控 流程控制三大结构: 顺序结构:从上到下,代码依次执行 分支结构: 一共4个 循环结构:while for 分支结构 ...
- linux 磁盘管理命令之df-(转自 Howie的专栏)
linux中df命令的功能是用来检查linux服务器的文件系统的磁盘空间占用情况.可以利用该命令来获取硬盘被占用了多少空间,目前还剩下多少空间等信息. 1.命令格式: df [选项] [文件] 2.命 ...
- USB NCM介绍
1 功能概述 USB NCM,属于USB-IF定义的CDC(Communication Device Class)下的一个子类:Network Control Model,用于Host和Device ...
- 第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难
第12讲 | TCP协议(下):西行必定多妖孽,恒心智慧消磨难 如何做个靠谱的人? 有问有答,任务发送和接收有记录,完成有反馈. 如何实现一个靠谱的协议? TCP 协议使用的也是同样的模式.为了保证顺 ...