PyCharm安装哪些Allure第三方库
时间: 2024-01-05 14:56:10 浏览: 120
要在PyCharm中使用Allure报告,您需要安装以下第三方库:
1. pytest-allure-adaptor:用于将pytest测试结果转换为Allure报告格式。
2. allure-pytest:用于在Pytest中使用Allure报告。
您可以通过以下命令在终端中安装这些库:
pip install pytest-allure-adaptor allure-pytest
或者,您可以在PyCharm中使用内置的包管理器来安装它们。打开PyCharm,转到File > Settings > Project: <project_name> > Python Interpreter。在右侧的搜索栏中搜索“pytest-allure-adaptor”和“allure-pytest”,然后单击“Install Package”按钮安装它们。
相关问题
pycharm配置python接口自动化运行环境csnd
### PyCharm 中配置 Python 接口自动化测试运行环境
要在 PyCharm 中成功配置 Python 接口自动化测试的运行环境,需要完成以下几个方面的设置:
#### 1. 安装必要的依赖库
为了支持接口自动化测试的功能,通常需要安装一些常用的第三方库。这些库可以用于处理 HTTP 请求、解析 JSON 数据以及操作数据库等。可以通过 `pip` 工具来安装所需的库。
以下是常见的依赖库及其用途:
- **requests**: 处理 HTTP 请求。
- **pytest**: 测试框架的核心工具。
- **allure-pytest**: 提供 allure 报告的支持。
- **mysql-connector-python**: 如果涉及 MySQL 数据库的操作,则需安装此库。
命令如下所示:
```bash
pip install requests pytest allure-pytest mysql-connector-python
```
上述命令会自动下载并安装所需的所有依赖项[^1]。
#### 2. 创建虚拟环境
建议在 PyCharm 中创建一个新的虚拟环境以隔离项目的依赖关系。具体步骤如下:
- 打开 PyCharm 并进入项目设置 (`File -> Settings`)。
- 转到 `Project: <your_project_name> -> Python Interpreter`。
- 点击右上角的小齿轮图标,选择 `Add...`。
- 在弹出窗口中选择 `Virtualenv Environment`,然后指定新环境的位置和基础解释器版本。
通过这种方式,可以确保项目的依赖不会与其他项目发生冲突[^2]。
#### 3. 配置 pytest 的运行参数
PyCharm 支持直接集成 pytest 框架。要使 pytest 正常工作,需要调整其配置文件 `pytest.ini` 或者 `.ini` 文件中的选项。例如,在引用的内容中提到的配置文件片段展示了如何自定义 pytest 行为。
以下是一个典型的 `pytest.ini` 文件示例:
```ini
[pytest]
addopts = -s --alluredir=./report
testpaths = ./scripts
python_files = test_*.py
python_classes = Test*
python_functions = test_*
```
其中的关键字段含义如下:
- `addopts`: 添加额外的命令行选项,这里启用了 `-s` 和 Allure 报告功能。
- `testpaths`: 指定测试脚本所在的目录路径。
- `python_files`, `python_classes`, `python_functions`: 分别匹配符合条件的文件名、类名和函数名作为测试目标。
#### 4. 设置调试与运行配置
为了让 PyCharm 更好地识别和执行测试用例,还需要为其设定专门的运行/调试配置:
- 右键点击某个具体的测试文件或者整个 tests 目录,选择 `Create 'Run Configuration'`。
- 在打开的对话框里确认选用的是 pytest 类型,并填写对应的模块名称(通常是 `pytest`)、脚本位置以及其他必要参数。
这样就可以一键启动测试流程而无需手动输入复杂指令了。
#### 5. 导入已有代码结构
如果已经有一份现成的源码包(比如书中附带的例子),可以直接将其导入至当前工程下。注意保持原有的目录层次不变以便于后续维护管理。
---
### 示例代码展示
下面给出一段简单的接口调用样例程序,帮助理解实际应用过程:
```python
import requests
def send_request(url, method="GET", params=None, headers=None):
response = requests.request(method=method, url=url, params=params, headers=headers)
return {
"status_code": response.status_code,
"content": response.json()
}
if __name__ == "__main__":
result = send_request("https://jsonplaceholder.typicode.com/posts", method="POST",
json={"title": "foo", "body": "bar", "userId": 1})
print(result["status_code"], result["content"])
```
以上代码实现了向远程服务器发起 POST 请求并将响应结果打印出来的基本逻辑。
---
C:\Users\安娜\AppData\Local\Programs\Python\Python311\python.exe "C:/Users/安娜/Desktop/anna/pycharm/PyCharm Community Edition 2024.1/plugins/python-ce/helpers/pycharm/_jb_unittest_runner.py" --path C:\Users\安娜\PycharmProjects\seleniumproject11\SeleniumProject\testcases\web\test_login.py Testing started at 下午10:09 ... Launching unittests with arguments python -m unittest C:\Users\安娜\PycharmProjects\seleniumproject11\SeleniumProject\testcases\web\test_login.py in C:\Users\安娜\PycharmProjects\seleniumproject11\SeleniumProject\testcases\web Traceback (most recent call last): File "C:\Users\安娜\Desktop\anna\pycharm\PyCharm Community Edition 2024.1\plugins\python-ce\helpers\pycharm\_jb_unittest_runner.py", line 38, in <module> sys.exit(main(argv=args, module=None, testRunner=unittestpy.TeamcityTestRunner, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\unittest\main.py", line 101, in __init__ self.parseArgs(argv) File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\unittest\main.py", line 150, in parseArgs self.createTests() File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\unittest\main.py", line 161, in createTests self.test = self.testLoader.loadTestsFromNames(self.testNames, ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\unittest\loader.py", line 232, in loadTestsFromNames suites = [self.loadTestsFromName(name, module) for name in names] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\unittest\loader.py", line 232, in <listcomp> suites = [self.loadTestsFromName(name, module) for name in names] ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\unittest\loader.py", line 162, in loadTestsFromName module = __import__(module_name) ^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\安娜\PycharmProjects\seleniumproject11\SeleniumProject\testcases\web\test_login.py", line 8, in <module> import allure File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\site-packages\allure\__init__.py", line 1, in <module> from allure.pytest_plugin import MASTER_HELPER File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\site-packages\allure\pytest_plugin.py", line 9, in <module> from allure.common import AllureImpl, StepContext File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\site-packages\allure\common.py", line 19, in <module> from allure.structure import Attach, TestStep, TestCase, TestSuite, Failure, Environment, EnvParameter File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\site-packages\allure\structure.py", line 14, in <module> class Attach(xmlfied('attachment', ^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\site-packages\allure\rules.py", line 116, in xmlfied class MyImpl(namedlist('XMLFied', [(item[0], None) for item in items])): ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\site-packages\namedlist.py", line 398, in namedlist fields, defaults = _fields_and_defaults(typename, field_names, default, rename) ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\site-packages\namedlist.py", line 252, in _fields_and_defaults if isinstance(field_names, _collections.Mapping): ^^^^^^^^^^^^^^^^^^^^ AttributeError: module 'collections' has no attribute 'Mapping' 进程已结束,退出代码为 1 空套件
从错误信息来看,您的 Python 程序运行时出现了 `AttributeError` 错误。以下是针对该问题的具体分析及解决方案:
### **问题原因**
您遇到的问题是因为某些库内部使用的模块属性发生了变更。
#### 具体出错位置:
```plaintext
File "C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\site-packages\namedlist.py", line 252, in _fields_and_defaults
if isinstance(field_names, _collections.Mapping):
^^^^^^^^^^^^^^^^^^^^
AttributeError: module 'collections' has no attribute 'Mapping'
```
在 Python 3.10 及更高版本中,`_collections.Mapping` 已被移除,并由更现代的替代品取代,例如 `collections.abc.Mapping`。因此如果某个依赖包(如 `namedlist` 或其他间接引用到它的包)未更新以适配最新版 Python,则可能会导致此问题。
---
### **解决方法**
#### 方法一:降级 Python 版本
如果您可以接受降低对新功能的需求,可以选择将 Python 升级至兼容旧 API 的较低版本,比如 Python 3.9 或更低版本。
操作步骤如下:
1. 下载并安装适合的 Python 老版本;
- 官方下载链接:https://www.python.org/downloads/
2. 配置环境变量指向新的解释器路径;
3. 再次尝试运行脚本查看效果;
#### 方法二:升级相关冲突第三方库
检查当前项目所依赖的所有外部包是否都已支持最新的 Python 发行版本(这里是 Python 3.11),特别是报错涉及的核心组件“namedlist”以及其上下游关联项(allure等)
通过 pip 命令强制更新所有可用软件包试试看有没有解决问题的效果:
```bash
pip install --upgrade --force-reinstall namedlist allure-pytest pytest
```
若上述命令未能完全修复则需进一步排查具体哪个部分仍存在问题 并手动寻找对应的新版本替换掉原来的旧文件夹内容或者考虑暂时采用官方推荐的补丁方案。
#### 方法三:修改源码绕过异常(仅作为临时措施)
如果确认无法立即调整整个生态链状况下也可以直接编辑引发崩溃处本地副本里的代码改成适应新版规范形式即把"_collection.Mappping"替换成"collections.abc.Mapping"
找到以下文件的位置:`C:\Users\安娜\AppData\Local\Programs\Python\Python311\Lib\site-packages\namedlist.py`,打开它定位大约第252行附近将其改为类似下面的样子:
原句:
```python
if isinstance(field_names, _collections.Mapping):
```
修正后:
```python
from collections.abc import Mapping # 添加这一导入声明语句
...
if isinstance(field_names, Mapping): # 替换原有表达式
```
**注意**: 此种做法只是应急手段长期而言最好还是促使开发者发布正式维护后的发行版本.
---
###
阅读全文
相关推荐













