Pytest单元测试
pytest单元测试框架
- 什么是单元测试框架
单元测试是指在软件开发当中,针对软件的最小单位(函数、方法)进行正确性的检查测试。
- 单元测试框架
-
java: junit和testing
-
Python: unittest和pytest
- 单元测试框架主要做什么?
- 测试发现:从多个文件里面去找到测试用例
- 测试执行:按照一定的顺序和规则去执行,并且生成结果
- 测试判断:通过断言去判断预期结果和实际结果的差异
- 测试报告:统计测试进度、耗时、通过率、生成测试报告
单元测试框架和自动化测试框架有什么关系?1. 什么是自动化测试框架
- 作用
- 提高测试效率,降低维护成本
- 减少人工干预,提高测试的准确性,增加代码的重用性
- 核心的思想是让不懂代码的人也能够通过这个框架去实现自动化测试
- pytest单元测试化框架和自动化测试框架的关系
-
单元测试框架:只是自动化测试框架中的组成部分之一
-
pom设计模式:只是自动化测试框架中的组成部分之一
-
数据驱动:只是…
-
关键字驱动:…
-
全局配置文件的封装:…
-
日志监控、selenium、requests二次封装、断言、报告邮件…
pytest简介
- pytest是一个非常成熟的python的单元框架,比unittest更灵活,容易上手。
- pytest可以和selenium,requests,appium结合实现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 install -r requirements.txt
注:只是局部安装,适用于当前目录下,若全局使用则在DOS安装在本机上。
安装成功
使用pytest,默认的测试用例的规则以及基础应用
- 模块名必须以test_ 开头或者 _test结尾
- 测试类必须以Test开头,并且不能有init方法
- 测试方法必须以test开头
例子:
先新建一个Python Package的包,在包下创建一个Python File,模块名必须以test_ 开头或者 _test结尾
测试类必须以Test开头,并且不能有init方法
测试方法必须以test开头
pytest测试用例的运行方式
主函数模式
-
运行所有:pytest.main()
-
指定模块:pytest.main([’-vs’,‘test_login.py’])
-
指定目录:pytest.main([’-vs’,’./文件夹路径’])
-
通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成。
pytest.main([’-vs’,./文件路径/模块名.py::函数])
pytest.main([’-vs’,./文件路径/模块名.py::类名::方法名])
命令行模式
-
运行所有:pytest
-
指定模块:pytest -vs test_login.py
-
指定目录:pytest -vs ./文件夹路径
-
通过nodeid指定用例运行:pytest -vs ./文件路径/模块名.py::函数
参数详解:
-s:表示输出调试信息,包括print打印的信息
-v:显示更详细的信息,可以和-s合用
-n:支持多线程或者分布式运行测试用例。
如(命令行):pytest -vs ./test_login.py -n 2
–reruns NUM:失败用例重跑
-x:表示只要有一个用例报错,测试停止
–maxfail=NUM:出现NUM个用例失败就停止
-k:根据测试用例的部分字符串指定测试用例
如(命令行):pytest -vs ./testcase -k “xxx”
–html ./report/report.html:生成html的测试报告
通过读取pytest.ini配置文件运行
pytest.ini这个文件是pytest单元测试框架的核心配置文件
- 位置:一般放在项目的根目录
- 编码:必须是ANSI,可以使用notepad++修改编码模式
- 作用:改变pytest默认的行为
- 运行的规则:不管是主函数的模式还是命令行模式,都会去读取这个配置文件。
pytest执行测试用例的顺序是怎样的呢
unittest:ascll的大小来决定的执行的顺序
pytest:默认从上到下
改变默认的执行顺序:使用mark标记
@pytest.mark.run(order=NUM)
如何分组执行(冒烟,分模块执行,分接口和web执行)
smoke:冒烟用例,分布在各个模块里面
pytest -vs -m “smoke”
pytest -vs -m “smoke or usermanger”
pytest跳过测试用例
- 无条件跳过:@pytest.mark.skip()
- 有条件跳过:@pytest.mark.skipif()