• python nose测试框架全面介绍八---接口测试中非法参数的断言


    在测接口时,会有这样的场景,输入非法的参数,校验返回的错误码及错误内容

    通常做法为发请求,将错误的返回结果拿出,再进行对比匹配;但存在一个问题,需要再写错误返回分析函数,不能与之前正常发请求的函数共用。

    这时,我们可以用上assertRaises、assertRaisesRegexp;python 2.7中unittest中叫assertRaises,nose.tools中叫assert_raises、assert_raises_regexp

    一、unittest中的assertRaises


    看看官方说明吧:

    可以对异常和告警使用上面两个方法进行断言。

     看个例子吧:

    import unittest
    
    def mode(dividend,divisor):
        remainder = dividend % divisor
        quotient = (dividend - remainder) / dividend
        return quotient,remainder
    
    class RaiseTest():
        def test_raise(self):
            self.assertRaise(ZeroDivisionError, mode,7,0)
    
        def test_raise_regexp(self):
            self.assertRaiseRegexp(ZeroDivisionError, r'.*?Zero', mode,7,0)
    
    if __name__ == '__main__':
        unittest.main()

    注意:里面的引用函数是不带()的,直接是mode

               异常名的也是不带引号的,如果使用自定义的异常是要先引入的

    二、nose中的assertRaises

    还是上面那断代码,改用nose方式

    #coding:utf-8
    '''
    Created on 2018年1月4日
    @author: hu
    '''
    from nose.tools import assert_raises,assert_raises_regexp
    
    def mode(dividend,divisor):
        remainder = dividend % divisor
        quotient = (dividend - remainder) / dividend
        return quotient,remainder
    
    class RaiseTest():
        def test_raise(self):
            assert_raises(ZeroDivisionError, mode,7,0)
            
            
        def test_raise_regexp(self):
            assert_raises_regexp(ZeroDivisionError, r'.*?Zero', mode,7,0)

    执行结果也是一致的

    三:接口测试中常见的用法

    根据上面的断言特证,我们在接口测试中底层的请求封装中可以直接类似这样写:

    def show_xxxxx(self, id):
            """查看xxxx,id为参数"""
            url = "xxxx/%s" % str(volume_id)
            resp, body = self.get(url)
            body = json.loads(body)
            self.expected_success(200, resp.status)
            return body

    其中expected_success是自己的封装,里面封装了抛错,这里就不举例了

    然后在实际测异常参数时,就可以这么写

    def test_get_invalid_xxxxx_id(self):
            # Negative: Should not be able to get xxxxx with invalid id
            self.assertRaises(你自己定义的错误类型,
                              self.show_xxxxxx, '#$%%&^&^')

    或者用assertRaiseRegexp判断错误内容

    这样一来,可以少写很多代码

  • 相关阅读:
    162. Find Peak Element
    475. Heaters
    字符串统计
    数据的交换输出
    偶数求和
    青年歌手大奖赛_评委会打分
    蟠桃记
    素数判定
    多项式求和
    出现Presentation Error的解决方法
  • 原文地址:https://www.cnblogs.com/landhu/p/8192295.html
Copyright © 2020-2023  润新知