HTTP协议模拟-requests库

94 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情

安装requests库

pip 安装

pip install requests

Pipenv

如果你更喜欢使用 Pipenv 来管理 Python 包,你可以运行以下命令:

 pipenv install requests

使用

导包

import requests

通用方法

method,url [,data]

  • get请求:

    requests.request(method='GET',url='http://localhost:8081/agileone/')

  • post请求:

     requests.request(method='POST', url='[http://localhost:8081/agileone/index.php/common/login](http://localhost:8081/agileone/index.php/common/login)', data={"username":"admin","password":"admin","savelogin":"true"})
    

定制方法

  • GET请求
`res3=requests.get(url='`[`http://localhost:8081/agileone/`](http://localhost:8081/agileone/)`')#发送GET请求`
  • POST请求*
res4=requests.post(url='http://loalhost:8081/agileone/index.php/common/login',
                   data={"username":"admin","password":"admin","savelogin":"true"})

res5=requests.post(url='http://localhost:8081/agileone/index.php/common/login',
                   headers={'Content-Type': 'application/x-www-form-urlencoded'},
                   data='username=admin&password=admin&savelogin=true')

获取相应

  • res.text 获取文本
  • res.content 获取字节型文本【res2.content.decode() 字节型转换为文本型】
  • res.status_code 获取响应状态码
  • res.cookies 获取cookie信息,返回cookiejar
  • res.headers.get('Set-Cookie') 获取cookie信息,依据字典中的键名获取键值信息
  • res.request 获取请求方法
  • res.url 获取请求地址
  • res.headers 获取响应头部信息

保持登录

cookie手工管理

  • headers:字典形式传递

  • 直接传递cookies:以cookieJar形式

    requests.post(url=url,data=data,cookies=res5.cookies)

  • 直接传递cookies,以字典形式

    cookies=requests.utils.dict_from_cookiejar(res5.cookies)#RequestsCookieJar-->dict

    requests.post(url=url,data=data,cookies=cookies) 发请求

session自动管理

  • 以session方式建立会话,将cookie实现自动管理,先登录,再发其他的请求
sess=requests.session()#创建会话
sess.post(url='http://192.168.200.148:8081/agileone/index.php/common/login',
          headers={'Content-Type': 'application/x-www-form-urlencoded'},
          data='username=admin&password=admin&savelogin=true')

例子:

image.png

上传文件

image.png

断言

  • 断言:状态码+响应结果结合断言 200 +符合预期

  • 断言思路

    • 1.有返回值,则用接口返回值断言【状态码+响应结果结合断言 200 +符合预期】【结果形式:固定的字符串--相等?;页面源代码--关键字包含?;动态的字符串--正则表达式匹配?,json字符串--转换为字典依据键名取键值?】
    • 2.没有返回值?业务逻辑断言--借助业务相关的接口进行断言【出库接口,出库成功,执行批次查询的接口获取库存信息更新正确性?】
    • 3.没有返回值?数据库断言--慎重!!一定要搞清楚表结构,有可能更新了多张表【例如出库成功后,明细表更新,库存表更新,会员表更新,销售表更新】

接口测试:

关注系统间的组件之间的接口【外部接口,支付接口--第三方:微信 支付宝 银联等--沙箱测试】,系统内部的接口【内部】

测试思路--测试关注点【功能性,安全性,性能】:接口参数校验,正常业务,异常业务(空,错误,无效cookie,错误的cookie,空cookie)---1个业务可能一个接口,也可能是多个接口,考虑关联性【上下游关系】安全测试-接口的加密?订单信息篡改-篡改金额,重复订单?JS注入 性能测试 可用性--接口规范性

接口文档

文档描述

名称:接口功能名称

描述:业务类描述

URL:访问的接口地址

调用方式:请求方法GET,POST

传入参数:接口参数,参数的数据局类型及约束【非空,长度,精度,规则约束】 login 接口 username password verifycode

返回值:返回值类型 text json html

状态码:现实的产品大多不用HTTP原生的状态码,将状态码与业务挂钩 10001 成功 10002 失败 10003 认证失败 10004参数错误

文档模板

image.png

接口测试用例

image.png

image.png