一、conftest.py作用

可以理解成存放fixture的配置文件

二、conftest.py配置fixture注意事项

  • pytest会默认读取conftest.py里面的所有fixture
  • conftest.py 文件名称是固定的,不能改动
  • conftest.py只对同一个package下的所有测试用例生效
  • 不同目录可以有自己的conftest.py,一个项目中可以有多个conftest.py
  • 测试用例文件中不需要手动import conftest.py,pytest会自动查找

三、实例场景应用

多个测试用例脚本都需要先进行登录,再进行业务操作,按照封装的特性,肯定需要抽离登录这部分,那么我们现在就使用conftest.py来实现。

工程目录结构如下:

1、最顶层conftest

即项目根目录下的conftest文件,一般写全局的fixture,在接口自动化中抽离登录使用,示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2020/11/11 21:26
# @Author : longrong.lang
# @FileName: conftest.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
import pytest @pytest.fixture(scope='session')
def login():
print(u'调用登录接口')
username="zhangsan"
token="ZXF3ZTEyMTIzMTIxYWUxcWUxYGAyYDJgYDIx"
yield username, token
print("====登录成功,返回用户名,token!") @pytest.fixture(autouse=True)
def get_userinfo(login):
username, token = login
print(f"== 每个用例都调用的外层fixture:打印用户名username:{username} 和token: {token} ==")

说明:此处必须要配合yield使用,也就是teardown(可以理解为afterclass)

2、同级目录下的第一个用例

示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2020/11/11 21:56
# @Author : longrong.lang
# @FileName: test_getUserInfo.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
def test_getUserInfo(login):
username,token=login
print(f"== 每个用例都调用的外层fixture:打印用户名\nusername:{username} 和token: {token} ==")

运行结果:

3、test_query目录

通过conftest.py,配置一些针对query的测试用例独有的fixture,比如:查询商品,示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2020/11/11 22:19
# @Author : longrong.lang
# @FileName: conftest.py.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
import pytest @pytest.fixture(scope='module')
def query(login):
print("====调用查询接口")
shopName="AJ男鞋"
size=44
colour="红色"
yield shopName, size,colour
print(f"调用查询接口成功,返回查询商品信息")

对应测试用例,示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2020/11/11 22:27
# @Author : longrong.lang
# @FileName: test_case1.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
def test_query_shop(query):
shopName,size,colour=query
print(f"\n返回查询商品信息:商品名称: {shopName} 颜色:{colour} 鞋号: {size}")

运行结果:

4、test_loginout目录

没有__init__.py文件也没有conftest.py文件,对应测试用例,示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2020/11/11 22:40
# @Author : longrong.lang
# @FileName: test_nofixture.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
def test_no_fixture(login):
print("==\n没有__init__测试用例,登录后,我就想退出登录了==", login)

运行结果:

5、test_addcart目录

通过conftest.py,配置一些针对addcart的测试用例独有的fixture,比如:加入购物车,示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2020/11/11 22:50
# @Author : longrong.lang
# @FileName: conftest.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
import pytest @pytest.fixture(scope='function')
def addcart(login):
print("从详情页登录,将商品加入购物车")
price="2099元"
yield price
print('添加购物车成功,累计计算中')

对应测试用例,示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2020/11/11 22:56
# @Author : longrong.lang
# @FileName: test_case.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
def test_addCart(addcart):
price=addcart
print(f"\n返回商品价格: {price} ")

运行结果:

四、运行目录下所有用例

示例代码如下:

# -*- coding: utf-8 -*-
# @Time : 2020/11/11 23:17
# @Author : longrong.lang
# @FileName: run.py
# @Software: PyCharm
# @Cnblogs :https://www.cnblogs.com/longronglang
import pytest if __name__ == '__main__':
pytest.main(["-q", "../python-practice/"])

运行结果:

