DDT 数据驱动测试 思想
应用场景:场景流程是一样的,只有数据不一样。 --- 参数化
python测试框架当中应用数据驱动:
unittest: ddt库
pytest: 自带的。
在测试用例的前面加上:
@pytest.mark.parametrize("参数名",列表数据)
参数名:用来接收每一项数据,并作为测试用例的参数。
列表数据:多组测试数据。
@pytest.mark.parametrize("参数1,参数2",[(数据1,数据2),(数据1,数据2)])
示例:
@pytest.mark.parametrize("a,b,c",[(1,3,4),(10,35,45),(22.22,22.22,44.44)])
def test_add(a,b,c):
res = a + b
assert res == c
测试用例的: 前置操作(准备工作 - 准备环境/数据/资源...)、
后置操作(清理工作 -关闭环境/清理数据/释放资源...)
前置工作 - setup
执行测试用例(中间执行多少用例呢?)
后置工作 - teardown
在每条测试用例执行之前,打印:一条测试用例开始执行
执行测试用例
在每条测试用例执行之后,打印:一条测试用例执行结束
在一个测试类下的第一条用例执行之前,打印:测试类下的用例开始执行
执行测试类下的用例
在一个测试类下的最后一条用例执行之前,打印:测试类下的用例执行结束
定义fixture
1、函数表示,函数名称自定义。
2、函数前面,要用@pytest.fixture来声明它是一个fixture
3、包含前置准备工作的代码、后置清理工作的代码。前置代码和后置代码之间用yield隔开
yield之前的代码为:前置工作
yield之后的代码为:后置工作
4、作用域:function(测试函数-默认)、class(测试类)、module(测试模块)、session(测试会话)
scope参数来设置
调用fixture
在测试类/测试用例的名字上:
@pytest.mark.usefixtures("定义的fixture函数名")
支持在测试类/测试用例上调用多个fixture
共享机制:
定义的fixture,不同的.py里的测试用例,都可以调用。
公共的地方:conftest.py(存放fixtures)
不需要测试用例.py文件去引入,pytest会自动找的。
(fixtures可以放在类里面、 .py里面、 conftest.py)
用例当中如果调用了fixture,
那么,首先找自己所在的文件有没有
如果有,优先用自己的。
如果没有,则会去找同级目录下的conftest.py里有没有
如果同级没有,则会去上找一级目录下的conftest.py里有没有
...
一直到rootdir
"继承" fixture使用其它的fixture
@pytest.fixture(scope="class")
def class_fix():
# 前置准备工作的代码
print("-----测试类下的用例开始执行------")
yield
# 后置清理工作的代码
print("-----测试类下的用例执行结束------")
@pytest.fixture
def hello(class_fix):
# 前置准备工作的代码
print("打开浏览器,打开淘宝,登陆成功")
yield
# 后置清理工作的代码
print("退出帐号,关闭浏览器")
执行顺序:
class_fix的前置
hello的前置
hello的后置
class_fix的后置
fixture1(fixture2) --fixture2的scope不能低于fixture1
同级