接口自动化测试笔记(requests)

requests库:
python下的http请求库,可以发起http请求,并且接收接口的响应。
主要接口类型:get、post、delete、put

get请求:
传参方式:
1、参数写在url里
2、参数不写在url里,参数定义为字典传参给形参params

发起get请求案例:
response = requests.get(url)
t = response.text #接收响应的正文(字符串格式)
j = response.json() #接收响应的json,json会转为字典
h = response.headers #接收响应头
c = response.cookies # 接收响应的cookie,响应的cookie格式为jar格式,可以用dict函数将cookie转为字典
c_dic = dict(c) # 把jar格式cookie转为字典
code = response.status_code #接收响应的状态码
r = response.raw #接收原始响应结果

当接收响应的正文中有ç¨ç¾åº¦åå¿这种软码时,使用content,以二进制形式接收响应
如果content接收的数据中有\xe7\x99\xbe格式的数据,使用decode(utf-8)解析
r.content
r.content.decode('utf-8')


post请求:
如何判断参数是传data还是json:
1、请求头中的Content-Type的值如果是application/json 时,参数传给json,其它传data
2、查看参数的格式:
    {'key1':'value1','key2':'value2'}---传参给json
    key1=vaule1&key2=value2-----------传参给data
其它的如header或cookie以headers=xxx,cookies=xxxx传参给kwargs

cookie:cookie是存储于计算机中的变量,保存在客户端,cookie是浏览器提供的一种机制,可以
通过java script进行控制(设置、读取、删除)。cookie保存在客户端的目的是为了下次访问网站时
可以直接读取出来发送到服务端,在http的请求的header中有个cookies域专门存放cookie。

cookie获取:
1、cookie在重定向后的url上,可以用正则提取
2、cookie在响应的body中,如果响应的body是json可以可以用键提取,如果是字符串可以用正则提取
3、cookie在响应的header中,可以通过r.cookies获取,得到的cookie是jar格式,可以使用dict函数转为字典。


session():session()不是http协议中的session,requests库下的session()是一个微型的无界面的浏览器,
可以自动化管理cookie。


使用接口文件上传:
1、需要单独定义文件上传的参数,数据类型为列表。
例:[('接口的文件上传参数名',('上传后文件显示名称',open('文件所在路径','rb'),'MIME类型'))]
2、post方法中,实现文件上传,需要以files=xxx传参

ajax异步请求(X-Requested-With:XMLHttpRequest):
ajax(asynchronous javascript and XML 异步JavaScript和XML),是一种创建交互式、快速动态
网页应用的网页开发技术,在无需重新加载整个网页的情况下,能够更新部分网页。
通过在后台和服务器进行少量数据交换,ajax可以实现网页的异步更新。

如何判断是传统的http请求还是ajax异步请求?
如果在请求的header中包含X-Requested-With:XMLHttpRequest,说明这是一个ajax请求。

当接口是一个ajax异步请求时,需要在发起requests请求时,在请求的header中带上参数X-Requested-With:XMLHttpRequest模拟ajax请求,这样接口才会返回json().


重定向(Redirect):就是将网络请求重新定个方向转到其他位置。
重定向状态码:
301: 永久重定向
302:暂时重定向

获取重定向后url:
重定向后url中在响应的header中,Location参数对应的值就是重定向后url
在发起请求时,需要设置参数 allow_redirects = False
注意:allow_redirects = True时,默认启动重定向,会自动处理重定向后的url,就无法获取了。


获取接口响应时间(elapsed):
response = se.post(url=login_url,data=login_data)
response.elapsed #接口响应时间,精确到微秒
response.elapsed.total_seconds() # 单位是秒,精确到微秒,一般采用这个
response.elapsed.microseconds # 单位是微秒,一般不用
response.elapsed.seconds # 单位是秒,精确到秒,一般不用


jsonpath:解析json,从json中提取想要的值(主要用于接口之间的关联和断言)
# $:根节点   @:当前节点  .或[]:子节点(字典用. 列表用[])
#* 表示任意节点     ..:不管在任何位置,选取符合条件的节点
# [,]:支持多选   ?():支持过滤操作
# 支持 ==   !=  <   <=


jsonschema:可以判断json是否符合某个模式,校验json的组成规则
pip install jsonschema

发起请求时需要设置代理:
一般工作中不需要设置代理,除非公司网络管理比较严格。
如何设置代理:
在get或post方法中设置proxies参数

webservice接口调用:
webservice接口特点:
1、接口中实现的方法和要求的参数一目了然
2、不区分大小写
3、不用担心中文软码
4、传递的参数可以是数组、对象等数据类型。

缺点:相较于http请求速度较慢,因为要解析xml

需要使用suds库下的方法调用webservice接口

webservice接口网站:http://www.webxml.com.cn/zh_cn/index.aspx

爬虫(爬取网站页面上的信息):当接口的传参需要从页面获取时,可以采取爬虫的方式获取页面信息传入接口

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值