使用pytest.mark.parametrize进行参数化(pytest内置的装饰器)
其中get_test_data().getDatasFromSheet())是封装的读取excel的测试数据(也可以是其他类型的文件存储测试数据,只要能读出来就行)
参数'grade,expect'是将变量放在一个字符串里,如果是多个则用逗号隔开
class TestHomeIndex():
@pytest.mark.parametrize('grade,expect', get_test_data().getDatasFromSheet())
def test_001_home_index(self, http, get_data, grade,expect):#前置操作和输入参数
'''测试首页不同年级'''
logger.info(f"{grade}-=====-{expect}")
# print("grade",grade,type(grade))
uri = '/mall/app/home/index'
payload = get_data.get('playload')
payload['gradeId'] = str(grade)
#print(payload,type(payload))
headers = get_data.get('headers')
headers['X-Grade'] = str(grade)
#print(headers,type(headers))
logger.info(headers)
logger.info(payload)
response = http.post(uri, data=payload, headers=headers)
# print('用例中的url',response.url)
logger.info(response.text)
r = response.json()
print(json.dumps(r, indent=4, ensure_ascii=False))
# print(response.status_code)
code = response.json()['code']
# print(code)
# print(response.json()['data']['public']['user_type'])
assert response.status_code == 200, '请求返回非200'
assert code == expect, '请求返回code非0'
利用fixture实现参数化,多个参数,会生成各参数笛卡尔积的测试用例,params是列表类型
request参数固定写法,通过request.param返回
user_name = ["admin","staff"]
user_pwd = ["123","456"]
@pytest.fixture(params=user_name)
def login_name(request):
name = request.param
return name
@pytest.fixture(params=user_pwd)
def login_pwd(request):
pwd = request.param
return pwd
def test_login(login_name,login_pwd):
print(login_name,login_pwd)
assert login_name == "admin"
assert login_pwd == "123"