1.Pytest简介
1.1前言
pytest是一个单元测试框架。
-
什么是单元测试?
- 在软件开发当中,针对软件最小单位(函数、方法)进行正确性的检验检查测试。
-
常见单元测试框架
- java:junit和testing
- python:unittest和pytest
-
单元测试框架主要做什么?
- 测试发现:从多个文件里面去找到我们的测试用例
- 测试执行:按照一定的规则和顺序执行,并生成结果
- 测试判断:通过断言判断预期结果和实际结果的差异
- 测试报告:统计测试进度,耗时,通过率,生成测试报告
-
单元测试框架和自动化测试框架有什么关系?
单元测试框架和自动化测试框架是两种不同类型的测试框架。单元测试框架只是自动化测试框架的组成部分之一。单元测试框架是一种用于编写和执行单元测试用例的工具,它主要用于测试软件的单独部分,如函数、模块等。单元测试框架的目的是验证软件的功能是否正确,并且发现软件中的错误和问题。
自动化测试框架是一种用于编写和执行自动化测试用例的工具,它主要用于测试软件的完整功能,如用户界面、流程等。自动化测试框架的目的是验证软件的功能是否正确,并且检测软件的性能、可靠性和安全性。
- 什么是自动化测试框架?
- 指一组规范和约定,用于帮助设计、编写和维护自动化测试用例的工具。自动化测试框架通常包括测试用例的组织方式、测试数据的存储方式、测试用例的执行方式、测试结果的处理方式等。
- 自动化框架作用:
- 提高测试效率,降低维护成本。
- 减少人工干预,提高测试的准确性,增加代码的重用性。
- 核心思想是让不懂代码的人也能通过这个框架去实现自动化测试。
- 什么是自动化测试框架?
1.2pytest简介
- pytest是一个成熟的python的单元框架,比unittest更灵活、更容易上手。
- pytest可以和selenium、request、appium结合实现web自动化、接口自动化、app自动化。
- pytest可以实现测试用例的跳过以及reruns失败用例重试。
- pytest可以和allure生成美观的测试报告。
- pytest可以和Jenkins持续集成
- pytest有很多强大的插件:
- pytest-html 生成html格式测试报告
- pytest-xdist 测试用例分布式执行,多cup分发
- pytest-ordeing 可以改变测试用例执行顺序
- allure-pytest 生成美观的测试报告
1.3快速下载pytest插件方法
- 在项目下创建requirements.txt文件,写入需要导入的插件名称
- 在Terminal中输入 以下命令就ok了
pip install -r requirements.txt
1.4 使用pytest,默认的测试用例的规则以及基础应用
- 模块名必须以test_开头或者_test结尾。
- 测试类必须以Test开头,并且不能有init方法。
- 测试方法必须以test开头。
1.5pytest测试用例的运行方式
执行方式一:主函数模式-通过maiin函数执行
- 执行所有
pytest.main()
- 运行指定模块:
pytest.main(['test_login.py'])
- 运行指定目录:pytest.main(['-vs','./interface_testcase'])
- 运行指定方法(nodeid方式:模块名,分隔符(::),类名,方法名,函数名)pytest.main(['-vs','./interface_testcase/test_insert.py::test'])
执行方式二:命令行模式-Terminal输入pytest
- 执行所有
pytest
- 执行指定模块pytest test_login.py
1.5.1执行参数详解
参数用于pytest.main()
中
- -s 表示输出调试信息
- -v 显示更详细信息
- -vs 可以同时使用vs
pytest.main(['-vs'])
- -n支持多线程或者分布式运行测试用例,可以减少运行时间
如:pytest -vs -n 2
或pytest.main(['-vs','-n=2'])
表示2个线程运行用例
- -reruns NUM:失败用例自动重跑2次,如:
pytest.main(['-vs','--reruns=2','./testcase'])
- -x:执行到一个失败用例就停止
- –maxfail 2 失败2个的时候才停止
- -k:根据测试用例的部分字符串指定执行测试用例,如:
pytest.main(‘-k="aaa"’)
执行包含aaa的测试用例
执行方式三:通过读取pytest.ini配置文件运行
pytest.ini 是pytest单元测试框架的核心配置文件。
1. 位置一般放在项目的根目录,文件名称为pytest.ini
2. 文件编码格式必须是 ANSI
3. 文件作用:改变pytest默认的行为
4. 运行规则:不管是主函数的模式运行,命令行模式运行,都会去读取这个配置文件。
5. 文件内容展示:
1.6pytest执行测试用例的顺序是什么
- unittest:ascll的大小来决定执行的顺序
- pytest:默认从上到下
- pytest.mark.run(order=NUM)可以根据NUM的大小控制执行顺序 所属插件:pytest-ordeing
# @pytest.mark.run(order=1) def test_01(self): ..... @pytest.mark.run(order=3) def ...... @pytest.mark.run(order=2) def .....
1.7如何分组执行用例(冒烟、分模块执行、分接口和web执行)
- 方法上标记模块
@pytest.mark.smoke
def test_01(self):
.....
@pytest.mark.uesr
def test_02(self):
.....
- 分模块的执行方式
-
pytest.ini文件配置执行
- markers =
smoke:标记了smoke的模块
uesr:标记了user的模块
- markers =
-
命令行执行
pytest -vs -m "smoke or user"
表示执行smoke和user模块
1.8pytest跳过测试用例
- 无条件跳过
用例方法使用下面注解
@pytest.mark.skip(reason = "跳过原因")
def test_01(self):
....
2. 有条件跳过,如下
1.9生成测试报告
- 参数:
--html ./reprot/reprot.html
- ./reprot/reprot.html代表生成文件路径
- ./reprot/reprot.html代表生成文件路径