wordpress 炫酷博客,青岛seo网站关键词优化,优化系统功能,做暖暖在线获取网站之前有说过#xff0c;通过pytest测试框架标记参数化功能可以实现数据驱动测试。数据驱动测试使用的文件主要有以下类型#xff1a;
txt 文件 csv 文件excel 文件json 文件yaml 文件....
本文主要讲的就是以上几种文件类型的读取和使用
一.txt 文件读取使用 首先创建一个 … 之前有说过通过pytest测试框架标记参数化功能可以实现数据驱动测试。数据驱动测试使用的文件主要有以下类型
txt 文件 csv 文件excel 文件json 文件yaml 文件....
本文主要讲的就是以上几种文件类型的读取和使用
一.txt 文件读取使用 首先创建一个 txt 文件文件内容为 张三,男,2024-09-10 李四,女,2022-09-10 王五,男,2090-09-10 然后读取文件内容
def get_txt_data():with open(rD:\python_project\API_Auto\API3\data\txt_data, encodingutf-8) as file:content file.readlines()# print(content)# 去掉数据后面的换行符list_data []list_data1 []for i in content:list_data.append(i.strip())# 将数据分割for i in list_data:list_data1.append(i.split(,))return list_data1这样就得到了 符合参数化要求的参数对读取的内容进行使用
pytest.mark.parametrize((name, gender, data), get_txt_data())
def test_txt_func(name, gender, data):print(f输入名字{name})print(f输入性别 {gender})print(f输入日期{data})输出为
D:\python_project\API_Auto\API3\venv\Scripts\python.exe D:\python_project\API_Auto\API3\main.py test session starts
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- D:\python_project\API_Auto\API3\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API3
configfile: pytest.ini
plugins: allure-pytest-2.13.5, result-log-1.2.2
collecting ... [[张三, 18.0, 185.0, 10000000.0], [李四, 30.0, 178.0, 2000.0], [王五, 40.0, 169.0, 43323.0]]
collected 3 itemstestcases/test_ddt.py::test_txt_func[张三-男-2024-09-10] 输入名字张三
输入性别 男
输入日期2024-09-10
PASSED
testcases/test_ddt.py::test_txt_func[李四-女-2022-09-10] 输入名字李四
输入性别 女
输入日期2022-09-10
PASSED
testcases/test_ddt.py::test_txt_func[王五-男-2090-09-10] 输入名字王五
输入性别 男
输入日期2090-09-10
PASSED 3 passed in 0.06s
Report successfully generated to .\reportProcess finished with exit code 0二.csv 文件读取使用
首先创建一个csv文件内容为 1,2,3
1,3,3
2,2,4 然后读取文件内容
import csvdef get_csv_data():list1 []f csv.reader(open(rD:\python_project\API_Auto\API3\data\x_y_z.csv, encodingutf-8))for i in f:# list1.append(i.strip())# [int(element) for element in i], 列表推导式它的作用是对 i 中的每个元素进行遍历并将每个元素从字符串str转换为整数inta [int(element) for element in i]list1.append(a)return list1然后使用读取到的数据
pytest.mark.parametrize((x, y, z), get_csv_data()
)
def test_csv_func(x, y, z):assert x * y z输出为
D:\python_project\API_Auto\API3\venv\Scripts\python.exe D:\python_project\API_Auto\API3\main.py test session starts
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- D:\python_project\API_Auto\API3\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API3
configfile: pytest.ini
plugins: allure-pytest-2.13.5, result-log-1.2.2
collecting ... [[张三, 18.0, 185.0, 10000000.0], [李四, 30.0, 178.0, 2000.0], [王五, 40.0, 169.0, 43323.0]]
collected 3 itemstestcases/test_ddt.py::test_csv_func[1-2-3] FAILED
testcases/test_ddt.py::test_csv_func[1-3-3] PASSED
testcases/test_ddt.py::test_csv_func[2-2-4] PASSED FAILURES
____________________________ test_csv_func[1-2-3] _____________________________x 1, y 2, z 3pytest.mark.parametrize((x, y, z), get_csv_data())def test_csv_func(x, y, z):assert x * y z
E assert (1 * 2) 3testcases\test_ddt.py:21: AssertionError
----------------------------- Captured log setup ------------------------------
WARNING pytest_result_log:plugin.py:122 ---------------Start: testcases/test_ddt.py::test_csv_func[1-2-3]---------------
---------------------------- Captured log teardown ----------------------------
WARNING pytest_result_log:plugin.py:128 ----------------End: testcases/test_ddt.py::test_csv_func[1-2-3]----------------short test summary info
FAILED testcases/test_ddt.py::test_csv_func[1-2-3] - assert (1 * 2) 31 failed, 2 passed in 0.13s
Report successfully generated to .\reportProcess finished with exit code 0三.excel 文件读取使用
首先创建一个excel文件文件内容为 然后在读取Excel数据内容前要针对不同版本使用不同的第三方库
xls office 2003版本 安装xlrd第三库必须指定版本pip install xlrd1.2.0 xlsx office 2016版本 安装openpyxl第三方库默认安装最新的版本库即可pip install openpyxl
安装完后读取 数据
import xlrd# # 读取excel 文件数据获取xls文件对象
# xls xlrd.open_workbook(rD:\python_project\API_Auto\API3\data\test.xlsx)
#
# # 获取excel 中的sheet 表0代表第一张 表的索引、
# sheet xls.sheet_by_index(0)
#
# # 输出数据列
# print(sheet.ncols)
#
# # 输出数据行
# print(sheet.nrows)
#
# # 读取具体某一行内容,0代表第一行数据索引
# print(sheet.row_values(1))
#def get_excel_data(path):list_excel []xls xlrd.open_workbook(path)# 获取excel 中的sheet 表0代表第一张 表的索引、sheet xls.sheet_by_index(0)for i in range(sheet.nrows):list_excel.append(sheet.row_values(i))# 删除表头数据list_excel.pop(0)# print(list_excel)return list_excel使用读取到的数据
pytest.mark.parametrize((name, age, height, money), get_excel_data(rD:\python_project\API_Auto\API3\data\test.xlsx)
)
def test_excel_func(name, age, height, money):print(fname是{name},age是{age},height是{height},money是{money})输出结果为
D:\python_project\API_Auto\API3\venv\Scripts\python.exe D:\python_project\API_Auto\API3\main.py test session starts
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- D:\python_project\API_Auto\API3\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API3
configfile: pytest.ini
plugins: allure-pytest-2.13.5, result-log-1.2.2
collecting ... collected 3 itemstestcases/test_ddt.py::test_excel_func[张三-18.0-185.0-10000000.0] name是张三,age是18.0,height是185.0,money是10000000.0
PASSED
testcases/test_ddt.py::test_excel_func[李四-30.0-178.0-2000.0] name是李四,age是30.0,height是178.0,money是2000.0
PASSED
testcases/test_ddt.py::test_excel_func[王五-40.0-169.0-43323.0] name是王五,age是40.0,height是169.0,money是43323.0
PASSED 3 passed in 0.09s
Report successfully generated to .\reportProcess finished with exit code 0四.json 文件的读取使用
首先创建一个json文件内容为 [[1,2,3],[4,2,6],[7,8,9]
] 然后读取文件内容
def get_json_data(path):with open(path, encodingutf-8) as file:content file.read()# print(eval(content))# print(type(eval(content)))# eval() : 去掉最外层的引号return eval(content)对读取到的内容进行使用 pytest.mark.parametrize((x, y, z), get_json_data(rD:\python_project\API_Auto\API3\data\json.json)
)
def test_json_func(x, y, z):assert x y z输出结果为
D:\python_project\API_Auto\API3\venv\Scripts\python.exe D:\python_project\API_Auto\API3\main.py test session starts
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- D:\python_project\API_Auto\API3\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API3
configfile: pytest.ini
plugins: allure-pytest-2.13.5, result-log-1.2.2
collecting ... collected 3 itemstestcases/test_ddt.py::test_json_func[1-2-3] PASSED
testcases/test_ddt.py::test_json_func[4-2-6] PASSED
testcases/test_ddt.py::test_json_func[7-8-9] FAILED FAILURES
____________________________ test_json_func[7-8-9] ____________________________x 7, y 8, z 9pytest.mark.parametrize((x, y, z), get_json_data(rD:\python_project\API_Auto\API3\data\json.json))def test_json_func(x, y, z):assert x y z
E assert (7 8) 9testcases\test_ddt.py:35: AssertionError
----------------------------- Captured log setup ------------------------------
WARNING pytest_result_log:plugin.py:122 --------------Start: testcases/test_ddt.py::test_json_func[7-8-9]---------------
---------------------------- Captured log teardown ----------------------------
WARNING pytest_result_log:plugin.py:128 ---------------End: testcases/test_ddt.py::test_json_func[7-8-9]----------------short test summary info
FAILED testcases/test_ddt.py::test_json_func[7-8-9] - assert (7 8) 91 failed, 2 passed in 0.14s
Report successfully generated to .\reportProcess finished with exit code 0五.yaml 文件读取使用
1.yaml数据读写 序列化内存中数据转化为文件 反序列化将文件转化为内存数据 需要操作yaml文件安装第三方库 pip install pyyaml 2.序列化 将yaml 数据写入文件中 YAML 是一个可读性 高用来达标数据序列化的格式基本语法格式1.区分大小写2.使用缩进表示层级 关系3.缩进不能 使用 tab 建只能使用空格4.缩进的空格数不重要只要相同 层级的元素左对齐即可5.可以使用 注释符号 #yaml 序列化 常用数据类型1.对象python中的 字段键值对2.数组python 中的列表 3.纯量单个的、不可再分值4.布尔值5.空值YAML 数据读写序列化将内存 中数据转化为文件反序列化 将文件转化为内存数据需要安装第三方库pip install pyyaml
data {数字: [1, 2, 3, 4, -1],字符串: [a, #, c],空值: None,布尔值: [True, False],元组: (1, 2, 3)
}import yaml# 将 python 数据类型转换为yaml 格式
yaml_data yaml.safe_dump(data, # 要转化的数据内容allow_unicodeTrue, # 允许unicode 字符中文原样显示sort_keysFalse # 不进行排序原样输出
)# 序列化 将yaml 数据写入文件中
f open(rD:\python_project\API_Auto\API3\data\yaml.yaml, w, encodingutf-8)
f.write(yaml_data)
f.close()3.反序列化 读取yaml 文件中的数据
# 反序列化 读取yaml 文件中的数据
f open(rD:\python_project\API_Auto\API3\data\yaml.yaml, r, encodingutf-8)
s f.read()
data_yaml yaml.safe_load(s)
print(data_yaml)
4.写入一个大列表里面嵌套小列表
# 写入一个大列表里面嵌套小列表list1 [[张三, 18.0, 185.0, 10000000.0], [李四, 30.0, 178.0, 2000.0], [王五, 40.0, 169.0, 43323.0]]yaml_data yaml.safe_dump(list1, # 要转化的数据内容allow_unicodeTrue, # 允许unicode 字符中文原样显示sort_keysFalse # 不进行排序原样输出
)# 序列化 将yaml 数据写入文件中
f open(rD:\python_project\API_Auto\API3\data\yaml1.yaml, w, encodingutf-8)
f.write(yaml_data)
f.close()
完整代码为
data {数字: [1, 2, 3, 4, -1],字符串: [a, #, c],空值: None,布尔值: [True, False],元组: (1, 2, 3)
}import yamldef get_yaml_data():# 将 python 数据类型转换为yaml 格式yaml_data yaml.safe_dump(data, # 要转化的数据内容allow_unicodeTrue, # 允许unicode 字符中文原样显示sort_keysFalse # 不进行排序原样输出)# 序列化 将yaml 数据写入文件中f open(rD:\python_project\API_Auto\API3\data\yaml.yaml, w, encodingutf-8)f.write(yaml_data)f.close()# 反序列化 读取yaml 文件中的数据f open(rD:\python_project\API_Auto\API3\data\yaml.yaml, r, encodingutf-8)s f.read()data_yaml yaml.safe_load(s)print(data_yaml)# 写入一个大列表里面嵌套小列表list1 [[张三, 18.0, 185.0, 10000000.0], [李四, 30.0, 178.0, 2000.0], [王五, 40.0, 169.0, 43323.0]]yaml_data yaml.safe_dump(list1, # 要转化的数据内容allow_unicodeTrue, # 允许unicode 字符中文原样显示sort_keysFalse # 不进行排序原样输出)# 序列化 将yaml 数据写入文件中f open(rD:\python_project\API_Auto\API3\data\yaml1.yaml, w, encodingutf-8)f.write(yaml_data)f.close()# 反序列化 读取yaml 文件中的数据f open(rD:\python_project\API_Auto\API3\data\yaml1.yaml, r, encodingutf-8)s f.read()data_yaml1 yaml.safe_load(s)print(data_yaml1)return data_yaml1使用读取到的数据
pytest.mark.parametrize((x), get_yaml_data()
)
def test_yaml_func(x):for i in x:print(i)输出为
D:\python_project\API_Auto\API3\venv\Scripts\python.exe D:\python_project\API_Auto\API3\main.py test session starts
platform win32 -- Python 3.10.6, pytest-8.3.5, pluggy-1.5.0 -- D:\python_project\API_Auto\API3\venv\Scripts\python.exe
cachedir: .pytest_cache
rootdir: D:\python_project\API_Auto\API3
configfile: pytest.ini
plugins: allure-pytest-2.13.5, result-log-1.2.2
collecting ... {数字: [1, 2, 3, 4, -1], 字符串: [a, #, c], 空值: None, 布尔值: [True, False], 元组: [1, 2, 3]}
[[张三, 18.0, 185.0, 10000000.0], [李四, 30.0, 178.0, 2000.0], [王五, 40.0, 169.0, 43323.0]]
collected 3 itemstestcases/test_ddt.py::test_yaml_func[x0] 张三
18.0
185.0
10000000.0
PASSED
testcases/test_ddt.py::test_yaml_func[x1] 李四
30.0
178.0
2000.0
PASSED
testcases/test_ddt.py::test_yaml_func[x2] 王五
40.0
169.0
43323.0
PASSED 3 passed in 0.10s
Report successfully generated to .\reportProcess finished with exit code 0