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

作者:吱吱菌啦啦 时间:2023-06-18 14:19:47 

数据驱动

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

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

  • 测试步骤的数据驱动;

  • 测试数据的数据驱动;

  • 配置的数据驱动;

1、pytest结合数据驱动-yaml

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

工程目录结构:

  • data目录:存放yaml文件

-
 dev: 127.0.0.1
 #dev: 127.0.0.2
 #prod: 127.0.0.3
  • testcase目录:存放测试用例文件

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)

结果示例:

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

2、pytest结合数据驱动-excel

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

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

工程目录结构:

data目录:存放excel数据文件

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

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

def my_add(x, y):
   result = x + y
   return result
  • testcase目录:存放测试用例文件

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数据文件

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

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

def my_add(x, y):
   result = x + y
   return result
  • testcase目录:存放测试用例文件

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数据文件

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

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

def my_add(x, y):
   result = x + y
   return result
  • testcase目录:存放测试用例文件

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)

来源:https://www.jianshu.com/p/dd11812b2ba6

标签:pytest,测试数据驱动,yaml,excel,csv,json
0
投稿

猜你喜欢

  • 一文读懂python Scrapy爬虫框架

    2021-01-31 10:08:31
  • JS清空上传控件input(type="file")的值的代码第1/2页

    2023-08-13 07:22:28
  • Go 加密解密算法小结

    2024-04-26 17:29:00
  • python中with的具体用法

    2021-12-08 17:41:16
  • 对python 数据处理中的LabelEncoder 和 OneHotEncoder详解

    2022-08-05 06:00:23
  • pandas 缺失值与空值处理的实现方法

    2023-08-02 03:21:25
  • 使用express来代理服务的方法

    2024-05-03 15:56:50
  • 如何用Cookie进行登录验证?

    2010-06-12 12:34:00
  • python使用插值法画出平滑曲线

    2021-07-14 03:59:02
  • SQL server高级应用 收藏版

    2012-10-07 11:04:06
  • python爬虫 正则表达式解析

    2022-07-16 18:24:01
  • 如何用mysql自带的定时器定时执行sql(每天0点执行与间隔分/时执行)

    2024-01-16 01:58:31
  • 简单了解python装饰器原理及使用方法

    2023-11-02 11:55:02
  • python的三目运算符和not in运算符使用示例

    2021-07-18 23:36:35
  • 用virtualenv建立多个Python独立虚拟开发环境

    2023-10-28 06:24:07
  • 通过不同的CSS设计字体大小来提高用户体验

    2008-12-10 19:17:00
  • Python 批量合并多个txt文件的实例讲解

    2022-09-18 07:39:47
  • Python基于SMTP发送邮件的方法

    2021-07-17 23:42:46
  • Python tkinter模块中类继承的三种方式分析

    2023-07-19 22:00:48
  • Selenium 模拟浏览器动态加载页面的实现方法

    2023-06-04 11:06:54
  • asp之家 网络编程 m.aspxhome.com