PyTest
一、pytest单元测试框架
(1)什么是单元测试框架
- 单元测试是指在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试。
(2)单元测试框架
- java : junit和testing
- python : unittest和pytest
(3)单元测试框架主要做什么
- 测试发现:从多个文件里面去找到测试用例
- 测试执行:按照一定定顺序和规则去执行,并生成结果
- 测试判断:通过断言判断预期果和实际结果的差异
- 测试报吉:统计测试进度,耗时,通过率,生成测试报告
二、单元测试框架和自动化测试框架有什么关系?
(1) 什么是自动化测试框架
(2) 作用
- 提高测试效率,降低维护成本
- 减少人工干预,提高测试的确性,増加代码的重用性
- 核心思想是让不懂代码的人也能够通过这个框架去实现目动化测试
(3) pytest 单元测试框架和目动化测试框架的关系
单元测试框架:只是自动化测试框架中的组成部分之一
pom设计模式:只是目动化测试框架中的组成部分之一
数据驱动 关键字驱动 全局配置文件的封装 日志监控
selenium, requests二次封装
断言 报告邮件 。。。
三、pytest简介
1 Pytest 是一个非常成熟的 python 的单元框架,比 unittest 更灵活,容易上
2 pytest 可以和 selenium, requests, appius 结台实现 web 目动化,接口目动化,ap 目动化。
3 pytest 可以实现测试用例的跳过以及 reruns 失败用例重试
4 pytest 可以和 allure 生成非常美观的测试报告
5 pytest 可以和 Jenkins 持续集成
6 pytest 有很多非常强大的插件,并且这些插件能够实现很多的实用的操作
pytest
pytest-html(生成html格式的自动化测试报告)
pytest-xdist 测试用例分布式执行,多CPU分发
pytest-ordering 用与改变测试用例多执行顺序
pytest-rerunfailures 用例失败后重跑
allure-pytest 用于生成美观的测试报告
一次性安装所有插件方案:
新建一个txt文档,把插件名放进txt中,每个插件后空一行,执行命令pip install -r 文件名.txt
升级安装pip install -U xxx
四、使用pytest,默认的测试用例的规则以及基础应用
1 模块名必须以 test_ 开头或音 _test 结尾
2 测试类必须以 Test 开头,并且不能有 init 方法。
3 测式方法必须以 test 开头
五、pytest测试用例的运行方式
1 主函数模式
(1)运行所有:pytest.main()
(2)指定模块:pytest.main(‘test_login.py’)
(3)指定目录:pytest.main(‘路径名’)
(4)通过nodeid指定用例运行:nodeid由模块名,分隔符,类名,方法名,函数名组成。
pytest.main([’./testcase/test_login::TestLogin::test_01_baili’])
2 命令行模式
(1)运行所有:直接输入pytest
(2)指定模块:pytest test_login.py
(3)指定目录:pytest 路径名
(4)指定用例:pytes ./testcase/test_login::TestLogin::test_01_baili
参数详解:
-s:表示输出调试信息,包括print打印的信息
-v:显示更详细的信息
-n:支持多线程或者分布式运行测试用例,节省时间
如: pytest -vs testcase -n 2
pytest.main([’-vs’,’-n=2’])
–reruns:用例失败了才重新跑n次
如: pytest -vs testcase --reruns 2
pytest.main([‘testcase’,’–reruns=2’])
-x:只要有一个用例报错,测试停止
-k:根据测试用例的部分字符串来指定测试用例
如:pytest -vs testcase -k “ao”
–html ./目录/文件.html:生成html测试报告
3 通过pytest.ini配置文件运行
pytest.ini这个文件是pytest单元测试框架的核心配置文件。
1.位置放在项目的根目录
2.编码:必须是ANSI,可以使用工具notpad++修改编码格式
3.作用:改变pytest的默认的行为
4.运行的规则:不管是主函数的模式运行,命令行模式运行,都会去读取这个配置文件
[pytest]
addopts = -vs
#命令行的参数,用空格分隔
testpaths = Pytest
#测试用例的路径
python_files = test_*.py
#模块名的规则
python_classes = Test*
#类名的规则
python_functions = test
#方法名的规则
六、pytest执行测试用例的顺序
unittest按照ascII码的大小来决定执行顺序
pytest默认从上到下
- 改变默认的执行顺序,使用mark标记。
@pytest.mark.run(order=3)
七、如何分组执行(冒烟,分模块,分接口和web执行)
smoke:冒烟用例,分布在各个模块里面
在功能上加上装饰器:
@pytest.mark.smoke
@pytest.mark.usermanage
在pytest.ini中添加:
markers =
smoke:冒烟用例
usermanage:用户管理模块
pytest -m “smoke”
pytest -m “smoke or usermanage”
八、pytest跳过测试用例
(1) 无条件跳过
@pytest.mark.skip("原因")
(2)有条件跳过
@pytest.mark.skipif(age>=18,reason="成年了")
B站视频总结,原视频为码尚学院3.3发布的pytest自动化测试框架