前言

我们都知道在自动化测试中都会用到前后置,pytest 相比 unittest 无论是前后置还是插件等都灵活了许多,还能自己用 fixture 来定义。(甩 unttest 半条街?)

首先了解一下,用例运行前后置级别如下:

  • 模块级:全局的,整个模块开只运行一次,优先于测试用例。
  • 类级别:定义在类里面,只针对此类生效。类似unittest的cls装饰器
  • 函数级:只对函数生效,类下面的函数不生效。
  • 方法级:定义在类里面,每个用例都执行一次

一、setup、teardown级别

1、模块级别:setup_module、teardown_module

全局的,整个模块开只运行一次,优先于测试用例。

2、类级别:setup_class、teardown_class

类级别:定义在类里面,只针对此类生效。类似unittest的cls装饰器

3、函数级:setup_function、teardown_function

函数级:只对函数生效,类下面的函数不生效。

4、方法级:setup_method、teardown_method

方法级:定义在类里面的函数,也叫方法,每个用例都执行一次

最后全部执行打印,代码:

def setup_module():
print('\n整个模块 前 只运行一次') def teardown_module():
print('\n整个模块 后 只运行一次') def setup_function():
print('\n不在类中的函数,每个用例 前 只运行一次') def teardown_function():
print('\n不在类中的函数,每个用例 后 只运行一次') def test_ab():
b = 2
assert b < 3 def test_aba():
b = 2
assert b < 3 class Test_api(): def setup_class(self):
print('\n此类用例 前 只执行一次')
def teardown_class(self):
print('\n此类用例 后 只执行一次') def setup_method(self):
print('\n此类每个用例 前 只执行一次') def teardown_method(self):
print('\n此类每个用例 后 执行一次') def test_aa(self):
a = 1
print('\n我是用例:a') # pytest -s 显示打印内容
assert a > 0 def test_b(self):
b = 2
assert b < 3

二、fixture简单使用

1、Fixture 其实就是自定义 pytest 执行用例前置和后置操作,首先创建 conftest.py 文件 (规定此命名)

2、导入 pytest 模块,运用 pytest.fixture 装饰器,默认级别为:函数级,如图二源码

3、其它用例文件调用即可,如下定义一个函数,继承 conftest.py 文件里的 setup_login 函数即可调用:

''' 运用 fixtures 定义的顺序 '''
def test_001(setup_login):
print('\n上面是登录,我现在点击进入home')

4、cmd 运行结果如下:

先执行了 conftest.py 文件里的 setup_login 函数,再执行运行的用例.py文件;

G:\python_study\study\pytest_demo\study>pytest -s test_fixture.py
================================================= test session starts =================================================
platform win32 -- Python 3.6.5, pytest-3.6.3, py-1.8.0, pluggy-0.6.0
rootdir: G:\python_study\study\pytest_demo\study, inifile:
collected 1 item test_fixture.py
先执行登录 上面是登录,我现在点击进入home
. ============================================== 1 passed in 0.07 seconds ===============================================

5、conftest.py 文件,自定义函数后置操作:yield

G:\python_study\study\pytest_demo\study>pytest -s test_fixture.py
================================================= test session starts =================================================
platform win32 -- Python 3.6.5, pytest-3.6.3, py-1.8.0, pluggy-0.6.0
rootdir: G:\python_study\study\pytest_demo\study, inifile:
collected 1 item test_fixture.py
先执行登录 上面是登录,我现在点击进入home
.
测试数据最后执行清理 ============================================== 1 passed in 0.06 seconds ===============================================

6、多个自定义函数和全局级别展示:(全局的比如用于登录获取到token其他用例模块就不需要再登录了)

①conftest.py 文件代码如下:

import pytest

@pytest.fixture(scope='session')    # scope='session' 任何文件共享
def setu_login():
print('\n用例先登录') @pytest.fixture()
def open_html():
print('\n打开页面') # 后置操作
yield
print('\n测试数据最后执行清理')

②用例文件代码如下:

def test_001(setu_login):
print('\n上面是登录,我现在点击进入home') def test_002(open_html):
print('\n没登录,打开html') def test_003(setu_login, open_html):
print('\n登录后,打开html') def test_data(open_html):
print('测试数据1') def test_data1(open_html):
print('测试数据122')

③cmd 运行结果:

G:\python_study\study\pytest_demo\study>pytest -s test_fixture.py
================================================= test session starts =================================================
platform win32 -- Python 3.6.5, pytest-3.6.3, py-1.8.0, pluggy-0.6.0
rootdir: G:\python_study\study\pytest_demo\study, inifile:
collected 5 items test_fixture.py
用例先登录 上面是登录,我现在点击进入home
.
打开页面 没登录,打开html
.
测试数据最后执行清理 打开页面 登录后,打开html
.
测试数据最后执行清理 打开页面
测试数据1
.
测试数据最后执行清理 打开页面
测试数据122
.
测试数据最后执行清理 ============================================== 5 passed in 0.06 seconds ===============================================

看完之后,有没有甩 unittest 框架半条街你说了算?pytest 成为了目前主流的任意玩框架。

对于运行用例级别都是setup_xx,teartown_xx,后面接module、class是不是很好记呢?欢迎来QQ交流群:482713805

