Skip to main content
Skip table of contents

测试用例编写指南以及最佳实践 - 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 平台上注册您的测试用例。有关如何注册测试用例的详细步骤,请参阅我们文档中的 "《管理测试用例》" 部分。

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

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

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

PY
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:

PY
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 单元测试框架测试的示例:

PY
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 方法来获取环境变量。您可以根据实际情况设置环境变量,以确保测试顺利进行。

运行测试

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

兼容性

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

常见问题

问:我可以在本地调试 PyRes 吗?

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

问:PyRes 支持跨云测试吗?

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

JavaScript errors detected

Please note, these errors can depend on your browser setup.

If this problem persists, please contact our support.