单元测试框架是指:在软件开发当中,针对软件的最小单位(函数,方法)进行正确性的检查测试。
Java: Juint、TestNG
Python: unnitest、pytest
(1)什么是自动化测试框架?
去完成一个指定的系统的自动化测试,而封装的一整套的,完善的代码框架。
(2)自动化测试框架的作用
提高测试效率,降低维护成本‘
减少人工干预,提高测试的准确性,增加代码的复用性
核心思想就是:让不懂代码的人也能够通过该框架实现自动化测试。
(3)pytest单元测试框架和自动化测试框架的关系
pytest单元测试框架只是自动化测试框架的部分之一。
pom:只是自动化测试框架的部分之一
数据驱动:
关键字驱动:
全局配置文件的封装
日志监控:
seleinumr、equests二次封装
断言
测试报告
邮件
五、pytest框架简介
1、pytest是一个非常成熟的python的单元测试框架,比unittest更灵活,更容易上手。
2、pytest可以和seleium、appinum、requests实现Web自动化,App 自动化,和接口自动化。
3、pytest可以实现测试用例的跳过,和reruns失败用例测重试
4、pytest可以结合,allure实现非常美观的测试报告
5、pytest可以和Jenkins实现持续集成。
6、pytest有非常多的强大的插件,并且这些插件可以实现很多实用的操作。
pytest
pytest-html (生成html格式的报告)
pytest-xdist (测试用例分布执行,多CPU分发)
pytest-ordering (用于改变测试用例的执行顺序)
pytest-rerunfailures (用于失败用例重试)
allure-pytest(用于生成美观的测试报告)
批量下载插件
放到requirements.txt文件中,执行 pip install -r requirements.txt 这个命令
1、pytest的使用规则
2、通过读取pytest.ini配置文件运行
1、主函数模式
(1)运行所有:pytest.main()
(2)指定模块:pytest.main(["-vs", “test_login.py”])
(3)指定目录: pytest.main(["-vs", “./interface_testCase”])
(4)通过nodeid指定用例运行,nodeid由模块名,分隔符,类名和方法名组成
pytest.main(["-vs", “./interface_testCase/test_interface.py::test_04_func”])
pytest.main(["-vs", “./interface_testCase/test_interface.py::TestInterface::test_03_shaheshang”])
def test_04_func():
print("测试函数")
class TestInterface:
def test_03_shaheshang(self):
print("测试沙和尚")
all.py
import pytest
if __name__ == '__main__':
pytest.main(["-vs", "./interface_testCase/test_interface.py::test_04_func"])
运行结果:
interface_testCase/test_interface.py::test_04_func 测试函数
PASSED
2、命令行模式
(1)运行所有:pytest
(2)执行模块:cd web_testCase 切换到指定模块所在的目录
pytest -vs test_login.py
(3)指定目录: pytest -vs ./interface_testCase
(4)通过nodeid指定用例运行: pytest -vs ./interface_testCase/test_interface.py::test_04_func
3、通过读取pytest.ini配置文件运行
pytest.ini 这个文件它是pytest单元测试框架的核心配置文件。
[pytest]
addopts = -vs # 命令行参数,用空格分隔
# 测试用例路径
testpaths = './web_testCase'
# 模块名规则
python_files = 'test*.py'
# 类名的规则
python_classes = Test*
# 方法名的规则
python_functions = test
4、参数详解
参数详解:
-s: 表示输出调试信息,包括print打印的信息
-v: 显示更详细的信息,包括用例所在的模块名和类名
-vs: 这两个参数可以一起使用
-n:支持多线程或者分布式运行测试用例
--reruns 2: 失败用例重跑
-x :表示只要有一个用例报错,那么测试停止
--maxfail=2: 表示出现两个用例失败就停止
-k: 根据测试用例的部分字符串指定测试用例
def test_01_sunwukong def test_02_xiaohong
eg: pytest -vs ./web_testCase -k 'on'
- 主函数模式
pytest.main(["-vs", "./web_testCase/test_login", "-n=2"])
- 命令行模式书写
pytest -vs ./web_testCase/test_login -n 2
`如果有5个用例,分配两个线程来执行的话,那么第一个线程会执行1 3 5 用例,第二个线程会执行2 4 用例
--html ./report/report.html 生成html格式的测试报告
失败用例重试使用的参数是:–reruns==2
test_login中有5个用例,模拟让第二个用例执行失败
class TestLogin:
def test_01_sunwukong(self):
print("测试孙悟空")
def test_02_xiaohong(self):
print("测试小红")
assert 1 == 2
def test_03_huahua(self):
print("测试花花")
def test_01_xiaoming(self):
print("测试小明")
def test_01_dudu(self):
print("测试嘟嘟")
all.py
import pytest
if __name__ == '__main__':
pytest.main(["-vs", "./web_testCase", '--reruns=2'])
使用命令行模式执行:
pytest -vs ./web_testCase --reruns 2
unittest: 通过ASCII的大小来决定执行的顺序
pytest: 默认从上到下
安装:pytest-ordering 这个插件
该插件作用:用于改变测试用例的执行顺序
可以通过mark 标记来指定用例执行的顺序
@pytest.mark.run(order=1)
def test_07_xiaohong(self):
print("测试小红")
1、分组执行使用场景
冒烟、分模块执行、分接口和web执行
smoke:冒烟用例,分布在各个模块里面
在pytest.ini 配置文件中添加
markers =
smoke: 冒烟用例
usermanage: 用户管理模块
productmanage:商品管理模块
在用例中添加标记
@pytest.mark.smoke
@pytest.mark.usermanager
def test_07_xiaohong(self):
print("测试小红")
pytest -vs -m ‘smoke’
pytest -vs -m ‘somke or usermanager’
使用场景:只执行正向用例,不执行反向用例,异常用例
在用例上添加skip标记
无条件跳过:
@pytest.mark.skip(reason=“不执行花花用例”)
有条件跳过:
@pytest.mark.skipif(age >= 18, “还未成年”)