与pythonunittest的集成测试:如何提高粒度?

2024-06-01 07:26:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个单端到端硒集成测试,它包括几个步骤,每个步骤都设置特定的状态,并将数据传递到下一个步骤。在

测试场景:

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

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

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

将所有步骤转换为test_step1()test_step2()等,然后强制执行执行顺序和数据交换,这是错误的,因为这些步骤不是自包含的测试。在

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

基本上,我所要做的就是改进可视化报告,以便从整个集成测试失败的那个步骤的报告中可以更明显地看到这一点。使用unittest可以实现这一点吗?在组织代码以使其适合unittest范式时,什么是最佳实践?在

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


Tags: 工具方法test状态html报告步骤条目
1条回答
网友
1楼 · 发布于 2024-06-01 07:26:48

pytest

最灵活的选择是使用@pytest.mark.incremental和{a3}切换到{a1}来生成HTML报告。在

还计划将pytest-selenium plugin作为组织selenium装置的一种可能更干净的方法。在

下面的文章在理解如何在测试步骤之间维护共享状态方面很有用:http://computableverse.com/blog/pytest-sharing-class-fixtures

unittest

如果您喜欢使用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()

相关问题 更多 >