Pytest自动化测试数据驱动yaml/excel/csv/json

数据驱动

数据的改变从而驱动自动化测试用例的执行,最终引起测试结果的改变。简单说就是参数化的应用。

测试驱动在自动化测试中的应用场景:

  • 测试步骤的数据驱动;
  • 测试数据的数据驱动;
  • 配置的数据驱动;

1、pytest结合数据驱动-yaml

实现读yaml文件,先创建env.yml文件配置测试数据

工程目录结构:
  • data目录:存放yaml文件

1

2

3

4

-

  dev: 127.0.0.1

  #dev: 127.0.0.2

  #prod: 127.0.0.3

  • testcase目录:存放测试用例文件

1

2

3

4

5

6

7

8

9

10

11

12

13

import pytest

import yaml

class TestYaml:

    @pytest.mark.parametrize("env", yaml.safe_load(open("./env.yml")))

    def test_yaml(self, env):

        if "test" in env:

            print("这是测试环境")

            # print(env)

            print("测试环境的ip是:", env["test"])

        elif "dev" in env:

            print("这是开发文件")

            print("开发环境的ip是:", env["dev"])

            # print(env)

结果示例:

​现在我也找了很多测试的朋友,做了一个分享技术的交流群,共享了很多我们收集的技术文档和视频教程。
如果你不想再体验自学时找不到资源,没人解答问题,坚持几天便放弃的感受
可以加入我们一起交流。而且还有很多在自动化,性能,安全,测试开发等等方面有一定建树的技术大牛
分享他们的经验,还会分享很多直播讲座和技术沙龙
可以免费学习!划重点!开源的!!!
qq群号:485187702【暗号:csdn11】

2、pytest结合数据驱动-excel

常用的读取方式有:xlrd、xlwings、pandas、openpyxl

以读excel文件,实现A+B=C并断言为例~

工程目录结构:

data目录:存放excel数据文件

  • func目录:存放被测函数文件

1

2

3

def my_add(x, y):

    result = x + y

    return result

  • testcase目录:存放测试用例文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

import openpyxl

import pytest

from test_pytest.read_excel.func.operation import my_add

def test_get_excel():

    """

    解析excel数据

    :return: [[1,1,2],[3,6,9],[100,200,300]]

    """

    book = openpyxl.load_workbook('../data/param.xlsx')

    sheet = book.active

    cells = sheet["A1":"C3"]

    print(cells)

    values = []

    for row in sheet:

        data = []

        for cell in row:

            data.append(cell.value)

        values.append(data)

    print(values)

    return values

class TestWithExcel:

    @pytest.mark.parametrize('x,y,expected', test_get_excel())

    def test_add(self, x, y, expected):

        assert my_add(int(x), int(y)) == int(expected)

3、pyetst结合数据驱动-csv

csv:逗号文件,以逗号分隔的string文件

读取csv数据:
  • 内置函数open()
  • 内置模块csv
  • 方法:csv.reader(iterable)
  • 参数:iterable,文件或列表对象
  • 返回:迭代器,遍历迭代器,每次会返回一行数据

以读csv文件,实现A+B=C并断言为例~

工程目录结构:

data目录:存放csv数据文件

  • func目录:存放被测函数文件

1

2

3

def my_add(x, y):

    result = x + y

    return result

  • testcase目录:存放测试用例文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

import csv

import pytest

from test_pytest.read_csv.func.operation import my_add

def test_get_csv():

    """

    解析csv文件

    :return:

    """

    with open('../data/params.csv') as file:

        raw = csv.reader(file)

        data = []

        for line in raw:

            data.append(line)

    print(data)

    return data

class TestWithCsv:

    @pytest.mark.parametrize('x,y,expected', test_get_csv())

    def test_add(self, x, y, expected):

        assert my_add(int(x), int(y)) == int(expected)

4、pytest结合数据驱动-json

json:js对象,是一种轻量级的数据交换格式。

json结构:
  • 对象{"key":value}
  • 数组[value1,value2...]

