标签:int 表达式 exp 测试方法 eva strong __name__ 方法 返回
pytest参数化与数据驱动实现——
1. 使用@pytest.mark.parametrize进行参数化和数据驱动
import pytest
@pytest.mark.parametrize("test_input, expected", [(‘3+5‘, 8), (‘1+5‘, 6), (‘3-5‘, -2),])
def test_eval(test_input, expected):
assert eval(test_input) == expected # eval(str)将字符串转换为表达式
if __name__ == ‘__main__‘:
pytest.main()
2. 传递数据并参数化 (场景:fixture方法里准备测试数据和前置依赖方法,在测试方法里参数化,测试方法调用准备数据和前置方法)
import pytest
test_user_data = [ {‘user‘: ‘linda‘, ‘password‘: ‘123456‘}, {‘user‘: ‘lily‘, ‘password‘: ‘123456‘}, {‘user‘: ‘Tom‘, ‘password‘: ‘123456‘}, {‘user‘: ‘Tom‘, ‘password‘: ‘‘}]
@pytest.fixture(scope=‘module‘)
def login_r(request):
user = request.param[‘user‘] // 通过dict形式,虽传递是一个参数,但通过key的方式可达到传递多个参数的效果
pwd=request.param[‘password‘]
print(‘打开首页登录 用户%s 密码%s‘ % user % pwd)
if pwd:
return True
else:
return False
# 这是pytest的参数化驱动。indirect=True 是把login当作函数去执行
@pytest.mark.parametrize(‘login_r‘, test_user_data, indirect=True)
def test_login(login_r): //登录用例
a = login_r
print(‘测试用例中login的返回值 %s‘ % a)
assert a,’失败原因:密码为空‘
3. 测试用例中用到多个参数化的fixture (登录方法参数化、搜索关键词参数化)
# 从下往上执行
# 两组参数进行组合测试,共 m*n组数据,运行m*n次
@pytest.mark.parametrize(‘query_param‘, test_user_data1, indirect=True)
@pytest.mark.parametrize(‘login_r‘, test_user_data, indirect=True)
def test_login(login_r,query_param):
标签:int 表达式 exp 测试方法 eva strong __name__ 方法 返回
原文地址:https://www.cnblogs.com/sunnyday21/p/14741636.html