數(shù)據(jù)驅(qū)動:數(shù)據(jù)的改變從而驅(qū)動自動化測試用例的執(zhí)行谱净,最終引起測試結(jié)果的改變。簡單說就是參數(shù)化的應(yīng)用周伦。
測試驅(qū)動在自動化測試中的應(yīng)用場景:
- 測試步驟的數(shù)據(jù)驅(qū)動谷饿;
- 測試數(shù)據(jù)的數(shù)據(jù)驅(qū)動;
- 配置的數(shù)據(jù)驅(qū)動;
1冠骄、pytest結(jié)合數(shù)據(jù)驅(qū)動-yaml
實(shí)現(xiàn)讀yaml文件伪煤,先創(chuàng)建env.yml文件配置測試數(shù)據(jù)
工程目錄結(jié)構(gòu):
- 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("這是測試環(huán)境")
# print(env)
print("測試環(huán)境的ip是:", env["test"])
elif "dev" in env:
print("這是開發(fā)文件")
print("開發(fā)環(huán)境的ip是:", env["dev"])
# print(env)
結(jié)果示例:
image.png
2、pytest結(jié)合數(shù)據(jù)驅(qū)動-excel
常用的讀取方式有:xlrd凛辣、xlwings抱既、pandas、openpyxl
以讀excel文件扁誓,實(shí)現(xiàn)A+B=C并斷言為例~
工程目錄結(jié)構(gòu):
-
data目錄:存放excel數(shù)據(jù)文件
image.png - func目錄:存放被測函數(shù)文件
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數(shù)據(jù)
: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結(jié)合數(shù)據(jù)驅(qū)動-csv
csv:逗號文件,以逗號分隔的string文件
讀取csv數(shù)據(jù):
- 內(nèi)置函數(shù)open()
- 內(nèi)置模塊csv
- 方法:csv.reader(iterable)
- 參數(shù):iterable蝗敢,文件或列表對象
- 返回:迭代器捷泞,遍歷迭代器,每次會返回一行數(shù)據(jù)
以讀csv文件寿谴,實(shí)現(xiàn)A+B=C并斷言為例~
工程目錄結(jié)構(gòu):
-
data目錄:存放csv數(shù)據(jù)文件
image.png - func目錄:存放被測函數(shù)文件
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結(jié)合數(shù)據(jù)驅(qū)動-json
json:js對象,是一種輕量級的數(shù)據(jù)交換格式讶泰。
json結(jié)構(gòu):
- 對象{"key":value}
- 數(shù)組[value1,value2...]
查看json文件:
- 1.pycharm
- 2.txt記事本
讀取json文件:
- 內(nèi)置函數(shù)open()
- 內(nèi)置庫json
- 方法 json.loads() json.dumps()
以讀json文件咏瑟,實(shí)現(xiàn)A+B=C并斷言為例~
工程目錄結(jié)構(gòu):
-
data目錄:存放json數(shù)據(jù)文件
image.png - func目錄:存放被測函數(shù)文件
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數(shù)據(jù)
: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)