声明:参考B站视频,自学成长记录
https://www.bilibili.com/video/BV1u5411A7Um?p=2
单元测试框架
什么是单元测试?
单元测试是指在软件开发中,针对软件得最小单位(函数/方法)进行正确性得检查测试
常用单元测试框架有哪些?
java:junit和testng
python:unittest和pytest
单元测试框架主要做什么?
1.测试发现:从多个文件里面找到我们得测试用例
2.测试执行:按照一定得顺序和规则去执行
3.测试判断:通过断言判断预期结果和实际结果得差异
4.测试报告:统计测试耗时、结果、通过率 并生成测试报告
单元测试框架和自动化测试框架有什么关系?
什么是自动化框架
由一个或多个自动化测试基础模块、自动化测试管理模块、自动化测试统计模块等组成的工具集合
自动化框架作用
核心思想是让不懂代码得人能通过这个框架去实现自动化测试
从而提高测试效率、降低维护成本、减少人工干预
提高测试得准确性、增强代码得复用性
pytest单元测试框架和自动化测试框架得关系
单元测试框架
pom设计模式
数据驱动
关键字驱动
全局配置文件
日志监控
selenium / requests 二次封装
断言
生成报告
邮件发送
…
这些可以组成一整套得自动化测试框架
pytest
pytest简介
1.pytest是一款非常成熟得python得单元测试框架,比unittest更灵活、更容易上手
2.pytest可以和selenium / requests / appium结合实现web / 接口 / app自动化
3.pytest可以实现测试用例得跳过以及失败用例重试
4.pytest可以结合allure生成非常美观得测试报告
5.pytest可以结合jenkins实现持续集成(CI)
6.pytest有什么非常强大得插件
pytest-html 生成html格式得测试报告
pytest-xdist 测试用例分布式执行 多cpu并发
pytest-ordering 用于改变测试用例得执行顺序
pytest-rerunfailures 用例失败后重跑
allure-pytest 用于生成美观得测试报告
单个插件安装方式
pip install -U pytest
批量插件安装方式
1.在项目根目录创建requirements.txt
2. 参考以下格式编写
pytest==6.1.2
allure-pytest==2.8.22
allure-python-commons==2.8.22
pyparsing==2.4.7
3. 在pycharm终端下执行
pip install -r requirements.txt
自动生成requirements.txt
通过pip freeze > requirements.txt
可以将已安装的插件自动生成到requirements.txt文件中
pytest测试用例默认规范
1.模块名必须以test_开头或_test结尾
2.测试类名必须以Test开头 且不能有init方法
3.方法名必须以test开头
pytest的运行方式
1.主函数
运行所有:pytest.main()
指定目录:pytest.main([’-vs’, ‘./test_file’])
指定模块:pytest.mian([’-vs’,‘test_login.py’])
通过nodeid指定用例运行:nodeid由模块名 分隔符 类名 方法名 函数名组成
pytest.mian([’-vs’,’./test_file/test_login.py::test_01func’])
2. 命令行模式
运行所有:pytest
指定目录:pytest -vs ./test_file
指定模块:pytest -vs test_login.py
通过nodeid指定用例运行:pytest -vs ./test_file/test_login.py::test_01func
常用运行参数详解
-s:输出调试信息(print)
-v:显示更详细信息
-n:支持多线程或分布式运行
例如:pytest -vs ./test_file -n 2
–reruns num:失败用例重跑
例如:pytest -vs ./test_file --reruns 2
-x:失败一个用例 则测试终止
–maxfail num:失败n个用例 则测试终止
-k:根据测试用例部分字符串匹配执行
例如:pytest -vs ./test_file -k “ao”
-m:运行匹配mark标记的用例
例如:pytest -m “uat”
–html:生成html报告
例如:pytest ./test_file --html=reports/report.html
pytest测试用例的执行顺序
默认从上到下依次执行
也可以通过mark标记来修改默认执行顺序
需安装pytest-ordering插件
@pytest.mark.run(order=1)
def test_03():
assert 1 == 1
pytest.ini
pytest.ini是pytest单元测试框架核心的配置文件
位置:一般放在项目根目录下
编码:必须是ANSI
作用:改变pytest默认的参数
运行规则:不管是主函数模式还是命令行模式都会读取这个配置文件
格式如下
[pytest]
addopts = -vs --html=../reports/report.html
python_files = pt_*.py *_test.py
python_classes = Test*
python_functions = test_*
testpaths = pt
markers =
smoke:冒烟测试
uat:业务测试
pytest分组执行
import pytest
@pytest.mark.uat
def test_01():
assert 1 == 1
@pytest.mark.smoke
def test_02():
assert 1 == 1
pytest -m “uat”
pytest -m “uat or smoke”
跳过用例
无条件跳过 + 有条件跳过
@pytest.mark.skip(reason='无条件')
def test_04():
assert 1 == 1
age = 18
# 满足条件会被跳过
@pytest.mark.skipif(age >= 18,reason='已成年')
def test_05():
assert 1 == 1
生成html报告
需安装 pytest-html 插件
import pytest
def test_1():
assert 1 == 1
# 跳过该用例
@pytest.mark.skip()
def test_2():
assert sum(1 + 1) == 1
def test_3():
assert 1 == 2
执行测试
# 如果配置了pytest.ini 可直接运行pytest命令
pytest ./testcase --html=reports/report.html
查看测试报告
解决html报告乱码问题
pytest中文文档:https://www.osgeo.cn/pytest/contents.html