pytest(1)-简单使用
pytest-简单使用
单元测试框架和自动化测试框架有什么区别
- 什么是自动化测试框架及作用
- 提高测试效率,降低维护成本
- 减少人工干预,提高测试的准确性,增加代码的重要性
- 核心思想是让不懂代码的人也能够通过这个框架去实现自动化测试
- pytest单元测试框架和自动化测试框架的关系
- 单元测试框架:只是自动化测试框架中的组成部分职之一
- pom设计模式:只是自动化测试框架中的组成部分之一
- 数据驱动
- 关键字驱动
- 全局配置文件的封装
- 日志监控
- selenium,requests二次封装
- 断言
- 报告邮件
- 更多。。。。
putest简介
- pytest是一个非常成熟的python的单元测试框架,比unittest更灵活,更容易上手
- pytest可以和selenium,appium,requests,结合实现web自动化,接口自动化,app自动化
- pytest可以实现测试用例的跳过以及reruns失败用例重试
- pytest可以和allure生成非常美观的测试报告
- pytest可以和jenkins持续集成
- pytest有很多非常实用的插件
pytest
pytest-html 生成html格式的测试报告
pytest-xdist 测试用例分布式执行,多CPU分发
pytest-ordering 用于改变测试用例的执行顺序
pytest-rerunfailures 用例失败后重试
allure-pytest 用于生成美观的测试报告
依赖包名,写入requirements.txt中 通过 pip instail -r requirements.txt #导入所需要的插件
pip3 install -r requirements.txt
pytest --version #验证是否安装成功
使用pytest,默认的测试用例的规则以及基础应用
- 模块名必须test_开头或者_test结尾
- 测试类必须以Test开头,不能有__init__方法
- 测试方法必须以test开头
pytest测试用例的运行方式
主函数模式
- 运行所有用例
if __name__ == '__main__':
pytest.main()
- 指定模块
在main方法中传同一目录下文件名称,
if __name__ == '__main__':
pytest.main(["-vs","test_01.py"])
- 指定目录
在工程目录下创建all.py,main方法,要不找不到路径
if __name__ == '__main__':
pytest.main(["-vs","./test"])
- 通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成
if __name__ == '__main__':
pytest.main(["-vs","./test/test_01.py::Test001::test_01"])
命令行模式
//运行所有
pytest
//指定模块
pytest -vs test_01.py
//指定目录
pytest -vs ./test
//通过nodeid指定用例运行
pytest -vs ./test/test_01.py::Test001::test_01
参数详解
- -s : 表示输出调试信息,包括print打印的信息
- -v : 显示更详细的信息
- -vs : 这两个参数可以一起使用
- -n : 支持多线程或者分布式运行测试用例
- 如:
命令行模式:pytest -vs pytest.mian -vs ./test/test01.py -n 2
主函数模式:pytest.mian(["-vs","./test/test01.py::函数名","-n=2"])
- 如:
- --reruns NUM : 失败用例重跑
- 如:
命令行模式:pytest -vs pytest.mian -vs ./test/test01.py --reruns 2
主函数模式:pytest.mian(["-vs","./test/test01.py ::函数名","--reruns=2"])
- 如:
- -x : 表示只要一个用例报错,那么测试停止。
- --maxfail=失败个数 : 出现用例失败个数与设置值相等就停止
- -k : 根据测试用例的部分字符串指定测试用例
- 如:pytest -vs ./interface_testcase -k "ao"
- --html : --html ./report/report.html : 生成html的测试报告
通过pytest.ini配置文件运行
- pytest.ini : 这个文件它是pytest单元测试框架的核心配置文件
- 位置:一般放在项目的根目录
- 编码:必须是ANSI,可以使用notpad++修改编码格式
- 作用:改变pytest默认的行为
- 运行的规则:不管是主函数的模式运行,命令行运模式运行,都会去读取这个配置文件
[pytest]
#命令行参数,这里--alluredir ./temp表示生成allure报告的临时目录文件夹,-s表示显示
addopts= -vs --html ./report/report.html #命令行的参数,用空格分隔
testpaths= ./testcase #测试用例的路径
pyhon_fies= test_*.py #模块名的规则
python_classes = Test* #类名的规则
pyhon_functions =test #方法名的规则
markers = #表示分组
smoke:冒烟测试 #mark装饰器分组名称
usermanage:用户管理模块
pytest执行测试用例的顺序是怎么样的呢?
uinttest :ascll码的大小来绝对执行用例的顺序
pytest:默认从上到下
改变默认的执行顺序,使用marik装饰器
@pytest.mark.run(order=3)
如何分组执行(冒烟,分模块执行,分接口的web执行)
smoke:冒烟用例,分布在各个模块里面
pytest -vs -m "smoke"
pytest -vs -m "smoke or usermanage"
pytest跳过测试用例
- 无条件跳过
@pytest.mark.skip(reason="")
- 有条件跳过
@pytest.mark.skipif(age>18,reason="")