PyTest_FixTure固件篇
c第二篇:
Fixture
fixture与setup和terdown作用一样,多用于准备测试工作的前后置操作。
Fixture(固件)装饰器方法格式:
import pytest
@pytest.fixture(scope="作用域",params="数据驱动",autouse="是否",ids="参数别名",name="Fixture别名")
scope作用域的类型:
function(函数,默认),class(类),mode(模块),package/session(会话)
作用域 | ||
---|---|---|
function | 函数前后生效、一个函数就是一条case | 重点 |
class | 类前、类后生效 | 较少 |
mode | 模块前后生效 | 较少 |
package/session | 会话前后生效 | 重点 |
params:
数据驱动、参数化。
autouse:
默认为False**(不生效),修改为True则(全局生效)**。单个case生效,将函数名称,填写在对应的case的位置参数即可。
ids:
配合params使用。
name:
给函数取别名,原函数名称失效。
Scope作用域
Fixture_demo_0(函数):
案例:将execute_sql在test_01_useradd用例进行前后执行
import pytest@pytest.fixture(scope="function")
def execute_sql():print("语句查询:select * from stu")yieldprint("sql查询完毕,断开连接")class Test_Wx_Api:def test_01_useradd(self, execute_sql):print("case1:添加用户")def test_02_del(self):print("case2:删除用户")def test_03_login(self):print("case3:登陆用户")
运行结果:
test_api.py::Test_Wx_Api::test_01_useradd 语句查询:select * from stu
case1:添加用户
PASSEDsql查询完毕,断开连接test_api.py::Test_Wx_Api::test_02_del case2:删除用户
PASSED
test_api.py::Test_Wx_Api::test_03_login case3:登陆用户
PASSED
Fixture_demo_1(class级别):
案例:在一个模块py文件下,有多个class,只对某一个class前后进行调用
import pytest@pytest.fixture(scope="class")
def execute_sql():print("语句查询:select * from stu")yieldprint("sql查询完毕,断开连接")class Test_Wx_Api:def test_01_useradd(self):print("case1:添加用户")def test_02_del(self):print("case2:删除用户")def test_03_login(self):print("case3:登陆用户")@pytest.mark.usefixtures("execute_sql") #通过装饰器调用生效
class Test_Tb_Api:def test_Tb01_search(self):print("搜索商品")def test_Tb02_add(self):print("添加商品")
运行结果:
est_api.py::Test_Wx_Api::test_01_useradd case1:添加用户
PASSED
test_api.py::Test_Wx_Api::test_02_del case2:删除用户
PASSED
test_api.py::Test_Wx_Api::test_03_login case3:登陆用户
PASSED
test_api.py::Test_Tb_Api::test_Tb01_search 语句查询:select * from stu
搜索商品
PASSED
test_api.py::Test_Tb_Api::test_Tb02_add 添加商品
PASSEDsql查询完毕,断开连接
Fixture_demo_2(mode):
案例:在一个目录中,有多个模块文件,通过fixture固件进行所有模块的调用
在同级目录创建一个conftest.py,将写好的固件写入文件,运行即可
⚠️模块指的是一个文件夹下的多个子文件夹的py文件
import pytest@pytest.fixture(scope="module", autouse=True)
def execute_sql():print("语句查询:select * from stu")yieldprint("sql查询完毕,断开连接")
运行:
test_api.py::Test_Wx_Api::test_01_useradd 语句查询:select * from stu
case1:添加用户
PASSED
test_api.py::Test_Wx_Api::test_02_del case2:删除用户
PASSED
test_api.py::Test_Wx_Api::test_03_login case3:登陆用户
PASSEDsql查询完毕,断开连接test_api1.py::Test_Tb_Api::test_Tb01_search 语句查询:select * from stu
搜索商品
PASSED
test_api1.py::Test_Tb_Api::test_Tb02_add 添加商品
PASSEDsql查询完毕,断开连接
Fixture_demo_3(package/session):
案例:session是夸模块并且是多个用例的时候,跳用一次fixture
在同级目录创建一个conftest.py,将写好的固件写入文件,运行即可
import pytest@pytest.fixture(scope="session", autouse=True)
def execute_sql():print("语句查询:select * from stu")yieldprint("sql查询完毕,断开连接")
运行:
test_api.py::Test_Wx_Api::test_01_useradd 语句查询:select * from stu
case1:添加用户
PASSED
test_api.py::Test_Wx_Api::test_02_del case2:删除用户
PASSED
test_api.py::Test_Wx_Api::test_03_login case3:登陆用户
PASSED
test_api1.py::Test_Tb_Api::test_Tb01_search 搜索商品
PASSED
test_api1.py::Test_Tb_Api::test_Tb02_add 添加商品
PASSEDsql查询完毕,断开连接
conftest文件
- conftest.py专门用于存放固件fixtue的配置文件,名称是固定的,不能更改。
- 在conftest.py文件中的fixtue在调用时都不需要导包。
- conftest.py文件可以有多个,并且多个conftest.py文件的多个fixture之间没有冲突。
- 模块级别和session模块一般都是自动执行。
params数据驱动
在同级目录创建一个conftest.py,将写好的固件写入文件,通过run.py去执行case
⚠️如下代码不是全局生效,是指定了对应case的固定组件进行参数化
⚠️全局生效则autouse=True则全局生效
import pytest# 数据驱动的读取数据
def read_date():# return ["张三", "李四", "王五", "赵六"]return ["zs", "ls", "ww", "zl"]# autouse=True则全局生效
@pytest.fixture(scope="function", params=read_date())
def execute_sql(request):print("语句查询:select * from stu")yield request.paramprint("sql查询完毕,断开连接")
____________________________________________________________________________________________
import pytestclass Test_Wx_Api:def test_01_useradd(self, execute_sql):print("case1:添加用户" + execute_sql)def test_02_del(self):print("case2:删除用户")
运行结果:
test_api.py::Test_Wx_Api::test_01_useradd[zs] 语句查询:select * from stu
case1:添加用户zs
PASSEDsql查询完毕,断开连接test_api.py::Test_Wx_Api::test_01_useradd[ls] 语句查询:select * from stu
case1:添加用户ls
PASSEDsql查询完毕,断开连接test_api.py::Test_Wx_Api::test_01_useradd[ww] 语句查询:select * from stu
case1:添加用户ww
PASSEDsql查询完毕,断开连接test_api.py::Test_Wx_Api::test_01_useradd[zl] 语句查询:select * from stu
case1:添加用户zl
PASSEDsql查询完毕,断开连接test_api.py::Test_Wx_Api::test_02_del case2:删除用户
PASSED
test_api.py::Test_Wx_Api::test_03_login case3:登陆用户
PASSED
test_api1.py::Test_Tb_Api::test_Tb01_search 搜索商品
PASSED
test_api1.py::Test_Tb_Api::test_Tb02_add 添加商品
PASSED
ids_参数别名
不能单独使用,配合params使用
import pytest# 数据驱动的读取数据
def read_date():# return ["张三", "李四", "王五", "赵六"]return ["zs", "ls", "ww", "zl"]# autouse=True则全局生效
@pytest.fixture(scope="function", params=read_date(),ids=["z3", "l4", "w5", "z6"])
def execute_sql(request):print("语句查询:select * from stu")yield request.paramprint("sql查询完毕,断开连接")
name_fixture别名
作用:给fixture起别名,原来名称失效,只能使用别名进行调用
import pytest# 数据驱动的读取数据
def read_date():# return ["张三", "李四", "王五", "赵六"]return ["zs", "ls", "ww", "zl"]# autouse=True则全局生效
@pytest.fixture(scope="function", params=read_date(),ids=["z3", "l4", "w5", "z6"],name="SQL")def execute_sql(request):print("语句查询:select * from stu")yield request.paramprint("sql查询完毕,断开连接")
pytest查找执行顺序
- 查询当前目录下的conftest.py
- 查询当前目录下的pytest.ini文件,找到测试用例
- 查询用例目录下的conftest.py文件
- 查询用例中是否有setup,teardown,setup_class,teardown_class
- 执行测试用例。
pytest的基础路径设置
[pytest] #声明这是pytest的配置文件
addopts = -vs #指定默认参数,多个空格分割
python_files = test_*.py #指定测试模块的默认读取规则
python_classes = Test* #指定测试class类的默认读取规则
python_functions = test* #指定测试用例的默认读取规则
base_url = www.baidu.com #默认路径
markers = smoke user #读取带有标记的用例,前提是测试用例需要打标记@pytest.mark.xxx
pytest断言
assert
Allure报告
brew软件包管理器获取:
1、下载allure
#mac
$ brew search allure
$ brew install allure
$ allure --version
2.17.2
2、修改pytest.ini增加allure默认选项
2.1、生成json格式的临时报告
[pytest]
addopts = -vs --alluredir=./tmp --clean-alluredir
python_files = test_*.py
python_classes = Test*
python_functions = test*
markers = smoke user
–alluredir=./tmp 生成的报告的路径
–clean-alluredir 清除报告
2.2、生成一个完美的allure报告
import pytest, os, timeif __name__ == '__main__':pytest.main()
time.sleep(3)
times = time.strftime("%Y_%m_%d_%H_%M_%S", time.localtime())
os.system("allure generate ./tmp -o ./report_" + times + "--clean")
tar包获取(获取):
https://github.com/allure-framework/allure2/releases
tar.gz包
建议,获取tar包方便修改配置文件,指定allure报告。
$ wget https://github.com/allure-framework/allure2/releases/download/2.17.3/allure-2.17.3.tgz
$ vim ~/.bash_profile #allure变量
export PATH=/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin
export PATH=/Users/bytedance/Downloads/allure-2.17.3/bin:$PATH
export
$ source ~/.bash_profile
$ allure --version
2.17.3
⚠️如果是第一次是brew安装,后续指定allure报告需要替换成tar包,方便修改配置文件。
如果配置完毕,运行提示not found请重新关闭项目,重新打开即可。
PyTest_FixTure固件篇相关推荐
- 2018年7月27日每日安全快讯
漏洞预警 [漏洞预警]大量迈普安全网关ISG1000仍存在任意文件下载&&敏感信息泄露漏洞 https://nosec.org/home/detail/1713.html [漏洞预警] ...
- 基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第三篇)故障保护及问题诊断
基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第三篇)故障保护及问题诊断 PIX无法安装驱动 双击下载的px4_driver_installer ...
- 基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第四篇)飞行特性
基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第四篇)飞行特性 自动起飞 固定翼飞机可以自动发射多种类型的飞机.下面的说明将教你如何设置你的任务 ...
- 潘多拉固件设置ipv6_玩转PLEX 篇四:家用宽带连接IPV6的方法
玩转PLEX 篇四:家用宽带连接IPV6的方法 2020-05-07 15:32:19 21点赞 177收藏 21评论 你是AMD Yes党?还是intel和NVIDIA的忠实簇拥呢?最新一届#装机大 ...
- c语言调用固件库函数,用C++写单片机程序 STM32F103 + 自建固件库 + FreeRTOS 用gcc编译器和newlib(1篇)...
认识众多玩家高手/拆客/DIYer,查阅更多资源,一起学习技术知识 您需要 登录 才可以下载或查看,没有帐号?立即注册 x 本帖最后由 freemancn 于 2019-8-17 18:46 编辑 作 ...
- prusai3打印机使用教程_prusa i3 3D打印机固件Marlin配置初学者篇
前边的教程已经给大家介绍了如何组装Prusa i3打印机,不知道各位小伙伴有没有get到,既然打印机已经有了躯体,那么就需要一个灵魂.这个灵魂就是Marlin固件,记得刚开始了解3D打印机的时候,经常 ...
- 基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第二篇)软硬件参数调试
基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第二篇)软硬件参数调试 本文内容大部分来自Kris,我们的K大,在VTOL领域的大牛,在此,非常感 ...
- 基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第一篇)安装调试
基于Ardupilot/PX4固件,APM/PIXhawk硬件的VTOL垂直起降固定翼软硬件参数调试(第一篇)安装调试 本文内容大部分来自Kris,我们的K大,在VTOL领域的大牛,在此,非常感谢K大 ...
- 实战篇---USB2.0内部存储器相关内容及固件配置程序
目录 1. USB的寄存器有哪些?大概的结构是怎么样的? 1)内部存储器 2)外部存储器 2. 通过KEIL软件去配置的信息有哪些? 1) CPU时钟 2)模式选择寄存器 3)终端FIFO设置寄存器 ...
最新文章
- 计算机网络crc校验实验报告,CRC校验实现-实验报告(附主要实现代码)
- 学习笔记(31):Python网络编程并发编程-定时器
- 浅谈 trie树 及其实现
- 聊聊excel生成图片的几种方式
- 十二、K8s job cronjob相关操作
- CrossApp V1.0.2 正式推出,优化众多内容/更加稳定
- 关于电的计算机公式,电功率计算公式大全
- 戴尔G5 5590重装系统
- 使用Cadence组件进行Pspice仿真
- crout分解计算例题_吃透高考数学17个必考题型,基础再差也能考130!(内附解题技巧+例题解析)...
- 一键下载优美图库图片(附源码了哦)
- 投注测试软件,手机投注软件怎么进行性能测试
- USER_TAB_COLS,USER_TAB_COLUMNS,ALL_TAB_COLS,ALL_TAB_COLUMNS获取数据库元素的区别
- java8:新特性及Lamber表达式语法及四大函数接口
- 预约上门App平台的接单方式
- 序列(sequence)(Python入门十二)
- [ECE]模拟试题-4
- 【前端面试宝典】计算机网络篇(1)
- ftp服务器上文件移动失败(ftpClient.rename返回false)
- Win10突然就不能连接网络了怎么办
热门文章
- vue+node+mysql项目开发(包括部署到服务器)
- Swagger使用教程及Swagger增强工具knife4j
- 什么是土壤水分传感器
- java中finally什么时候执行_finally是否执行?finally何时执行?
- Android AppLink使用经历
- 解决 VS 出现错误 MSB3644 找不到 .NETFramework,Version=v4.6.1 的引用程序集。要解决此问题,请为此框架版本安装......
- python如何打开一个xlsx用列表的格式写入数据
- Springboot毕设项目老年人营养膳食咨询平台0h520(java+VUE+Mybatis+Maven+Mysql)
- 华南农业大学—中食安泓营养与健康研究院正式成立
- Windows XP的cdkey的更换方法