当前位置: 首页 > article >正文

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)

结果示例:

2、pytest结合数据驱动-excel

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

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

工程目录结构:

data目录:存放excel数据文件

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

1

2

3

def my_add(x, y):

    result = + 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 = + 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 = + 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)

 

 感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。


http://www.kler.cn/a/370591.html

相关文章:

  • 计算机网络 (50)两类密码体制
  • 软考高级5个资格、中级常考4个资格简介及难易程度排序
  • CSS3 3D 转换介绍
  • vue3学习三
  • 【服务治理中间件】consul介绍和基本原理
  • Redis--21--大Key问题解决方案
  • Python——发送HTTP请求
  • docker 安装 PostgreSQL
  • 《国产AI大模型应用报告》发布!《豆包》上半年下载量超3309万,更多机会有待在应用层被发掘(附PDF)
  • 前端经典【面试题】持续更新HTML、CSS、JS、VUE、FLUTTER、性能优化等
  • .gitattributes文件是如何影响git操作的
  • react18中引入redux及react-redux来管理公共数据仓库
  • 什么是高存储服务器,有哪些优势,如何选择?
  • 单元测试详解
  • 语音语言模型最新综述! 关于GPT-4o背后技术的尝试
  • 安卓两个活动之间的消息传输(收到消息后基于应答)
  • 企业财务管理:从每刻到金蝶云星空的报销单集成案例
  • 实验03分支7-13 算术入门之加减乘除
  • 【ACM出版,EI稳定检索,九大高校联合举办, IEEE Fellow支持】2024年计算机视觉与艺术研讨会(CVA 2024)
  • HarmonyOS“一次开发,多端部署”
  • 即插即用篇 | YOLOv8 引入 空间和通道协同注意力模块 SCSA
  • 【计算机网络一】网络学习前置知识
  • 十四:Python学习笔记--基础知识完结(12)写几个案例 打包exe出来 齐活
  • 1.机器人抓取与操作介绍-深蓝学院
  • softmax回归简洁实现
  • Flutter Row组件实战案例