gpt4 book ai didi

python - 使用 Python unittest : how to improve granularity? 进行集成测试

转载 作者:太空宇宙 更新时间:2023-11-04 00:34:20 24 4
gpt4 key购买 nike

我有一个端到端的 Selenium 集成测试,它由几个步骤组成,每个步骤设置特定状态并将数据传递给下一步。

测试场景:

1. Create item.
2. Assign item to group.
3. Approve item.
...
4. Publish item.

这些步骤不是原子的,而是相互依赖的。测试类从 unittest.TestCase 扩展而来,包含一个单独的 test_xyz() 方法,它包装了每个步骤的方法。

目前,最终报告仅包括包装器 test_xyz() 方法的通过/失败状态。我希望将每个步骤都视为“测试步骤”,并在测试报告中有一个单独的条目。

将所有步骤转换为test_step1()test_step2()等,然后强制执行顺序和数据交换,感觉不对,因为这些步骤不是self-包含测试。

有没有办法将某些方法标记为测试步骤,以便它们在测试报告中显示为单独的条目?

基本上,我想要的只是改进可视化报告,以便从报告中更清楚地看出整个集成测试在哪一步失败了。这可以通过 unittest 实现吗?组织代码以使其适合单元测试范例的最佳做法是什么?

不确定 unittest 是集成测试的最佳工具,因为严格来说这不是单元测试。切换到像 pytest 这样的东西对集成测试更有意义,同时仍然允许“免费”HTML 报告生成? (我目前正在使用 nose 运行测试并使用相应的 nose plugin 生成 HTML 报告。)

最佳答案

测试

事实证明,最灵活的选择是切换到 pytest@pytest.mark.incrementalpytest-html用于生成 HTML 报告。

还计划调查 pytest-selenium plugin作为组织 Selenium 固定装置的可能更清洁的方式。

事实证明,以下文章有助于理解如何在测试步骤之间维护共享状态:http://computableverse.com/blog/pytest-sharing-class-fixtures

单元测试

如果您更喜欢使用 unittest,那么对于像迭代这样的简单用例,您可以使用 unittest.subTest如下例所示:

#!/usr/bin/env python3
import unittest

import requests

HOST='http://httpbin.org'

class TestEndpoints(unittest.TestCase):

def test_endpoints(self):

for endpoint in ('/headers',
'/ip',
'/user-agent',
'/response-headers',
'/html',
):
with self.subTest(path=endpoint):

url = HOST + endpoint
response = requests.get(url)
print(url, response.status_code)
self.assertEqual(response.status_code, requests.codes.ok, msg=f'expected status code {requests.codes.ok}')


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

关于python - 使用 Python unittest : how to improve granularity? 进行集成测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44750839/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com