python接口自动化12-pytest前后置与fixture的更多相关文章

  1. python接口自动化之pytest环境准备与入门(五)

    安装的pytest版本应该与安装的python版本对应,不然会有问题 (我的环境是python3.6与pytest4.5.0) 1.安装pytest pip install pytest==4.5.0 ...

  2. 2020年第二期《python接口自动化+测试开发》课程,已开学!

    2020年第二期<python接口自动化+python测试开发>课程,12月15号开学! 主讲老师:上海-悠悠 上课方式:QQ群视频在线教学,方便交流 本期上课时间:12月15号-3月29 ...

  3. python接口自动化(十)--post请求四种传送正文方式(详解)

    简介 post请求我在python接口自动化(八)--发送post请求的接口(详解)已经讲过一部分了,主要是发送一些较长的数据,还有就是数据比较安全等.我们要知道post请求四种传送正文方式首先需要先 ...

  4. python接口自动化1-发送get请求

    前言 requests模块,也就是老污龟,为啥叫它老污龟呢,因为这个官网上的logo就是这只污龟,接下来就是学习它了. 一.环境安装 1.用pip安装requests模块 >>pip in ...

  5. python接口自动化9-https请求(SSL)

    前言 本来最新的requests库V2.13.0是支持https请求的,但是一般写脚本时候,我们会用抓包工具fiddler,这时候会报:requests.exceptions.SSLError: [S ...

  6. python接口自动化22-签名(signature)鉴权(authentication)之加密(HEX、MD5、HMAC-SHA256)

    前言 开放的接口为了避免被别人乱调用,浪费服务器资源,这就涉及到签名(Signature)加密了 API 使用签名方法(Signature)对接口进行鉴权(Authentication).每一次请求都 ...

  7. Python接口自动化——soap协议传参的类型是ns0类型的要创建工厂方法纪要

    1:在Python接口自动化中,对于soap协议的xml的请求我们可以使用Suds Client来实现,其soap协议传参的类型基本上是有2种: 第一种是传参,不需要再创建啥, 第二种就是ns0类型的 ...

  8. python接口自动化-Cookie_绕过验证码登录

    前言 有些登录的接口会有验证码,例如:短信验证码,图形验证码等,这种登录的验证码参数可以从后台获取(或者最直接的可查数据库) 获取不到也没关系,可以通过添加Cookie的方式绕过验证码 前面在“pyt ...

  9. python接口自动化28-requests-html爬虫框架

    前言 requests库的好,只有用过的人才知道,最近这个库的作者又出了一个好用的爬虫框架requests-html.之前解析html页面用过了lxml和bs4, requests-html集成了一些 ...

  10. python接口自动化-参数化

    原文地址https://www.cnblogs.com/yoyoketang/p/6891710.html python接口自动化 -参数关联(一)https://www.cnblogs.com/11 ...

随机推荐

  1. ORA-00904:"WM_CONCAT":标识符无效

    原创 Oracle 作者:Root__Liu 时间:2019-11-21 18:49:27  514  0 今天客户现场业务甩给我一个报错让处理,ora-00904:"WM_CONCAT&q ...

  2. 12C新功能:在线移动数据文件 (Doc ID 1566797.1)

    12C New Feature : Move a Datafile Online (Doc ID 1566797.1) APPLIES TO: Oracle Database - Enterprise ...

  3. Python的map方法的应用

    Map方法,第一个参数要写一个匿名函数表达式,或者是一个函数引用,第二个第三个往后都是表达式用到的参数,参数一般是可迭代的 1.比如下面这个map方法,两个参数,第一个 lambda x: x*x是匿 ...

  4. 10-Node.js学习笔记-异步函数

    异步函数 异步函数是异步编程语法的终极解决方案,它可以让我们将异步代码写成同步的形式,让代码不再有回调函数嵌套,是代码变得清晰明了 const fn = async()=>{} async fu ...

  5. java 主动信任证书

    java 主动信任证书 SSLContext sslcontext = SSLContexts.custom().loadKeyMaterial(keyStore, mid.toCharArray() ...

  6. Leetcode题解 - 树部分简单题目代码+思路(105、106、109、112、897、257、872、226、235、129)

    树的题目中递归用的比较多(但是递归是真难弄 我

  7. easyui treegrid数据重复加载问题

    在使用easyui的时候,出现了数据重复加载的问题.如下图 关于这个问题有两种说法,第一种说法是 easyui-datagrid 类在html和js中重复定义,数据渲染时会加载两次.另一种是$(&qu ...

  8. windows本地连不上虚拟机redis服务完美解决

    检查本机与虚拟机是否可以互相ping通,如本机IP:192.168.22.111  虚拟机IP:192.168.44.129 (设置虚拟机静态IP已设置) 本机 win+R 输入cmd 进入dos 输 ...

  9. 基于 Swoole 的微信扫码登录

    随着微信的普及,扫码登录方式越来越被现在的应用所使用.它因为不用去记住密码,只要有微信号即可方便快捷登录.微信的开放平台原生就有支持扫码登录的功能,不过大部分人还是在用公众平台,所以扫码登录只能自行实 ...

  10. NLP入门(九)词义消岐(WSD)的简介与实现

    词义消岐简介   词义消岐,英文名称为Word Sense Disambiguation,英语缩写为WSD,是自然语言处理(NLP)中一个非常有趣的基本任务.   那么,什么是词义消岐呢?通常,在我们 ...