查看json文件:
  • 1.pycharm
  • 2.txt记事本

读取json文件:
  • 内置函数open()
  • 内置库json
  • 方法 json.loads() json.dumps()

以读json文件,实现A+B=C并断言为例~

工程目录结构:

data目录:存放json数据文件

  • func目录:存放被测函数文件

1

2

3

def my_add(x, y):

    result = x + y

    return result

  • testcase目录:存放测试用例文件

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

import json

import pytest

from test_pytest.read_json.func.operation import my_add

def test_get_json():

    """

    解析json数据

    :return: [[1,1,2],[3,6,9],[100,200,300]]

    """

    with open('../data/params.json', 'r') as file:

        data = json.loads(file.read())

        print(list(data.values()))

        return list(data.values())

class TestWithJson:

    @pytest.mark.parametrize('x,y,expected', test_get_json())

    def test_add(self, x, y, expected):

        assert my_add(int(x), int(y)) == int(expected)

最后感谢每一个认真阅读我文章的人,看着粉丝一路的上涨和关注,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走! 希望能帮助到你!【100%无套路免费领取】

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/200446.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux gtest单元测试

1 安装git sudo apt-get install git2 下载googletest git clone https://github.com/google/googletest.git3 安装googletest 注意1: 如果在 make 过程中报错,可在 CMakeLists.txt 中增加如下行,再执行下面的命令: SET(CMAKE_CXX_FLAGS “-std=c++11”) 注意2: CMakeLists…

Django回顾6

目录 一.Session 1.什么是Session 2.Django中Session相关方法 3.Django中的Session配置 二.中间件 1.什么是中间件 中间件的定义 2.中间件有什么用 3.自定义中间件 process_request和process_reponse (1)导入 (2)自定义…

优化您的Mac体验——System Dashboard Pro for Mac(系统仪表板)

作为Mac用户,我们都希望能够拥有一个高效、流畅的电脑体验。然而,在长时间使用后,我们的Mac可能会变得越来越慢,导致我们的工作效率下降。这时候,System Dashboard Pro for Mac(系统仪表板)就可以派上用场了。它是一款…

创建腾讯云存储桶---上传图片--使用cos-sdk完成上传

创建腾讯云存储桶—上传图片 注册腾讯云账号https://cloud.tencent.com/login 登录成功,选择右边的控制台 点击云产品,选择对象存储 创建存储桶 填写名称,选择公有读,私有写一直下一步,到创建 选择安全管理&#…

为什么C语言用int *a 来声明指针变量,而不是int a声明?

为什么C语言用int *a 来声明指针变量,而不是int &a声明? 在开始前我有一些资料,是我根据自己从业十年经验,熬夜搞了几个通宵,精心整理了一份「C语言从专业入门到高级教程工具包」,点个关注&#xff0c…

HTTP请求

前言 HTTP是应用层的一个协议。实际我们访问一个网页,都会像该网页的服务器发送HTTP请求,服务器解析HTTP请求,返回HTTP响应。如此就是我们获取资源或者上传资源的原理 HTTP请求报头格式 图片来自网络 HTTP请求报头总体有四部分:…

SR锁存器—>带EN的SR锁存器—>D锁存器—>边沿触发式D触发器—>寄存器

其实选择与非门当做构成SR锁存器的基本逻辑电路是有漏洞的,所以才导致了后续的都为低电平的时候,Q和非Q都是亮起的。但是我们设计的初衷是:Q和非Q是互斥的,是不能同时亮起的,且为了达到这一点,要使得其中两…

leetCode 47. 全排列 II + 回溯算法 + 图解 + 笔记

