robotframework API 源码阅读笔记----robot.utils.asserts

 

http://robot-framework.readthedocs.io/en/latest/autodoc/robot.utils.html#robot.utils.asserts.assert_raises_with_msg

robot.utils.asserts module

Convenience functions for testing both in unit and higher levels.

对于单元测试或者更高级别封装的function非常方便的函数。

Benefits:
  • Integrates 100% with unittest (see example below)
  • 和unittest 可以百分百整合,可共用。
  • Can be easily used without unittest (using unittest.TestCase when you only need convenient asserts is not so nice)
  • 可以非常方便的使用而不必引入unittest.TestCase的测试模块,当你只需要方便的使用asserts没有其他太高要求的时候。
  • Saved typing and shorter lines because no need to have ‘self.’ before asserts. These are static functions after all so that is OK.
  • 可以省略代码,因为不需要 self. 这种东东,当你在使用asserts之前。 这些都是静态功能, 所以没问题的。
  • All ‘equals’ methods (by default) report given values even if optional message given. This behavior can be controlled with the optional values argument.
  • 所有 ‘equals’ 方法默认可以提供report 值的除非在传参里面已经指定, 这些行为是可以通过参数控制的。
Drawbacks:
  • unittest is not able to filter as much non-interesting traceback away as with its own methods because AssertionErrors occur outside.
  • 由于断言错误发生在外部,因此unittest无法像使用其自己的方法那样过滤掉多余的不感兴趣的回溯。

Most of the functions are copied more or less directly from unittest.TestCase which comes with the following license. Further information about unittest in general can be found from http://pyunit.sourceforge.net/. This module can be used freely in same terms as unittest。


Examples:

 1 #!/usr/bin/python
 2 #coding:utf-8
 3 
 4 import unittest
 5 from robot.utils.asserts import assert_equal
 6 
 7 class MyTests(unittest.TestCase):
 8 
 9     def test_old_style(self):
10         self.assertEqual(1, 2, ‘my msg’)
11 
12     def test_new_style(self):
13         assert_equal(1, 1, 'my MSG')
14 
15 if __name__ == '__main__':
16     unittest.main()

======================================================================
FAIL: test_old_style (__main__.MyTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "unittest_test.py", line 10, in test_old_style
    self.assertEqual(1, 2, 'my msg')
AssertionError: my msg

----------------------------------------------------------------------
Ran 2 tests in 0.001s

FAILED (failures=1)

#!/usr/bin/python
#coding:utf-8

import unittest
from robot.utils.asserts import *

class MyTests(unittest.TestCase):

    def test_old_style(self):
        self.assertEqual(1, 2, 'my msg')

    def test_new_style(self):
        assert_equal(1, 1, 'my MSG')

    def test_fail(self):
        '''
        robot.utils.asserts 的fail函数
            报错, 参数是report的值
        '''
        fail("haha")
    def test_assert(self):
        assert_false(True, 'if true report msg')

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

E:Project-workspacepython_test ightScriptvoicecard-python8__VOIP>python unittest_test.py
FF.F
======================================================================
FAIL: test_assert (__main__.MyTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "unittest_test.py", line 22, in test_assert
    assert_false(True, 'if true report msg')
  File "E:SoftwareSoftwarePython2.7.11libsite-packages obotutilsasserts.py", line 108, in assert_false
    _report_failure(msg)
  File "E:SoftwareSoftwarePython2.7.11libsite-packages obotutilsasserts.py", line 219, in _report_failure
    raise AssertionError(msg)
AssertionError: if true report msg

======================================================================
FAIL: test_fail (__main__.MyTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "unittest_test.py", line 20, in test_fail
    fail("haha")
  File "E:SoftwareSoftwarePython2.7.11libsite-packages obotutilsasserts.py", line 102, in fail
    _report_failure(msg)
  File "E:SoftwareSoftwarePython2.7.11libsite-packages obotutilsasserts.py", line 219, in _report_failure
    raise AssertionError(msg)
AssertionError: haha

======================================================================
FAIL: test_old_style (__main__.MyTests)
----------------------------------------------------------------------
Traceback (most recent call last):
  File "unittest_test.py", line 10, in test_old_style
    self.assertEqual(1, 2, 'my msg')
AssertionError: my msg

----------------------------------------------------------------------
Ran 4 tests in 0.001s

FAILED (failures=3)

从robot提供的源码可以看出assert失败的处理直接raise 了ERROR出来,会跳出执行程序
def _report_failure(msg):
    if msg is None:
        raise AssertionError()
    raise AssertionError(msg)


def _report_inequality_failure(obj1, obj2, msg, values, delim, extra=None):
    if not msg:
        msg = _get_default_message(obj1, obj2, delim)
    elif values:
        msg = '%s: %s' % (msg, _get_default_message(obj1, obj2, delim))
    if values and extra:
        msg += ' ' + extra
    raise AssertionError(msg)
其他的用法大同小异,具体的可以参照官方文档, 以上只是举了几个例子。
robot.utils.asserts.fail(msg=None)[source]

Fail test immediately with the given message.

robot.utils.asserts.assert_false(expr, msg=None)[source]

Fail the test if the expression is True.

robot.utils.asserts.assert_true(expr, msg=None)[source]

Fail the test unless the expression is True.

robot.utils.asserts.assert_not_none(obj, msg=None, values=True)[source]

Fail the test if given object is None.

robot.utils.asserts.assert_none(obj, msg=None, values=True)[source]

Fail the test if given object is not None.

robot.utils.asserts.assert_raises(exc_class, callable_obj, *args, **kwargs)[source]

Fail unless an exception of class exc_class is thrown by callable_obj.

callable_obj is invoked with arguments args and keyword arguments kwargs. If a different type of exception is thrown, it will not be caught, and the test case will be deemed to have suffered an error, exactly as for an unexpected exception.

If a correct exception is raised, the exception instance is returned by this method.

robot.utils.asserts.assert_raises_with_msg(exc_class, expected_msg, callable_obj, *args, **kwargs)[source]

Similar to fail_unless_raises but also checks the exception message.

robot.utils.asserts.assert_equal(first, second, msg=None, values=True)[source]

Fail if given objects are unequal as determined by the ‘==’ operator.

robot.utils.asserts.assert_not_equal(first, second, msg=None, values=True)[source]

Fail if given objects are equal as determined by the ‘==’ operator.

robot.utils.asserts.assert_almost_equal(first, second, places=7, msg=None, values=True)[source]

Fail if the two objects are unequal after rounded to given places.

inequality is determined by object’s difference rounded to the given number of decimal places (default 7) and comparing to zero. Note that decimal places (from zero) are usually not the same as significant digits (measured from the most signficant digit).

robot.utils.asserts.assert_not_almost_equal(first, second, places=7, msg=None, values=True)[source]

Fail if the two objects are unequal after rounded to given places.

Equality is determined by object’s difference rounded to to the given number of decimal places (default 7) and comparing to zero. Note that decimal places (from zero) are usually not the same as significant digits (measured from the most significant digit).

 
原文地址:https://www.cnblogs.com/brownz/p/9244147.html