在测接口时,会有这样的场景,输入非法的参数,校验返回的错误码及错误内容
通常做法为发请求,将错误的返回结果拿出,再进行对比匹配;但存在一个问题,需要再写错误返回分析函数,不能与之前正常发请求的函数共用。
这时,我们可以用上assertRaises、assertRaisesRegexp;python 2.7中unittest中叫assertRaises,nose.tools中叫assert_raises、assert_raises_regexp
一、unittest中的assertRaises
看看官方说明吧:
可以对异常和告警使用上面两个方法进行断言。
看个例子吧:
importunittestdefmode(dividend,divisor):
remainder= dividend %divisor
quotient= (dividend - remainder) /dividendreturnquotient,remainderclassRaiseTest():deftest_raise(self):
self.assertRaise(ZeroDivisionError, mode,7,0)deftest_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 importassert_raises,assert_raises_regexpdefmode(dividend,divisor):
remainder= dividend %divisor
quotient= (dividend - remainder) /dividendreturnquotient,remainderclassRaiseTest():deftest_raise(self):
assert_raises(ZeroDivisionError, mode,7,0)deftest_raise_regexp(self):
assert_raises_regexp(ZeroDivisionError, r'.*?Zero', mode,7,0)
执行结果也是一致的
三:接口测试中常见的用法
根据上面的断言特证,我们在接口测试中底层的请求封装中可以直接类似这样写:
defshow_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是自己的封装,里面封装了抛错,这里就不举例了
然后在实际测异常参数时,就可以这么写
deftest_get_invalid_xxxxx_id(self):#Negative: Should not be able to get xxxxx with invalid id
self.assertRaises(你自己定义的错误类型,
self.show_xxxxxx,'#$%%&^&^')
或者用assertRaiseRegexp判断错误内容
这样一来,可以少写很多代码