第一章 接口自动测试介绍
1.接口
接口泛指实体把自己提供给外界的一种抽象化物(可以为另一实体),用以由内部操作分离出外部沟通方法,使其能被内部修改而不影响外界其他实体与其交互的方式。
2.自动化接口测试
自动化测试是把以人为驱动的接口测试行为转化为机器执行的一种过程。
第二章 Requests接口请求
2.1、安装requests库
1.Requests 是用Python语言编写,基于 urllib,采用 Apache2 Licensed 开源协议的 HTTP 库。它比 urllib 更加方便,可以节约我们大量的工作,完全满足 HTTP 测试需求。
2.安装命令:pip3 install requests
2.2、发送请求
1.http请求方式
HTTP1.0 定义了三种请求方法: GET, POST 和 HEAD方法。
HTTP1.1 新增了六种请求方法:OPTIONS、PUT、PATCH、DELETE、TRACE 和 CON
GET:请求服务器资源。(无请求体)
POST:提交资源。(有请求体)
HEAD:类似于 GET 请求,只不过返回的响应中没有具体的内容,用于获取报头。
PUT:从客户端向服务器传送的数据取代指定的文档的内容。
DELETE:请求服务器删除指定的页面。
上面请求方法可以跟数据库的CRUD增删改查操作对应起来:
CREATE :PUT
READ:GET
UPDATE:POST
DELETE:DELETE
2.通过requests发送http请求
import requests
get请求
response = requests.get(“https://www.xiaonengedu.com/”)
print(response.status_code)
post请求
response = requests.post(“https://www.baidu.com/”)
print(response.content.decode())
2.3、请求参数设置
1.get请求设置参数
import requests
url = “https://www.baidu.com/”
params = {“username”: “xiaoneng”, “password”: “123”}
r = requests.get(url=url, params=params)
2.post请求设置参数
2-1、dict类型参数:
post请求参数data
data = {“username”: “xiaoneng”, “password”: “123”}
response = requests.post(url=url, data=data)
print(response.content.decode())
2-2、json字符串类型参数:
import json
post请求参数json格式
data = {“username”: “xiaoneng”, “password”: “123”}
json_data = json.dumps(data)
response = requests.post(url=url, json=json_data)
print(response.content.decode())
2.4、设置请求头headers
import requests
#定义基准参数
header={“userId”:“2223112”}
r=requests.get(“http://www.baidu.com”,headers=header)
print(r.url)
2.5、设置请求的超时时间
4.设置超时时间
response = requests.get(“http://www.baidu.com”, timeout=10) # 服务器模拟器的是5秒延迟
print(response.content.decode())
2.6、设置忽略证书
verify=True 不忽略证书校验 (默认)
verify= False 忽略证书校验
在请求时添加verify
respones = requests.post(“https://www.baidu.com/index.php?tn=28035039_3_pg”, verify=False)
2.7、响应结果
1.响应结果
response.status_code #响应状态码
response.raw #返回原始响应体,也就是 urllib 的 response 对象,使用 r.raw.read() 读取
response.content #字节方式的响应体,会自动为你解码 gzip 和 deflate 压缩
response.text #字符串方式的响应体,会自动根据响应头部的字符编码进行解码
response.headers #以字典对象存储服务器响应头,但是这个字典比较特殊,字典键不区分大小写,若键不存在则返回None
2.编码
HTTP响应中Content-Type字段没有指定charset,则默认页面是’ISO-8859-1’编码。如果处理英文页面当然没有问题,但是中文页面,就会有乱码!
response.encoding = ‘utf-8’
- header(了解)
Allow
服务器支持哪些请求方法(如GET、POST等)。
Allow: GET, POST, HEAD
Content-Encoding
文档的编码(Encode)方法。用于对特定媒体类型的数据进行压缩。它的值表示消息主体进行了何种方式的内容编码转换。告知客户端应该怎样解码才能获取在 Content-Type 中标示的媒体类型内容。
Content-Encoding: gzip
Content-Encoding: zlib
Content-Encoding: deflate
Content-Length
表示内容长度。只有当浏览器使用持久HTTP连接时才需要这个数据。。
Content-Length: 112322
Content-Type
表示后面的文档属于什么MIME类型。Servlet默认为text/plain,但通常需要显式地指定为text/html。
‘Content-Type’: ‘text/html’
Date
当前的服务器时间。
‘Date’: ‘Fri, 13 Sep 2019 10:59:45 GMT’
Expires
文档过期时间
Expires: Wed, 21 Oct 2015 07:28:00 GMT
Refresh
表示浏览器应该在多少时间之后刷新文档,以秒计。
Server
服务器名字。
‘Server’: ‘bfe/1.0.8.18’
Set-Cookie
服务器名字设置的Cookie。
‘Set-Cookie’: ‘BDORZ=27315; max-age=86400; domain=.baidu.com; path=/’
详细文档
https://developer.mozilla.org/zh-CN/docs/Web/HTTP/Headers/Allow
2.8、响应状态码
有当浏览器发请求后,服务器会返回一个包含HTTP状态码的信息头(server header)用以响应浏览器的请求。
下面是常见的HTTP状态码:
200 - 请求成功
301 - 资源(网页等)被永久转移到其它URL
404 - 请求的资源(网页等)不存在
500 - 内部服务器错误
HTTP状态码分类
分类 分类描述
1** 信息,服务器收到请求,需要请求者继续执行操作
2** 成功,操作被成功接收并处理
3** 重定向,需要进一步的操作以完成请求
4** 客户端错误,请求包含语法错误或无法完成请求
5** 服务器错误,服务器在处理请求的过程中发生了错误
详细https://www.runoob.com/http/http-status-codes.html
2.9、设置响应编码
有时候我们访问接口后,返回并不是UTF-8(一般后台不会这么干),有中文就会乱码。这个时候我们需要做一个编码处理
可以举例看看直接访问百度页面,这个页面默认返回ISO-8859-1,返回有中文就会乱码
查看编码
print(respones.encoding )
设置编码为utf-8
respones.encoding = “utf-8”
2.10、cookies操作
respones.cookies 获取所有cookies
respones.cookies.get(“xx”) 获取指定cookies
requests.get(url,cookies={xx:xxx}) 设置cookies
respones = requests.post(“http://www.youdao.com/”)
获取所有cookie
print(respones.cookies)
获取指定cookie
cookies:RequestsCookieJar = respones.cookies
print(cookies.get(‘JSESSIONID’))
time.sleep(3)
设置添加cookie
respones = requests.post(“http://www.youdao.com/”, cookies={“JSESSIONID”: cookies.get(“JSESSIONID”)})
第二次获取cookies的时候,因为已经传递正确的cookie 所有不再返回jsessionid
print(respones.cookies)