7.pytest框架结构——setup,teardown的使用
import pytest类似的setup,teardown同样更灵活
- 模块级(setup_module/teardown_module)模块始末,全局的(优先级最高)
- 函数级(setup_function/teardown_function)只对函数用例生效(不在类中)
- 类级(setup_class/teardown_class)只在类中前后运行一次(在类中)
- 方法级(setup_method/teardown_method)开始与方法始末(在类中)
- 类里面的(setup/teardown)运行在调用方法的前后
可以通过这张图的运行结果去体会他们之间的关系:
8.前端自动化中应用——@pytest.fixture()
场景:测试用例执行时,有的用例需要登录才能执行,有些用例不需要登录。此时setup和teardown无法满足。fixture可以。默认scope(范围)function
用例1需要登录
用例2不需要登录
用例3需要登录
使用步骤:
导入pytest
在登录的函数上面加@pytest.fixture()
在要使用测试方法中传入(登录函数名称),就先登录
不传入的就不登录直接执行测试方法
如下图示例:
9.前端自动化中的应用-conftest
使用场景:你与其他测试工程师合作一起开发时,公共模块在不同文件中,要在大家都访问到的地方
解决:conftest.py这个文件进行数据共享,并且它可以放在不同位置起着不同的范围共享作用。
执行:系统执行到参数login时先从文本中查找是否有这个名字的变量,之后在conftest.py中找是否有
步骤:将登陆模块带@pytest.fixture()写在conftest.py
conftest.py配置需要注意:
conftest.py文件名是不能换的⚠️⚠️
conftest.py与运行的用例要在同一个package下,并且有__init__.py文件⚠️⚠️
不需要import导入conftest.py,pytest用例会自动查找❗️
全局的配置和前期工作都可以写在这里,放在某个包下,就是这个包数据共享的地方
如下图所示:放在同一个包下,有__init__文件,test_fix测试用例会首先去找本模块有没有登录函数,如果没有会自动去conftest.py文件下去查找
10.前端自动化中应用——yield
使用场景:你已经可以将测试方法前要执行的或依赖的解决了,测试方法运行后销毁清除数据的要如何进行呢?范围是模块级别的。类似setupclasss
解决:通过统一模块中加入yield关键字,yield是调用第一次返回结果,第二次执行它下面的语句返回
步骤:在使用@pytest.fixture(scope=module)
在登录的方法中加入yield,之后加销毁会清除的步骤注意,这种方式没有返回值,如果希望返回使用addfinalizer关键字
前面的语句相当于执行yield之前第一次调用的时候的操作,yield相当于一个return,等作用域用例执行完之后执行yield之后的操作
如下图所示:
查看scope源码可以看到scope范围可以为module、class、method、session;
运行结果如下:
11.fixture的自动应用
场景:不想原测试方法有任何改动,或全部都自动实现自动应用,没特殊返回值时可以选择自动应用
解决:使用fixture中参数autouse=True实现
步骤:在方法上加@pytest.fixture(autouse=True)
在测试方法上加@pytest.mask.usefixtures("start")(这个使用目前暂无例子,先放这儿)
加了autouse=True,运行结果如下
没有加autouse=True,运行结果如下: