【unittest】
Python自带的测试框架,结合unittest+HTMLtestrunner,但已过时
【pytest】
(1)单元测试和复杂的功能测试
(2)灵活,易上手
(3)支持参数化
(4)失败自动重试
【测试用力的识别与运行】
(1)测试文件Test_*.py
*_test.py
(2)用例的识别
Test*里包含所有test_*的方法(测试类不能带有__init__方法)
不在class中的所有的test_*方法
(3)pytest也可以执行unittest框架写的用例和方法
【pytest常用的第三方库】
- pytest-selenium集成selenium
- pytest-allure-adaptor生成漂亮的allure报告
- pytest-suger优化运行效果
- pytest-rerunfailures重新运行错误用例
- pytest-assume断言
- pytest-xdist多CPU分发分布执行
……
【运行】
(1)终端执行:
pytest –v –s 文件::类::方法
-v 打印详细运行日志
-v –s 文件名
文件名.py 执行单独一个pytest模块
文件名.py::类名 运行某个模块的某个类
文件名.py::类名::方法名 运行某个模块里面的方法
(1) 报错停止运行
pytest –x 文件名 一旦运行到报错就停止文件运行
pytest –maxfail=[num] 当运行错误达到num是就停止运行
(2) 跳过某条测试用例,或者只运行某些测试用例
pytest –k “类名 and not 方法名” 跳过运行某个用例
pytest –m [标记名] pytest_mark[标记名]将运行有这个标记的测试用例
【失败重试】
失败之后重试几次,要在重新运行之前进行延迟,延迟一段时间之后再运行
需要加载pytest-rerunfailure插件pip install pytest-rerunfailures
执行pytest –reruns 3 –v –s test.py
pytest –v –reruns 5 –reruns-delay 1
【断言】
一个方法中写多条断言,通常第一条过不去,下面就不执行了。想报错也可以执行一下
需要加载assume插件pip install pytest-assume
执行:pytest.assume(1==4)
pytest.assume(2==4)
【pycharm运行】
If __name__ = ‘__main__’:
pytest.main([‘-v’,’-s’,’test_simple.py::Test_exam’])
【pytest框架结构】
Import pytest类似的setup,Teardown同样更加灵活
- 模块级别(setup_module/teardown_module)模块始末、全局的(优先最高)
- 函数级(setup_function/teardown_function)支队函数用例生效(不在类中)
- 类级别(setup_class/teardown_class)只在类中前后运行一次
- 方法级(setup_method/teardown_method)开始于方法始末(在类中)
- 类里面的(setup/teardown)运行在调用方法的前后
【pytest fixture】
fixture是pytest特有的功能,他用@pytest.fixture()进行标识,定义在函数的前面
在编写测试函数的时候,你可以将这个函数名称作为传入参数,pytest将会以依赖注入的方式,将该函数的返回值作为测试函数的传入参数
fixture有明确的名字,在其他函数、模块、类、或者整个工程调用它时会被激活
fixture主要的目的是为了提供一种可靠的和可重复性的手段去运行那些最基本的测试内容
比如在测试网站功能时,每个测试用例都要登录和退出,利用fixture就可以一次执行。避免每次都调用的冗余情况。
- fixture可以当做参数传递,也可以传入多个fixture
- fixture(scope”function”,param=None,autouse=False,ids=None,name=None)
pytest的fixture默认是方法级别的,可以手动改为@pytest.fixture(scope=”class ”) 只要修改scope参数就可以。级别session->module->class->function。session是可以跨模块进行调用的
params可选参数,他将导致多个参数调用fixture功能,在所有的测试使用
autose:为所有的测试激活fixture功能
ids每个字符串ID的列表,每个字符串对英语怕热爱美是这样他们就是测试ID的一部分,如果没有提供,他们将从params自动生成
name:fixture的名称
【pytest前端自动化中应用conftest】
与其他测试工程师合作一起开发时,公共模块要在不同的文件中大家都能访问得到。
conftest.py这个文件进行数据共享,并且它可以放在不同位置起着不同范围的共享作用
系统执行到参数login时先从本文件中查找是否有这个名字的变量,然后在conftest.py文件中找是否有将公共的函数@pytest.fixture写在conftest.py中
注意:conftest文件名不能换
conftest.py与运行的用例要在同一个package下,并且有__init__.py文件
不需要import导入conftest文件,pytest会自己全局进行查找
全局的配置和前期的文件共享都可以放在这里,当前报的文件共享的地方