---
title: "测试用例编写指南以及最佳实践 - PyRes"
language: "zh"
url: "https://docs.testany.io/zh/docs/test-case-writing-guideline-best-practice-pyres/"
markdown_url: "https://docs.testany.io/zh/docs/test-case-writing-guideline-best-practice-pyres.md"
translation: "https://docs.testany.io/en/docs/test-case-writing-guideline-best-practice-pyres.md"
last_updated: "2026-01-30T21:25:07+08:00"
---

# 测试用例编写指南以及最佳实践 - PyRes

## **概述**

**PyRes by Testany** 是一个基于 Python 3.12.6 的优化 Docker 镜像，预装了常用的测试框架，如 Pytest、Python 单元测试和 Robot Framework。最重要的是，PyRes 通过内置的重试和异常处理机制增强了测试服务中使用的连接方法，特别是在请求和会话方面。它旨在解决跨云测试中的网络抖动问题，确保更稳定和可靠的测试结果。

## **功能**

- **支持的测试框架**：

  - Pytest
  - Python 单元测试
  - Robot Framework
- **自动重试机制**：内置的网络连接重试逻辑，有效减少因网络问题导致的测试失败。
- **改进的跨云容错能力**：与原生 Python 测试框架相比，PyRes 增加了 50 倍的网络抖动容忍度。
- **开源**：我们正在开源 PyRes Executor，因此您可以自由利用 PyRes 进行更可靠和稳健的基于 Python 的软件测试。然而，我们强烈建议用户使用 Testany 平台来驱动 PyRes，以实现更高水平的测试自动化、灵活性和可靠性。

## **使用 PyRes**

### **准备测试用例**

与标准 Python 测试类似，您需要准备以下文件：

1. **测试代码文件**：例如，`test_app.py`。
2. **需求文件**：如果您的 Python 测试代码需要特定的库，您可以在根目录创建一个 `requirements.txt` 文件。PyRes 将在执行环境中自动下载这些依赖项。

### **打包测试用例**

将相关文件打包成一个 zip 文件，例如 `python-test.zip`，并上传到 Testany 平台。

### **在 Testany 平台上注册**

一旦成功准备好 zip 文件，您可以在 Testany 平台上注册您的测试用例。有关如何注册测试用例的详细步骤，请参阅我们文档中的 "[《管理测试用例》](https://docs.testany.io/zh/docs/managing-test-case.md#注册测试用例)" 部分。

## **PyRes 与原生 Python 单元测试框架的比较**

### **使用原生 Python 单元测试处理网络抖动**

使用原生 Python 单元测试框架进行测试时，网络抖动可能导致连接中断或超时，影响测试结果。为避免这些问题，您需要手动编写额外的代码来处理网络异常和重试逻辑。以下是一个示例，演示如何使用原生框架处理这些问题：

```python
import unittest
import requests
from requests.exceptions import RequestException

class TestAPI(unittest.TestCase):

    def make_request_with_retry(self, url, retries=5):
        attempt = 0
        while attempt < retries:
            try:
                response = requests.get(url, timeout=5)
                if response.status_code == 200:
                    return response
            except RequestException as e:
                print(f"Attempt {attempt + 1} failed with error: {e}")
                attempt += 1
        raise Exception("Max retries reached")

    def test_api_call(self):
        url = 'https://api.example.com/data'
        response = self.make_request_with_retry(url)
        self.assertEqual(response.status_code, 200)

if __name__ == '__main__':
    unittest.main()
```

在此示例中，您需要：

- 手动处理网络请求和超时异常。
- 实现重试逻辑以解决网络抖动问题。
- 通过处理与业务逻辑无关的网络层异常增加复杂性。

### **使用 PyRes Executor**

使用 PyRes，您无需编写额外的代码来处理网络连接失败和重试，因为 PyRes 已集成了这些处理机制。因此，您可以专注于编写测试代码的业务逻辑，而无需处理底层网络异常。以下是一个简化的示例，演示如何使用 PyRes：

```python
import unittest
import requests

class TestAPI(unittest.TestCase):

    def test_api_call(self):
        url = 'https://api.example.com/data'
        response = requests.get(url)
        self.assertEqual(response.status_code, 200)

if __name__ == '__main__':
    unittest.main()
```

在此示例中，您不再需要：

- 编写复杂的重试逻辑。
- 处理诸如 RequestException 的网络错误。
- 使用 PyRes 的内置机制，网络抖动问题将被自动处理，以避免干扰测试结果。

## **PyRes 测试示例**

以下是使用 PyRes 进行 Python 单元测试框架测试的示例：

```python
import unittest
import os

class TestStringMethods(unittest.TestCase):

    def test_upper(self):
        test_str = os.getenv('TEST_STR')
        self.assertEqual('foo'.upper(), test_str)

    def test_isupper(self):
        self.assertTrue('FOO'.isupper())
        self.assertFalse('Foo'.isupper())

    def test_split(self):
        s = os.getenv('SPLIT_STR')
        self.assertEqual(s.split(), ['hello', 'world'])
        with self.assertRaises(TypeError):
            s.split(2)

if __name__ == '__main__':
    unittest.main()
```

### **环境变量**

在此示例中，使用 `os.getenv` 方法来获取环境变量。


> **提示**
>
> **环境变量配置**
>
> 代码中使用的环境变量（如 `TEST_STR`、`SPLIT_STR`）必须在**两处**配置：
> 1. **Test Case 详情页** → **Environment Variables** 部分：定义变量名和值
> 2. **测试脚本代码**：使用 `os.getenv('VARIABLE_NAME')` 读取值
>
> 请参阅[《管理测试用例》](https://docs.testany.io/zh/docs/managing-test-case.md)了解如何在平台上配置环境变量。


### **运行测试**

PyRes 将自动处理网络异常，因此您无需在测试脚本中手动添加额外的异常处理逻辑。

## **兼容性**

PyRes 目前支持 Python 3.12.6，并与较低版本的 Python 兼容。如果您有使用更新版本 Python 的特定要求，请联系我们的客户支持。

## **常见问题**

**问：我可以在本地调试 PyRes 吗？**

答：可以，您可以将 PyRes Docker 镜像拉到本地环境并在本地调试测试用例。

**问：PyRes 支持跨云测试吗？**

答：是的，PyRes 在跨云测试中表现良好，大大提高了对网络抖动的容忍度。

×

## 本页术语

- [执行器（Executor）](https://docs.testany.io/zh/docs/glossary.md#executor)
- [用户 (User)](https://docs.testany.io/zh/docs/glossary.md#user)
- [执行 (Execution)](https://docs.testany.io/zh/docs/glossary.md#execution)
- [环境 (Environment)](https://docs.testany.io/zh/docs/glossary.md#environment)
- [测试用例 (Test Case)](https://docs.testany.io/zh/docs/glossary.md#test-case)
- [测试脚本 (Test Script)](https://docs.testany.io/zh/docs/glossary.md#test-script)
