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 同级