订购测试用例-Pytest

时间:2019-02-17 04:15:40

标签: python-3.x pytest

对于堆栈溢出的同一问题,我经历了一些解答。大多数答案建议使用标记。我想看看是否有其他选择可用。这是我的要求。

test_file1.py:

test_class 1
   test_case1
   test_case2
   test_case3...so on

test_file2.py:

test_class 1
   test_case1
   test_casPls help to solve this.e2
   test_case3...so on

像这样,我有大约30-40个不同的.py文件,它们具有不同的测试,这些测试专用于测试不同的功能。现在,我想知道如何命令测试执行。有什么方法可以从我定义了执行顺序的单个文件中触发执行?

1 个答案:

答案 0 :(得分:0)

您已经达到了需要利用单元测试框架为您完成所需功能的程度,而无需编写代码来进行设置和拆除。

我会假设您正在使用Python的unittest模块,否则,如果您不使用Python,肯定会具有我要向您展示的内容(如果没有) t,这可能不值得使用,您应该改用更好的东西。

根据docs,您可以添加一个名为setUp()的方法,其中:

  

...测试框架将自动调用我们运行的每个测试。

import unittest

class YourTestClass(unittest.TestCase):
    def setUp(self):
        # Call code here to be set up
        # Save the things into fields with self.whatever = calculate(...)

    def someTest(self):
        # Make use of self.whatever that your automatically run setUp() 
        # has provided for you, since the unit testing framework has
        # called it before this test is run

然后如果需要的话还有tearDown(),它将在每次单元测试后运行代码。

这意味着当您实现setUp(以及可选的tearDown)时,它将运行如下:

test_class1.setUp()
test_class1.test_case1
test_class1.tearDown()

test_class1.setUp()
test_class1.test_case2
test_class1.tearDown()

test_class1.setUp()
test_class1.test_case3
test_class1.tearDown()

...

您还可以做更多的事情,为此,我建议您检查一下文档。但是,这应该根据您提供给我的评论来完成。

现在,如果您在其中共享了代码(例如可能更改了一些小参数),则应在提供的链接中研究使用子测试区分测试迭代部分,以了解如何使用{{ 1}}为您处理。据说这需要Python 3.4+(我希望您使用的是Python而不是2.7之类的过时工具)。

最后,如果您只想在所有测试之前运行一次,则可以使用subTest()来完成与setUpClass()相同的操作,只运行一次。有关更多详细信息,请参阅文档。

简而言之:

  • 如果需要在每次测试前做某事,请使用setUp()

  • 如果需要在所有测试之前进行一次操作,请使用setUp()

  • 如果您有很多相似的测试,并且只有输入到测试中的数据发生变化,请查看setUpClass(),但这只是为了使您的代码更简洁