排行
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
中国数据库
向量数据库
时序数据库
实时数据库
搜索引擎
空间数据库
图数据库
数据仓库
大调查
2021年报告
2022年报告
年度数据库
2020年openGauss
2021年TiDB
2022年PolarDB
2023年OceanBase
首页
资讯
活动
大会
学习
课程中心
推荐优质内容、热门课程
学习路径
预设学习计划、达成学习目标
知识图谱
综合了解技术体系知识点
课程库
快速筛选、搜索相关课程
视频学习
专业视频分享技术知识
电子文档
快速搜索阅览技术文档
文档
问答
服务
智能助手小墨
关于数据库相关的问题,您都可以问我
数据库巡检平台
脚本采集百余项,在线智能分析总结
SQLRUN
在线数据库即时SQL运行平台
数据库实训平台
实操环境、开箱即用、一键连接
数据库管理服务
汇聚顶级数据库专家,具备多数据库运维能力
数据库百科
核心案例
行业报告
月度解读
大事记
产业图谱
我的订单
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
资讯
活动
大会
课程
文档
排行
问答
我的订单
首页
专家团队
智能助手
在线工具
SQLRUN
在线数据库即时SQL运行平台
数据库在线实训平台
实操环境、开箱即用、一键连接
AWR分析
上传AWR报告,查看分析结果
SQL格式化
快速格式化绝大多数SQL语句
SQL审核
审核编写规范,提升执行效率
PLSQL解密
解密超4000字符的PL/SQL语句
OraC函数
查询Oracle C 函数的详细描述
智能助手小墨
关于数据库相关的问题,您都可以问我
精选案例
新闻资讯
云市场
登录后可立即获得以下权益
免费培训课程
收藏优质文章
疑难问题解答
下载专业文档
签到免费抽奖
提升成长等级
立即登录
登录
注册
登录
注册
首页
专家团队
智能助手
精选案例
新闻资讯
云市场
微信扫码
复制链接
新浪微博
分享数说
采集到收藏夹
分享到数说
首页
/
pytest之fixture
pytest之fixture
小二测试成长
2021-08-30
638
一、fixture优势
1、命名方式灵活
2、conftest.py配置里可以实现数据共享,不需要import就能自动找到一些配置
3、scope=”module“可以实现多个.py跨文件共享前置
4、scope="session"可以实现多个.py跨文件使用一个session来完成多个用例
二、fixture介绍
方法:fixture(scope="function", params=None, autouse=False, ids=None, name=None)
"使用装饰器标记fixture的功能
可以使用此装饰器(带或不带参数)来定义fixture功能。fixture功能的名称可以在以后使用
引用它会在运行测试之前调用它:test模块或类可以使用pytest.mark.usefixtures(fixturename标记。
测试功能可以直接使用fixture名称作为输入参数,在这种情况下,夹具实例从fixture返回功能将被注入。
scope:被标记方法的作用域
function" (default):作用于每个测试方法,每个test都运行一次
"class":作用于整个类,每个class的所有test只运行一次
"module":作用于整个模块,每个module的所有test只运行一次
"session:作用于整个session(慎用),每个session只运行一次
params:(list类型)提供参数数据,供调用标记方法的函数使用
autouse:是否自动运行,默认为False不运行,设置为True自动运行
三、简单代码示例
示例一:通过参数引用fixture
import pytest
@pytest.fixture()
def login():
print("输入账号密码")
def test_one(login):
print("登陆后,执行测试1")
def test_two():
print("不用登录,执行测试")
def test_three(login):
print("不用登录执行测试2")
if __name__ == '__main__':
pytest.main(['-s', 'test_fixture.py'])
输出结果:
示例二:可以把fixture函数写到conftest.py中
conftest.py
import pytest
@pytest.fixture()
def login():
print("\n输入账号密码") #\n是为了输出时候好看一点
test_fixture.py
import pytest
def test_one(login):
print("\n登陆后,执行测试1")
def test_two():
print("\n不用登录,执行测试")
def test_three(login):
print("\n不用登录执行测试2")
if __name__ == '__main__':
pytest.main(['-s', 'test_fixture.py'])
运行结果与示例一一致
示例三:
使用scope="module"设置为整个模块运行一次,默认为scope="function"
autouse=True设置为自动运行,默认为autouse=false
yield相当于一个分割线,yield前面的是最先运行相当于setup函数、yield后面的最后运行,相当于teardown函数
如果把scope修改成默认、则每个方法都会运行一次fixture
import pytest
@pytest.fixture(scope="module", autouse=True)
def open_browser():
print("\n打开浏览器,进入测试环境") #相当于setup
yield
print('最后关闭浏览器') #相当于teardown
def test_one(login):
print("\n登陆后,执行测试1")
def test_two():
print("\n不用登录,执行测试")
def test_three(login):
print("\n不用登录执行测试2")
if __name__ == '__main__':
pytest.main(['-s', 'test_fixture.py'])
输出结果:
示例四:可以作为返回值并且在一个函数中多次调用
import pytest
@pytest.fixture()
def make_customer_record():
def _make_customer_record(name):
return {
"name":name,
"orders":[]
}
return _make_customer_record
def test_customer_records(make_customer_record):
customer_1 = make_customer_record("lisa")
customer_2 = make_customer_record("mike")
customer_3 = make_customer_record("anna")
print(customer_1,customer_2,customer_3)
执行结果:[100%]{'name': 'lisa', 'orders': []} {'name': 'mike', 'orders': []} {'name': 'anna', 'orders': []}
示例五:
pytest还可以嵌套使用
import pytest
# autouse=True 不用要测试方法中传参调用,默认全使用,如果想某个模块不使用就要显示声明
@pytest.fixture(autouse=True)
def login(open_browser):
print("\n进入登录页面")
@pytest.fixture()
def open_browser():
print("\n打开浏览器")
def test_case1():
print("\ncase1:登陆后执行")
def test_case2():
print("\ncase2:不登陆执行")
def test_case3():
print("\ncase3:登录后执行")
if __name__ == '__main__':
pytest.main(["-s","test_fixture.py"])
执行结果:
微信号:wsj742769775
-扫码关注我-
数据库
文章转载自
小二测试成长
,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
领墨值
有奖问卷
意见反馈
客服小墨