一、pytest单元测试框架
1)什么是单元测试框架
单元测试是指在开发当中,针对软件的最小单位(函数、方法)进行正确的检查测试。
2)单元测试框架
java:junit和testng
Python:unittest和pytest
3)单元测试框架主要做什么?
1.测试发现:从多个文件里面找到我们测试用例
2.测试执行:按照一定的顺序和规则去执行。并生成结果
3.测试判断:通过断言判断预期结果和实际结果的差异
4.测试报告:统计测试进度,耗时,通过率,生成测试报告
二、单元测试框架和自动化测试框架有什么关系?
1)什么是自动化测试框架
2)作用
1.提高测试效率,降低维护成本
2.减少人工干预,提高测试的准确性,增加代码的重要性,
3.核心思想是让不懂代码的人也能够通过这个框架去实现自动化测试。
3)pytest单元测试框架和自动化测试框架的关系
单元测试框架:只是自动化测试框架中的组成部分之一。
pom设计模式:只是自动化测试框架中的组成部分之一。
数据驱动…
关键驱动
全局配置文件的封装
日志监控
selenium、requests二次封装
断言
报告邮件
更多…
三、pytest简介
1.pytest是一个非常成熟的Python的单元框架,比unittest更灵活,容易上手。
2.pytest可以和selenium,requests,appium结合实现web自动化,接口自动化,APP自动化。
3.pytest可以实现测试用例的跳过以及reruns失败用例重试。
4.pytest可以和allure生成非常美观的测试报告。
5.pytest可以和jenkins持续集成
6.pytest有很多非常强大的插件,并且这些插件能够实现很多实用的操作。
pytest
pytest-xdist(测试用例分布式执行。多CPU分发)
pytest-ordering(用于改变测试用例的执行顺序)
pytest-rerunfailures(用例失败后重跑)
pytest-html(生成html格式的自动化测试报告)
allure-pytest(用于生成美观的测试报告)
都放到一个文件里面,通过pip install -r 文件名 安装
验证是否安装成功:pytest --version
四、使用pytest,默认的测试用例的规则以及基础应用
1.模块名必须以test_开头或者__test结尾
2.测试类必须以Test开头,并且不能有init方法
3.测试方法必须以test开头
五、pytest测试用例的运行方式
1.主函数模式
1)运行所有用例:pytest.main()
2)指定模块名字运行:pytest.main([’-s’,‘文件名.py’])
2.命令行模式
1) 运行所有 pytest
2)指定模块名字运行:pytest -vs 文件名.py
3)指定目录去执行:pytest.main([’-s’,’./目录名字’])
4) 指定目录去执行:pytest.main([’-vs’,’./testcase’,’-n=2’])
参数详解:
-s:表示输出调试信息,包括print打印的信息
-v:显示更详细的信息
-vs:这两个参数可以一起使用
-n:支持多线程或者分布式运行测试用例。
如:pytest -vs ./目录名字/文件名字 -n 2
--retuns NUM:表示失败用例重跑
-x:表示只要有一个用例报错,那么测试停止。
--maxfail=2:表示出现两个用例失败就停止
-k:表示根据测试用例的部分字符串指定测试用例
如:pytest -vs ./目录名字 -k “ao” # “ao”表示包含字符串的才会执行。
--html ./report/xxx.html:生成html测试报告
3.通过读取pytest.ini配置文件运行
pytest.ini 这个文件pytest单元测试框架的核心文件。
1)位置一般放在项目的根目录
2)编码格式:必须是ANSI,可以使用notpad++修改编码格式
3)作用:改变pytest默认的行为
4)运行的规则:不管是主函数的模式运行,命令行模式运行,都会去读取这个配置文件。
5)pytest.ini 文件参数
[pytest]
# 命令行参数,用空格分隔
addopts = -vs
# 测试用例文件夹路径,可自己配置
testpaths = ./testcase
# 配置测试搜索的模块文件名称 模块名的规则
python_files = test_*py
# 配置测试搜索的测试类名
python_classes = Test*
# 配置测试搜索的测试函数名
python_functions = test
# 标记用例,在多个文件里面分组执行
markers =
smoke:冒烟用例
usermanage:用户管理模块
productmanage:商品管理模块
六、pytest执行测试用例的顺序是怎样的呢?
unittest:ascll的大小来绝对的执行的顺序
pytest:默认从上到下执行
改变默认的执行顺序:使用mark标记
@pytest.mark.run(order=2)
七、如何分组执行(冒烟,分模块执行,分接口和web执行)
smoke:冒烟用例,分布在各个模块里面
执行方法:1)pytest -vs -m “smoke”
可以加或者or:2)pytest -vs -m “smoke or usermanage”
八、pytest跳过测试用例
1)无条件跳过 定义装饰器
@pytest.mark.skip(reason=‘可以定义原因’) # 跳过,不执行
2)有条件跳过 定义装饰器
@pytest.mark.skipif(age>=18,reason=‘年龄大于18成年了’) # 有条件跳过,age==条件