一天一个关于测试知识点,5分钟内讲解你最关心的软件测试问题,今天就来谈谈关于软件测试中的“Pytest是通过什么进行参数化的”。
Pytest可以通过fixtures、Mark_Usefixtures和外部数据对测试用例进行参数化。
1. 通过fixtures参数化
案例2-15:通过fixtures参数化。
#利用fixtures的params
import Pytest
from Calculator import calculator
from Util import util
@Pytest.fixture(params=[{'first':20,"second":30,"result":50},{'first':20,"second":20,"result":40}])
def account_provider(request): #request是固定的。
return request.param #request.parm也是固定的。
def test_Calculato(account_provider):
j=calculator(account_provider["first"],account_provider["second"])
util.AssertEqual(j.myadd(),account_provider["result"])
if __name__ == '__main__':
Pytest.main(["-sv","Test_Parms_By_Pytest_Fixture.py"])
运行结果如下。
…
collected 2 items [0m
[32m[1m========================== 2 passed in 0.32 seconds ===========================[0m
>>>
由于有两组参数,所以测试用例认为有两个测试用例。
2. 通过Mark_Usefixtures参数化
案例2-16:通过Mark_Usefixtures参数化。
#利用Mark_Usefixtures的params
import Pytest
from Calculator import calculator
from Util import util
@Pytest.fixture(params=[{'first':20,"second":30,"result":50},{'first':20,"second":20,"result":40}])
def account_provider(request): #request是固定的。
return request.param #request.parm也是固定的。
@Pytest.mark.usefixtures("account_provider")
def test_Calculato(account_provider):
j=calculator(account_provider["first"],account_provider["second"])
util.AssertEqual(j.myadd(),account_provider["result"])
if __name__ == '__main__':
Pytest.main(["-sv","Test_Parms_By_Mark_Usefixtures.py"])
注意:使用fixture标记函数后,函数将默认接入一个request参数,它将包含使用该fixture函数的信息,这样可以更加灵活的根据不同的函数来决定创建不同的对象以及释放函数。 举例来说userfixtures可以用作setup()和teardown()。
3. 通过外部数据参数化
案例2-17:通过外部数据参数化。
Util.py读取同目录下名为data.xlsx的Excel文件,文件格式如图2-35所示。
import xlrd
from xlutils.copy import copy
…
#读取Excel文件
def read_from_excel():
fname = './data.xlsx’
filename = xlrd.open_workbook(fname)
sheets = filename.nsheets
sheet1 = filename.sheets()[0]
nrows1 = sheet1.nrows
row_list = []
for i in range(0,nrows1):
row_datas = sheet1.row_values(i)
row_list.append(row_datas)
return row_list
测试程序。
import Pytest
from Calculator import calculator
from Util import util
#直接写函数读取外部文件生成数据值,注意values返回值是个list
values = util.read_from_excel()
@Pytest.mark.parametrize('v',values)
def test_login(v):
print(values)
print(v)
j=calculator(v[0],v[1])
util.AssertEqual(j.myadd(),v[2])
if __name__ == '__main__':
Pytest.main(["-sv","Test_Parms_By_Pytest_Mark_Parametrize.py"])
图2-35 data.xlsx文件格式
运行结果为。
…
Test_Parms_By_Pytest_Mark_Parametrize.py::test_login[v0] [[100.0,200.0,300.0],[1.0,5.0,6.0]]
[100.0,200.0,300.0]
[32mPASSED[0m
Test_Parms_By_Pytest_Mark_Parametrize.py::test_login[v1] [[100.0,200.0,300.0],[1.0,5.0,6.0]]
[1.0,5.0,6.0]
[32mPASSED[0m
[32m[1m========================== 2 passed in 0.28 seconds ===========================[0m
测试框架把Excel第一列赋值给v1、第二列赋值给v2…。
本章节关于“Pytest是通过什么进行参数化的”就学习到这里了,每个工作日小编都会更新一个小知识,希望大家多多关注我们,一起来学习喔!