面向对象+unittest
Posted dadexxx
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了面向对象+unittest相关的知识,希望对你有一定的参考价值。
一.轻量级框架unittest
对unittest二次开发,可以做web,app,api自动化测试
unittest=setUp()【前置条件】+tearDown()【扫尾操作】+测试用例(命名必须以test开头)+测试套件
二.Pytest
Pytest是python的一种单元测试框架。
Pytest装饰器
资料来源:pytest文档5-fixture之conftest.py
1.fixture
setup和teardown可以实现在测试用例之前或之后加入一些操作,但这种是整个脚本全局生效的;自定义测试用例的预置条件用fixtrue
firture相对于setup和teardown来说应该有以下几点优势
- 命名方式灵活,不局限于setup和teardown这几个命名
- conftest.py 配置里可以实现数据共享,不需要import就能自动找到一些配置
- scope="module" 可以实现多个.py跨文件共享前置, 每一个.py文件调用一次
- scope="session" 以实现多个.py跨文件使用一个session来完成多个用例
作用范围:
fixture里面有个scope参数可以控制fixture的作用范围:session > module > class > function(默认)
@pytest.fixture()如果不写参数,默认就是scope="function",它的作用范围是每个测试用例来之前运行一次,销毁代码在测试用例运行之后运行。
fixture为class级别的时候,如果一个class里面有多个用例,都调用了此fixture,那么此fixture只在该class里所有用例开始前执行一次
fixture为module级别时,在当前.py脚本里面所有用例开始前只执行一次
fixture为session级别是可以跨.py模块调用的,也就是当我们有多个.py文件的用例时候,如果多个用例只需调用一次fixture,那就可以设置为scope="session",并且写到conftest.py文件里
注:conftest.py文件名称是固定的,pytest会自动识别该文件。放到工程的根目录下,就可以全局调用了,如果放到某个package包下,那就只在该package内有效
- conftest.py配置脚本名称是固定的,不能改名称
- conftest.py与运行的用例要在同一个pakage下,并且有__init__.py文件
- 不需要import导入 conftest.py,pytest用例会自动查找
在conftest.py中添加参数:
命令行参数是根据命令行选项将不同的值传递给测试函数,比如平常在cmd执行”pytest —html=report.html”,这里面的”—html=report.html“就是从命令行传入的参数
对应的参数名称是html,参数值是report.html
conftest.py多个自定义参数示例:
Pytest 命令行传参
来源:pytest_命令行传参
命令行参数是根据命令行选项将不同的值传递给测试函数,比如平常在cmd执行"pytest --html=report.html",这里面的”--html=report.html“就是从命令行传入的参数
对应的参数名称是html,参数值是report.html
pytest 生成测试报告
资料来源:pytest 之 pytest-html生成html报告
1.pip install pytest-html
2.执行 (当前目录下生成名为report.html的测试报告)
pytest --html=report.html
打开cmd,cd到需要执行pytest用例的目录,执行指令:pytest --html=report.html;执行完之后,在当前目录会生成一个report.html的报告文件,显示效果如下
pytest 执行
来源:Pytest:执行方式
b.指定某个目录及其子目录的所有测试文件 pytest testcase
c.指定某个某块的某个方法 pytest test_module::test_function
d.指定执行某模块的某个类中的某个用例 用“::”分割 pytesy test_model.py::test_class::test_method
pytest -v -s --env=1 test_abase.py
- -v 用于显示每个测试函数的执行结果
- -q 只显示整体测试结果
- -s 用于显示测试函数中print()函数输出
- -x, --exitfirst, exit instantly on first error or failed test
- -h 帮助
四.Tips
1.python自带unittest,java有junit框架。
2.unittest框架测试报告 一个点代表成功 F代表失败 E代表异常 (一个位置代表一条测试用例)。
3.fixture:固定配置
把一个函数定义成fixture,在函数声明之前加上“@pytest.fixture”,其他函数要用这个fixture,只用把它做一个输入的参数即可。
以上是关于面向对象+unittest的主要内容,如果未能解决你的问题,请参考以下文章