IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> Python知识库 -> PyTest_FixTure固件篇 -> 正文阅读

[Python知识库]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")
    yield
    print("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")
    yield
    print("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")
    yield
    print("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")
    yield
    print("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.param
    print("sql查询完毕,断开连接")
____________________________________________________________________________________________
import pytest


class 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.param
    print("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.param
    print("sql查询完毕,断开连接")

pytest查找执行顺序

  1. 查询当前目录下的conftest.py
  2. 查询当前目录下的pytest.ini文件,找到测试用例
  3. 查询用例目录下的conftest.py文件
  4. 查询用例中是否有setup,teardown,setup_class,teardown_class
  5. 执行测试用例。

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, time

if __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请重新关闭项目,重新打开即可。

  Python知识库 最新文章
Python中String模块
【Python】 14-CVS文件操作
python的panda库读写文件
使用Nordic的nrf52840实现蓝牙DFU过程
【Python学习记录】numpy数组用法整理
Python学习笔记
python字符串和列表
python如何从txt文件中解析出有效的数据
Python编程从入门到实践自学/3.1-3.2
python变量
上一篇文章      下一篇文章      查看所有文章
加:2022-04-07 22:39:24  更:2022-04-07 22:39:46 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:13:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码