@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(二)的更多相关文章

  1. pytest初始化与清除(一)

    一.初始化函数 1.测试用例级别:def setup() 2.套件级别(在模块文件中定义):def setup_module() 3.套件级别(在类中定义): @classmethod def set ...

  2. Pytest(3)fixture的使用

    fixture的优势 Pytest的fixture相对于传统的xUnit的setup/teardown函数做了显著的改进: 命名方式灵活,不局限于 setup 和teardown 这几个命名 conf ...

  3. 《C++编程思想》第四章 初始化与清除(原书代码+习题+解答)

    相关代码: 1. #include <stdio.h> class tree { int height; public: tree(int initialHeight); ~tree(); ...

  4. pytest进阶之xunit fixture

    前言 今天我们再说一下pytest框架和unittest框架相同的fixture的使用, 了解unittest的同学应该知道我们在初始化环境和销毁工作时,unittest使用的是setUp,tearD ...

  5. pytest自动化3:fixture之conftest.py实现setup

    出处:https://www.cnblogs.com/yoyoketang/p/9390073.html 前言: 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作 ...

  6. Pytest高级进阶之Fixture

    From: https://www.cnblogs.com/feiyi211/p/6626314.html 一. fixture介绍 fixture是pytest的一个闪光点,pytest要精通怎么能 ...

  7. Pytest单元测试框架之FixTure基本使用

    前言: 在单元测试框架中,主要分为:测试固件,测试用例,测试套件,测试执行及测试报告: 测试固件不难理解,也就是我们在执行测试用例前需要做的动作和测试执行后的需要做的事情: 比如在UI自动化测试中,我 ...

  8. bss段为什么要初始化,清除

    我们都知道bss段需要初始化,但是这是为什么呢? 通过浏览资料,我们都会发现,bss段是不会出现在程序下载文件(*.bin *.hex)中的,因为全都是0.如果把它们出现在程序下载文件中,会增加程序下 ...

  9. pytest.5.参数化的Fixture

    From: http://www.testclass.net/pytest/parametrize_fixture/ 背景 继续上一节的测试需求,在上一节里,任何1条测试数据导致断言不通过后测试用例就 ...

随机推荐

  1. Windows 10 系统进入测试模式命令

    首先需要开启测试模式,内容如下: @bcdedit -set loadoptions DDISABLE_INTEGRITY_CHECKS @bcdedit -set TESTSIGNING ON 取消 ...

  2. Linux yum 报错:One of the configured repositories failed (Unknown), and yum doesn't have.

    1.  请先确定你是无法联网还是配置问题. ping www.baidu.com 如果是正常ping那可以看这个帖子完成配置 https://blog.csdn.net/weicuidi/articl ...

  3. php单列模式和工厂模式

    一.单例模式又称为职责模式,它用来在程序中创建一个单一功能的访问点,通俗地说就是实例化出来的对象是唯一的.所有的单例模式至少拥有以下三种公共元素: 1. 它们必须拥有一个构造函数,并且必须被标记为pr ...

  4. Window内核学习之保护模式基础

    段寄存器 段寄存器有6个分别是 cs,ss,ds,es,fs,gs.这些段寄存器包含16位的可见部分和80位的隐藏部分,共90位. 16位的可见部分就是我们知道的cs等段寄存器的值,我们可以在od中查 ...

  5. 一道codeforces题目引发的差分学习

    Codeforces Round #688 (Div. 2) 题目:B. Suffix Operations 题意:给定一个长为n的数组a,你可以进行两种操作:1).后缀+1;     2)后缀-1: ...

  6. sscanf的应用

    1.提取字符串 2.提取指定长度的字符串 3.提取指定字符为止的字符串 4.取仅包含指定字符集的字符串 5.取到指定字符集为止的字符串 #include <stdio.h> int mai ...

  7. 黄衫女子,黄衫好.png

    正想着团队项目中数据该如何解析,就收到了来自软工课程组的一件小黄衫,真是意外之喜.详问其来源,竟是因结对项目做的"较好"而来,顿感受之有愧. 结对项目是两人对文件系统的一个小模拟, ...

  8. mac 安装jmeter

    1.打开jemeter网址 http://jmeter.apache.org/download_jmeter.cgi 2.下载Binaries中的 apache-jmeter-5.0.tgz 3.解压 ...

  9. 强哥HTML学习笔记

    html 浏览器的选择:1.火狐2.ie3.chrome4.mac5.opera 安装两款插件:1.firebug2.web develope html页面元素:1.doctype2.htmlhead ...

  10. IT菜鸟之网站搭建(emlog)

    由多个网页组成的一种集合,叫做网站 网站分为:静态网站.动态网站  静态网站:不会因为时间.地点.用户角色等因素发生内容改变的网站 动态网站:会因为时间.地点.用户角色等因素发生内容改变的网站 注意: ...