Python UnitTest-如何访问subTests消息而不必手动编写它们?

时间:2019-08-13 07:02:54

标签: python unit-testing testing logging

一点点上下文:我正在将Python和Selenium用于QA Web Automation,并且正在使用Page Object Model模式。 我目前正在使记录器成为系统的一部分,并且我想使代码更高效,而无需 不得不写很多重复的代码。我在文档中检查了subTests,但是找不到特别的东西,这就是我在这里的原因。因此,我想知道是否有一种方法可以访问这部分代码(因此,我不必 每次都写每个记录器消息,这不是很实际):

  class TestScenario(unittest.TestCase):

      .... # set Up class

      def logger(self,info):
          logger.error(f"Error happened at {info}")

      def test_method(self):

          with self.subTest("MESSAGE"):---------------------------------------------                                     
                                                                                   |
              try:                                                                 |
                  ... something                                                    |
              except AssertionError:                                               | 
                  self.logger(#Is there a way to access subTest msg parameter?) <---
                  raise

          .... other subTests which will follow the same pattern

提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以执行self.logger(self._subtest._message)来获取消息。

当心,您正在访问unittest的内部变量,因此该代码可以在下一版本的python中被破坏,而不会发出警告。

答案 1 :(得分:1)

可能的方法:

class Message:
    def __init__(self, message=''):
        self.message = message
    def __str__(self):
        return self.message

# separate message for every subtest or one message continually modified between subtests
msg = Message('qwe')

...
with self.subTest(msg=msg):
    msg.message = 'asd'  # access or modify
    self.assertTrue(True)
...

或者您可以在测试的message方法中创建属性setUp,并将其用于将消息传递到subTest中,并在需要时访问/修改。