学习网址:http://www.python3.vip/
一、概念
接口测试:对软件系统消息交互接口的测试
二、接口测试流程
1.依据接口规范,写测试用例
2.使用软件工具直接通过消息接口对被测系统进行消息收发
3.验证被测系统行为是否正确
注意:明确测试对象是哪个,通常是服务端测试,一般用工具模拟客户端发消息给服务端,查看服务端响应
三、API接口测试
1.获取网页、图片、css资源信息,不需特别数据处理,直接从服务端读取文件,返回改客户端,不是api接口
2.api接口:需要服务端程序进行一番处理,如:对请求的权限检查、从数据库中读出数据,进行信息过滤和格式转换,最后由HTTP响应返回给客户端
3.测试工具:postman、jmeter、python的requests库,原理:构建HTTP请求消息,并且解析http响应消息,用户来判断是否符合预期
四、接口测试工作
1.获取接口文档、评审文档、了解接口的实现细节
2.根据接口文档,写出测试用例
3.等产品发布后,根据测试用例,使用软件工具,直接通过消息接口对被测系统进行消息收发、验证被测系统行为是否正确
五、request库
1.request库用于发送Http请求、接收响应、简单的爬虫工具
2.官网文档:Requests官方网站,安装命令pip install requests
3.请求方法:常见的get、post、put、delete等,发哦少年宫请求方法调用同名的函数
4.响应消息:返回requests库库里定义的response类实例对象
六、filder工具使用
1.filder代理式抓包
要 根据目标主机地址过滤
HTTP消息, 在上图所示 左边的红色箭头处, 选择 show only the following hosts
然后,在下边的方框,里面填写要抓取的HTTP消息的目标地址, 可以使用* 作为通配符
过滤包设置,只抓发往某个目的的包
要 根据目标主机地址过滤
HTTP消息, 在上图所示 左边的红色箭头处, 选择 show only the following hosts
然后,在下边的方框,里面填写要抓取的HTTP消息的目标地址, 可以使用* 作为通配符
注意:修改完设置后,一定要点击一下 下图箭头所示处,才能保存生效
安装好以后,通常我们需要设置一下抓包过滤项,否则抓到的包太多,不方便分析。
查看包内容
2.浏览器代理设置(谷歌默认使用代理)
3.使用代码
4.手机抓包
确保手机使用wifi与fiddler运行同一个子网
然后 需要设置fidder, 允许远程机器连接自己,点击菜单option,点击connections标签,勾选 Allow remote computer to connect, 如下所示
然后打开手机的 WIFI 设置, 长按
当前的 WiFi连接,选择 修改网络
。
然后点击高级选项下拉框,在代理设置里面选择手动,如下所示
然后填入fiddler所在机器的 IP地址(通过ipconfig命令查看) 和代理端口 8888, 点击完成 ,如下所示
如果是需要抓 HTTPS包,需要导入证书,参考这篇文章
七、构造请求消息
1.get请求 https://www.baidu.com/s?wd=iphone&rsv_spt=1
问号后面的部分 wd=iphone&rsv_spt=1
就是 url 参数, 参数放到一个字典里面,然后把字典对象传递给 Requests请求方法的 params 参数
2.post请求
传递参数指定参数 headers 的值为这个字典
八、构造消息体
1.响应状态码
2.响应消息头
response.headers 对象的类型 是 继承自 Dict 字典 类型的一个 类。
我们也可以像操作字典一样操作它,比如取出一个元素的值
print(response.headers['Content-Type'])
3.响应消息体
要获取响应的消息体的文本内容,直接通过response对象 的 text
属性即可获取,equests 会根据响应消息头(比如 Content-Type)对编码格式做推测。
但是有时候,服务端并不一定会在消息头中指定编码格式,这时, requests的推测可能有误,需要我们指定编码格式。
十、cookies与session关系
用户使用客户端登录,服务端进行验证(比如验证用户名、密码)。
验证通过后,服务端系统就会为这次登录创建一个session。
session就是一个数据结构,保存该客户这次登录操作相关信息。通常保存在数据库中。
同时创建一个唯一的sessionid(就是一个字符串),标志这个session。
然后,服务端通过HTTP响应,把sessionid告诉客户端。
客户端在后续的HTTP请求消息头中,都要包含这个sessionid。这样服务端就会知道,这个请求对应哪个session,从而知道对应哪个客户。
十一、requests处理session-cookie
equests库给我们提供一个 Session
类 ,通过这个类,无需我们操心, requests库自动帮我们保存服务端返回的 cookie数据, HTTP请求自动 在消息头中放入 cookie 数据。
mport requests
# 打印HTTP响应消息的函数
def printResponse(response):
print('\n\n-------- HTTP response * begin -------')
print(response.status_code)
for k, v in response.headers.items():
print(f'{k}: {v}')
print('')
print(response.content.decode('utf8'))
print('-------- HTTP response * end -------\n\n')
# 创建 Session 对象
s = requests.Session()
# 通过 Session 对象 发送请求
response = s.post("http://127.0.0.1/api/mgr/signin",
data={
'username': 'byhy',
'password': '88888888'
})
printResponse(response)
# 通过 Session 对象 发送请求
response = s.get("http://127.0.0.1/api/mgr/customers",
params={
'action' : 'list_customer',
'pagesize' : 10,
'pagenum' : 1,
'keywords' : '',
})
printResponse(response)