ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

pytest 基础

2022-01-29 12:01:47  阅读:160  来源: 互联网

标签:基础 fixture request 用例 pytest ini 固件


一、pytest 的默认发现测试用例规则
1.模块名必须以 test_ 或 _test 开头或结尾;
2.测试类必须以 Test 开头,并且不能有 init 方法;
3.测试方法必须以 test_ 开头;

二、pytest 运行方式详解
1.命令行运行方式
运行命令:pytest
参数:
-v 输出更详细的信息;
-s 输入调试信息;
-n 多线程
--reruns 失败用例重跑
--html 生成简易报告

pytest -vs --reuns 2

2. 主函数运行方式
if __name__=='__main__':
pytest.main(['-vs'])

3. 通过 pytest.ini 文件运行(全局配置文件)
注意:
1). 命令行方式运行或主函数方式运行,均会自动读取配置文件 pytest.ini ;
2). pytest.ini 文件可以改变 pytest 默认的测试用例规则;
3). pytest.ini 文件一般放在项目的根目录下;
pytest.ini 文件内容如下:
[pytest]
#配置参数
addopt = -vs
#配置测试用例文件夹
testpaths =./testcases
#配置测试模块的规则
python_files = test_*.py
#配置测试用例的规则
python_classes = Test*
#配置测试方法的规则
python_functions = test_*
#配置接口测试的基础路径;base_url 就是一个函数级别的固件;多个基础路径需要封装
base_url = http://xx.xxx.xxx.xx/ (ip)
#给用例分组
maker =
smokes:冒烟测试
usermanage:用户管理

分组使用:
1. 在用例上面加上 @pytest.mark.smoke
2. 在执行时需要使用 -m 分组名
故:addopts = -vs -m "smoke or usermanage"

三、pytest 用例执行顺序
1. 默认:从上到下;
2. 可以通过如下标记改变测试执行顺序:@pytest.mark.run(order=1)

四、pytest 前后置条件(所有类、所有用例之前或之后)
类前: setup_class
类后: teardown_class
用例之前: setup
用例之后: teardown

希望在部分用例之前或之后执行,使用 Fixture
Fixture 装饰器完整结构如下:
@pytest.fixture(scope="作用域", params="数据驱动",autouse="自动执行",ids="参数别名",name="fixture别名")
1). scope:标记 fixture 作用域;
function(函数级别,手动或自动)、
class(类级别,一般自动)、
module(模块级别,一般自动)、
package/session(会话级别,一般自动)

2). autouse=True 自动执行

3). params 数据驱动
新建一个 fixture
@pytest.fixture(scope="module",autouse=False,params=method_read_yaml())
def execute_sql(request):
print("执行数据库查询")
yield request.param
print("关闭数据库连接")

这里的request 参数 和 request.param 值都是固定写法。
ps.来自网络: fixture(params=data) 装饰器的 data 是函数返回值 yield request.param,将带到下面调用为参数的函数中;

4). ids 参数别名

5). name 表示 fixture 的别名
当使用了 name 起别名后,原来的 fixture 的名称就失效了;

6). 一般情况下 fixture 会和 contenst.py 文件 一起使用;
注意:
1). contenst.py 是专门用于存放 fixture 的,是固定名称;
2). contenst.py 文件的方法,使用时不需要导包;

一个用例可以使用个固件(固件是 fixture),同级的按顺序执行;
def methodName(固件1, 固件2,固件3)

标签:基础,fixture,request,用例,pytest,ini,固件
来源: https://www.cnblogs.com/xj63183/p/15854654.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有