Pytest学习(六) - conftest.py结合接口自动化的举例使用的更多相关文章

  1. Pytest学习笔记5-conftest.py的用法

    前言 在之前介绍fixture的文章中,我们使用到了conftest.py文件,那么conftest.py文件到底该如何使用呢,下面我们就来详细了解一下conftest.py文件的特点和使用方法吧 什 ...

  2. 『德不孤』Pytest框架 — 14、Pytest中的conftest.py文件

    目录 1.conftest.py文件介绍 2.conftest.py的注意事项 3.conftest.py的使用 4.不同位置conftest.py文件的优先级 5.conftest.py中Fixtu ...

  3. pytest进阶之conftest.py

    前言 前面几篇随笔基本上已经了解了pytest 命令使用,收集用例,finxture使用及作用范围,今天简单介绍一下conftest.py文件的作用和实际项目中如是使用此文件! 实例场景 首先们思考这 ...

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

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

  5. 基于Python+Requests+Pytest+YAML+Allure实现接口自动化

    本项目实现接口自动化的技术选型:Python+Requests+Pytest+YAML+Allure ,主要是针对之前开发的一个接口项目来进行学习,通过 Python+Requests 来发送和处理H ...

  6. Python+Pytest+Allure+Git+Jenkins接口自动化框架

    Python+Pytest+Allure+Git+Jenkins接口自动化框架 一.接口基础 接口测试是对系统和组件之间的接口进行测试,主要是效验数据的交换,传递和控制管理过程,以及相互逻辑依赖关系. ...

  7. 接口自动化框架(Pytest+request+Allure)

    前言: 接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱. 接口自动化包含2个部分,功能性的接口自动化测试和并发接口自动化测试. 本次文章着重介绍第一种, ...

  8. pytest文档5-fixture之conftest.py

    前言 前面一篇讲到用例加setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的,如果我想实现以下场景: 用例1需要先登录,用例2不需要登录,用例3需要先登录. ...

  9. 接口自动化框架2-升级版(Pytest+request+Allure)

    前言: 接口自动化是指模拟程序接口层面的自动化,由于接口不易变更,维护成本更小,所以深受各大公司的喜爱. 第一版入口:接口自动化框架(Pytest+request+Allure) 本次版本做了一些升级 ...

随机推荐

  1. 为Android(和其他移动平台)安装MoSync

    为Android(和其他移动平台)安装MoSync Android教程比赛 这是我提交的文章#2:设置你的Android开发环境.它的主要区别在于它描述了如何安装MoSync,这是一种开发环境,它不是 ...

  2. ansible-的修改配置文件

    1. ansible的配置文件 1 [root@1-230 python-2.7.5]# tree /etc/ansible/ 2 /etc/ansible/ 3 ├── ansible.cfg 4 ...

  3. MeteoInfoLab脚本示例:添加南海脚图

    添加南海脚图实际上就是增加一个地图坐标系(Axesm),在用axesm函数创建地图坐标系的时候可以指定position参数(即位置和大小),第1和第2个参数是坐标系的左下角x, y位置,后两个参数是坐 ...

  4. Prometheus入门教程(二):Prometheus + Grafana实现可视化、告警

    文章首发于[陈树义]公众号,点击跳转到原文:https://mp.weixin.qq.com/s/56S290p4j9KROB5uGRcGkQ Prometheus UI 提供了快速验证 PromQL ...

  5. .NetCore 异步编程 - async/await

    前言: 这段时间开始用.netcore做公司项目,发现前辈搭的框架通篇运用了异步编程方式,也就是async/await方式,作为一个刚接触的小白,自然不太明白其中原理,最重要的是,这个玩意如果不明白基 ...

  6. hugo主题文档-manpassant

    +++ date="2020-10-17T10:32:00+08:00" title="hugo主题文档manpassant" tags=["hugo ...

  7. RESP协议

    RESP 是 Redis 序列化协议的简写.它是⼀种直观的⽂本协议,优势在于实现异常简单,解析性能极好. Redis 协议将传输的结构数据分为 5 种最⼩单元类型,单元结束时统⼀加上回⻋换⾏符号\r\ ...

  8. 后羿:我射箭了快上—用MotionLayout实现王者荣耀团战

    前言 昨晚跟往常一样,饭后开了一局王者荣耀,前中期基本焦灼,到了后期一波决定胜负的时候,我果断射箭,射中对面,配合队友直接秒杀,打赢团战一波推完基地.那叫一个精彩,队友都发出了666666的称赞,我酷 ...

  9. python numpy输出排名

    python numpy排序后输出排名 问题: 假设某班的成绩为: 姓名 成绩 名次 小红 95 小黑 67 小白 58 小绿 82 小蓝 76 小橙 79 小可爱 99 请根据表格,输出对应的名次 ...

  10. codeforces#426(div1) B - The Bakery (线段树 + dp)

    B. The Bakery   Some time ago Slastyona the Sweetmaid decided to open her own bakery! She bought req ...