给定一个可包含重复数字的序列 nums ,按任意顺序 返回所有不重复的全排列 示例 1: 输入:nums [1,1,2] 输出: [[1,1,2],[1,2,1],[2,1,1]] 示例 2: 输入:nums [1,2,3] 输出:[[1,2,3],[1,3,2…

mysql数据库的字符集和字符校对规则

所谓字符集就是字符的编码,是怎么保存的,例如UTF-8。 所谓字符校对规则是指按照什么规则来比较字符,打个简单的比方,比较字符A和a的时候,忽略大小写,这就是一条规则。 详情可以查询mysql官网:h…

2024年天津财经大学珠江学院专升本专业课《管理学原理》考试大纲

天津财经大学珠江学院2024年高职升本科专业课考试《管理学原理》考试大纲 一、本大纲系天津财经大学珠江学院2024年高职升本科《管理学原理》课程考试大纲。所列考试范围出自徐碧琳主编的教材《管理学原理(第二版)》,机械工业出版社&#xff…

云服务器部署过程(从零开始)

首先介绍如何在 Linux 上复制粘贴 CtrlInsert,或者CtrlshiftC复制文本,使用ShiftInsert或CtrlshiftV 在终端中粘贴文本。 搭建java部署环境 要搭建java部署环境,那么首先就需要在Linux上安装jdk,MySQL等必需工具,接…

vscode git管理

vscode添加了git管理 1、如下按钮,可以看到本次的修改部分 2、安装git history 就可以查看每次的不同部分了

一句话搞定R语言画图|生存曲线、密度、山脊等130+图形任你选

大家好,今天我们分享一个神奇的网站,提供各种可视化图片的代码和详解,生信小博士公众号内回复冒号后面的关键词领取网站地址:神奇网站 1.一R代码添加显著性 1#1----set.seed(123)library(ggplot2)library(ggstatsplot)ggbetweens…

全网最新最全面的Appium自动化:Appium常用操作之设备操作

设备基本操作 前置条件: 示例代码: from appium import webdriver # 导入appium 驱动包 # 1、定义一个DesiredCapabilities配置的字典 des {automationName:appium,platformName:Android, # 平台的名称,iOS,Android,FirefoxOSplatformV…

软件测试人员必备的60个测试工具清单!

据统计,中国软件外包市场的潜力和机会已远远超过软件王国印度,不过由于软件人才的严重不足致使我国软件发展遭遇“瓶颈”。国家为了大力培养软件人才,不断采取积极有效的措施。我国对软件测试人才的需求数量还将持续增加,因此软件…

随时随地查看远程试验数据与记录——IPEhub2与IPEmotion APP

一 背景 在工况恶劣、空间狭小的试验场景或工程机械领域中,不但试验人员在试验环境中对自身安全没有保障,而且试验过程也会受到影响,如高温高压测试、工程机械液压系统测试等。对此,结合IPEhub2与IPEmotion APP,既可保…

【Linux】mkdir 命令使用

mkdir命令 mkdir(英文全拼:make directory)命令用于创建目录。 著者 作者:David MacKenzie。 mkdir命令 -Linux手册页 语法 mkdir [参数] [文件名] 命令选项及作用 执行令 : mkdir --help 执行命令结果 参数 …

【Java Web学习笔记】5 - XML

项目代码 https://github.com/yinhai1114/JavaWeb_LearningCode/tree/main/xml 零、在线文档 XML系列教程 一、XML引出 1.为什么需要XML 1.需求1 :两个程序间进行数据通信? 2.需求2:给一台服务器,做-一个配置文件,当服务器程序启动时,去…

vue3 setup语法糖 多条件搜索(带时间范围)

目录 前言: setup介绍: setup用法: 介绍: 前言: 不管哪个后台管理中都会用到对条件搜索带有时间范围的也不少见接下来就跟着我步入vue的多条件搜索(带时间范围) 在 Vue 3 中,你…

coding创建远程分支。并拉取远程新分支+推送代码

进入coding ----项目----代码仓库---点击 下拉之后查看全部----创建分支 创建分支之后执行下面命令 git branch -a // 查看所有分支 这个时候发现自己创建的分支没有显示这是因为自己在远程创建了分支但是本地还没有分支 执行 git fetch命令 用于从远程仓库获取最新的提交…