用户认证
在我们测试 web 接口时,不管所用的工具还是Requests 库都提供的 Auth 的选项,这个选项同样需要填写username 和 password,但这里 Auth 的用户名和密码与系统登录的用户名密码有区别,因为Auth不是作为GET/POST请求的参数发送的,在requests库里面是一个控制参数,是一个元组类型。
例子:
r = requests.get(url,auth=('username','password'), params={'id':'111'})
result= r.json()
用户认证测试还是蛮简单的,一般考虑的用例:
- auth为空,不传输auth;
- auth错误;
- auth正确;
- 其它用例。
数字签名
鉴权
数字签名一般是指通过鉴权来保证接口传输的安全性, 通过客户端密匙和服务端的密匙相匹配就是鉴权
例如签名钥匙sign = asd123,
加上签名后,接口传输参数是:
http://xxx:8080/?a=1&b=2&sign=asd123,但是明文传输sign参数是不安全的,所以要经过通过md5加密 。
所以,密匙跟着参数一起传输到服务器的。
MD5加密例子:
。。。。。。
数据防篡改
将整个接口参数生成加密字符串,安全性更高,只是所谓的全参加密,但是全参加密也有弊端,因为MD5是不可逆的,服务器也必须知道接口的参数值才能MD5加密验证,否则验证失败。一般接口设计时对客户端请求参数并不知道。一般不用全参加密。
在接口开发过程中,一般通过时间戳+sign作为密匙加密传输。
这种情况测试接口时,通过获取时间戳和拿到sign密匙后,再拼接成一个字符串,再加密这个字符串,然后和参数一起传输。
MD5时间戳和sign的例子:
>>> sign_key = 'asd123' #key
>>> from time import *
>>> now_time = time() #获取当前时间
>>> c_time = str(now_time).split('.')[0] #获取.之前的时间戳
>>> sign = c_time + sign_key #拼接成一个字符串
>>> sign
'1493187284asd123'
>>> import hashlib #MD5加密
>>> md5 = hashlib.md5()
>>> sign_bytes_uft8 = sign.encode(encoding='utf-8')
>>> md5.update(sign_bytes_uft8)
>>> sign_md5 = md5.hexdigest()
>>> sign_md5
'a1f3a6ac4416dea5a148967b81ce68f9'
当前时间戳+key加密后,就可以作为参数直接传输了,下面测测试数字签名的接口用例:
测试接口需要根据怎么靠法接口来测试,
请求参数错误;
签名参数为空;
签名错误;
请求超时(如果开发接口时有请求时间限制的话)
数字签名正确;
其他。。。