pytest 是一个用于 Python 的强大的测试框架。它支持功能测试、单元测试和模拟等测试需求,通常与 Flask(轻量级的 Python web 框架)一起使用。
## pytest 特点
* 入门简单,文档丰富
* 支持参数化,可以从教细的力度控制测试用例
* 能够支持简单的单元测试和复杂的功能测试
* 支持测试跳过,失败case标记
* 支持失败重试
* 支持由nose,unittest编写的测试用例
* 支持HTML报告,eport框架----allure 也支持了pytest
* 和jenkins持续集成很方便
* 具有很多第三方插件,并且可以自定义扩展
## pytest 测试用例设计原则
* 所有的包必须要有__init__.py文件
* 文件名必须以*_test.py或者test_*.py命名
* 测试类必须以Test开头,并且不能包含__init__方法
* 测试函数必须以test开头
* 测试类里以test_开头的方法
## pytest + allure 测试报表
## allure-behave
通过指定`allure_behave.formatter:AllureFormatter`作为格式化器和输出目录,来运行`behave`:
```
behave -f allure_behave.formatter:AllureFormatter -o %allure_result_folder% ./features
```
* 将测试结果存放在`%allure_result_folder%`中,而不是直接生成报告。
然后通过 Allure 命令行(需要另外安装)来生成报告:
```
allure serve %allure_result_folder%
```
这将会生成本地的 Allure 报告,并自动在默认浏览器中打开。
另外,需要注意的是,Allure 提供了很多额外的功能(例如添加附件、与测试用例关联的问题等),要利用这些功能,你需要在你的步骤定义中使用 Allure 的 Python 库 (`allure-python-commons`) 提供的装饰器和函数。
## allure
Allure 是一款开源的测试报告生成工具,可以生成清晰、形象的测试报告,以可视化的形式展示测试执行结果。Allure 内置了许多特性,如测试案例追踪、测试时长趋势、失败情况分析等。
安装并使用 Allure 的过程如下:
1. **安装 Allure**:首先需要在电脑上安装 Allure。如果你使用的是 macOS,可以通过 Homebrew 安装:
~~~
bashCopy codebrew install allure
~~~
For Windows, you can download it from the Allure Framework's GitHub page and add it to your path.
2. **生成 Allure 结果**:在你的测试框架里进行设置,使其在运行测试时能生成 Allure 原始结果。这需要额外的插件或库。例如,如果你使用的是 pytest,你需要安装`pytest-allure-adaptor`插件:
~~~
pip install pytest-allure-adaptor
~~~
并在运行 pytest 时用`--alluredir`参数指定结果输出的目录:
~~~
pytest --alluredir=result_directory
~~~
3. **生成报告**:使用 Allure 命令行工具处理输出的结果,并生成 HTML 格式的报告:
~~~
allure serve result_directory
~~~
这条命令将启动一个本地 Web 服务器,自动打开浏览器显示生成的报告。你可以看到各种可视化的统计信息,覆盖率,失败的用例等。
注意,使用 Allure 可能需要你稍微改变写测试用例的方式,以便提供更多测试细节。例如,你需要增加一些注解来提供测试步骤的描述或测试案例的元数据。
##
Allure 是一种易于生成的、易于阅读的测试报告框架。它支持多种测试工具和库,并以跨平台的可视化方式展示测试结果。下面我们来看看
要查看 Allure 报告,请安装 Allure 命令行工具,并使用`allure serve`命令 (如`allure serve %allure_result_folder%`) 生成报告。报告将在默认浏览器中打开,展示你的测试结果和相关详细信息。
##
### pytest + Allure
以 pytest 为例,你可以通过下面的方式使用 Allure:
安装 Allure:
Allure 命令行工具可以通过以下方式获取:
对于 macOS 系统,可以使用 Homebrew 进行安装:
bash
Copy code
brew install allure
对于 Windows 系统,可以下载安装包并正确设置环境变量,详见 Allure Framework 官网安装指南。
安装pytest插件:
你需要在 Python 项目中安装 pytest-allure-adaptor 插件:
bash
Copy code
pip install allure-pytest
运行测试并生成报告:
运行 pytest 时,加上 --alluredir 参数,指定一个目录来存储测试结果:
bash
Copy code
pytest --alluredir=/path/to/results/directory
当测试运行完成后,用 Allure 命令行工具生成报告:
bash
Copy code
allure serve /path/to/results/directory
这将会在默认浏览器中打开一份详细的测试报告,包括测试覆盖率、失败的测试以及它们的堆栈跟踪等信息.
如果你使用的是其他测试框架,你也可以找到相应的 Allure 插件或库来生成测试报告。注意,使用 Allure 可能需要你改变一些测试写法,以便提供更多测试细节(例如,增加装饰器来标注用例的优先级和严重程度、增加步骤的描述等)。
## pytest 如何输出
在 Python 中,可以以多种方式连接(或拼接)字符串。以下是几种常见的字符串连接方法:
1. 使用加号 (+) 操作符:
~~~
pythonCopy codestring1 = "Hello"
string2 = "World"
result = string1 + " " + string2 # 结果将是 "Hello World"
~~~
2. 使用 join() 方法:
~~~
pythonCopy codestrings = ["Hello", "World"]
result = " ".join(strings) # 结果将是 "Hello World"
~~~
`join()`是非常有效的方法,尤其是当你有许多字符串需要连接时。
3. 使用格式化字符串 (f-string,Python 3.6+):
~~~
pythonCopy codename = "World"
result = f"Hello {name}" # 结果将是 "Hello World"
~~~
4. 使用格式化方法 format():
~~~
pythonCopy coderesult = "{} {}".format("Hello", "World") # 结果将是 "Hello World"
~~~
5. 使用百分号 (%) 格式化(不建议使用,因为它是较旧的格式化方法):
~~~
pythonCopy coderesult = "%s %s" % ("Hello", "World") # 结果将是 "Hello World"
~~~
在大多数情况下,加号 (+) 是最直观的方式,但如果涉及到多个字符串的复杂连接操作,`join()`或格式化字符串可能更有效、更易读。
pytest print 无效吗
![bot](https://davinci.mediatek.inc/_next/image?url=%2Fbot.png&w=64&q=75)
在默认情况下,当运行`pytest`时,标准输出(`print`语句的结果)不会显示在控制台上,除非测试失败。这是因为`pytest`捕获了输出,以便在测试失败时只显示相关的输出信息。
但是,如果你希望在测试执行时看到输出,你可以使用以下几种方法之一:
1. **\-s或--capture=no参数**: 运行`pytest`时加上`-s`选项,这将禁用所有的输出捕获。
~~~
bashCopy codepytest -s
~~~
使用该选项后,所有的`print`调用都会正常输出到控制台。
2. **使用logging**: 在测试中使用`logging`模块而不是`print`是一个更加标准的做法。在配置了日志处理器后,即使在没有指定`-s`参数的情况下,日志输出也会显示在控制台上。
首先设置logger:
~~~
pythonCopy codeimport logging
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
~~~
然后在你的测试中使用它:
~~~
pythonCopy codelogger.info("Your log message")
~~~
3. **pytest的详细模式**: 运行`pytest`时加上`-v`选项,它将开启详细模式,虽然这并不会显示所有的输出,但它可以在测试报告中提供更多信息。
~~~
bashCopy codepytest -v
~~~
选择哪种方法取决于你想从测试运行中获取什么样的输出。如果你想看到测试执行过程中的实时打印输出,使用`-s`参数是最简单直接的方式。如果你想要更加结构化的日志输出,那么使用`logging`模块会更好。
## 参考
* https://docs.pytest.org/en/latest/contents.html
* https://docs.pytest.org/en/7.1.x/reference/customize.html
- 前言
- 1.入门篇
- Python介绍
- 安装与使用
- Python开发利器之VS Code
- 模块安装
- 命令行
- 一次Python无法安装模块的问题探索与解决之旅
- 命令运行
- Conda
- 下载地址
- 2.基础篇
- 基础语法
- 输入与输出
- with as的用法
- 注释
- Python命令行参数
- 编码
- 变量类型
- 列表遍历
- 运算符
- 表达式语句
- 条件
- 循环
- 日期和时间
- 函数
- 高级语法
- @符号-装饰器
- 模块和包
- name
- init.py
- 错误和异常
- 面向对象
- 3.专题篇
- 常用功能
- Python 字符串连接
- python web
- Python CGI编程
- Python OAuth2
- 认证 Flask-HTTPAuth
- 常用命令
- 内置函数
- dir()
- print(f)
- 标准模块
- sys
- pickle-数据序列化
- os
- IO(输入输出)
- 键盘输入
- 文件读写
- 测试
- Python测试框架之pytest快速入门
- pytest-bdd快速示例和问题解决
- 基于pytest-bdd的项目目录结构和命名规范
- python BDD 的相关概念
- Behave介绍和快速示例
- Python BDD之Behave测试报告
- Python BDD 框架比较之 pytest-bdd vs behave
- pytest进阶
- Flask + pytest测试
- 参考网址
- pytest-bdd进阶
- hehave进阶
- 测试路径
- python + selunium
- HTML 根据多层CSS 查找元素
- 等待执行
- 使用text 查找 span
- pytest如何在控制台输出
- 4.问题篇
- pip pip3 及区别
- TypeError: can only concatenate str (not "NoneType") to str
- 5.实战篇
- matplotlib-绘图包
- 导入类
- 命名规范
- 模块查找
- 6.进阶篇
- Flask
- Flask介绍
- Flask扩展模块
- Flask-Login
- 问题
- Jinja2
- Flask-RESTful
- Flask-JWT-Extended
- WSGI
- Flask-SQLAlchemy
- 部署
- Flask VS Django
- Flask Web
- Flask + Vue
- Flask实战
- Flask 标准目录结构
- Blueprints
- 参考
- FastAPI 测试
- https 证书 Caused by SSLError(SSLCertVerificationError(1, '[SSL: CERTIFICATE_VERIFY_FAILED] certificate verify failed: unable to get local issuer certificate