接口测试(四)—— Requests库发送请求、Cookie、Session、UnitTest管理测试用例

news2024/10/6 6:01:45

目录

一、Requests库

1、Requests库安装和简介

1.1 简介

1.2  安装

1.3 查验

2、设置http请求语法

2.1 案例1

2.2 案例2

2.3 案例3

2.4 案例4

2.5 案例5

3、Cookie

3.1 Cookie简介

3.2 Cookie+Session认证方式

3.3 案例

4、Session

4.1 Session简介

4.2 Session自动管理Cookie

4.3 案例

4.4 面试题 Cookie 和 Session 区别

5、获取指定响应数据

二、UnitTest框架


Python插件:pymysql 、requests 、jsonschema 、parameterized 、htmltestreport

一、Requests库

1、Requests库安装和简介

1.1 简介

Requests库 是 Python编写的,基于urllib 的 HTTP库,使用方便。

1.2  安装

 方法1:

pip install requests

 方法2:

豆瓣镜像:https://pypi.douban.com/simple/

pip install requests -i https://pypi.douban.com/simple/

1.3 查验

步骤1:pip 中查验

# 方法1
pip list

# 方法2
pip show 库名

步骤2:pycharm 中查验 

2、设置http请求语法

resp = requests.请求方法(
                url='URL地址',     
                params={k:v}, 
                headers={k:v},
                data={k:v}, 
                json={k:v}, 
                cookies='cookie数据'(如:令牌))

请求方法:
        get请求 - get()
        post请求 - post()
        put请求 - put()
        delete请求 - delete()

url: 待请求的url - string类型
params:查询参数 - 字典
headers:请求头 - 字典
data:表单格式的 请求体 - 字典
json:json格式的 请求体 - 字典
cookies:cookie数据 - string类型

resp:响应结果

2.1 案例1

入门案例:使用Requests库访问 百度 http://www.baidu.com

2.2 案例2

【带 查询参数get请求】使用Requests库,请求 tpshop商城 搜索商品接口。查询 iphone

import requests
# 发送 get 请求,指定 url,获取 响应结果
# 方法1:
# resp = requests.get(url="http://tpshop-test.itheima.net/Home/Goods/search.html?q=iPhone")
# 方法2:
resp = requests.get(url="http://tpshop-test.itheima.net/Home/Goods/search.html",
                    params={"q": "iPhone"})
# 查询响应结果
print(resp.text)

2.3 案例3

【带 表单数据post请求】使用Requests库,完成 tpshop商城 登录接口调用。返回 ”验证码错误“ 即可。

import requests

# 发送 post 请求,指定url、请求头、请求体, 获取响应结果
resp = requests.post(
        url="http://tpshop-test.itheima.net/index.php?
            m=Home&c=User&a=do_login&t=0.7094195931397276",
        headers={"Content-Type": "application/x-www-form-urlencoded"},
        data={"username": "13012345678", "password": "1234567", "verify_code":"8888"})

# 打印响应结果 - 文本
print(resp.text)
# 打印响应结果 - json
print(resp.json())

2.4 案例4

【带 json数据post请求】使用Requests库,完成 iHRM系统 成功登录。返回 ”令牌数据“。

import requests

# 发送 post 登录请求,指定 url、请求头、请求体,获取响应结果
resp = requests.post(url="http://ihrm-test.itheima.net/api/sys/login",
                    # headers={"Content-Type": "application/json"},
                    json={"mobile": "13800000002", "password": "123456"})
# 打印响应结果
print(resp.json())

2.5 案例5

【发送 put、delete请求】使用Requests库发送 ihrm系统 修改员工信息、删除员工信息 请求。

# -------- 修改 put
import requests

resp = requests.put(
    url="http://ihrm-test.itheima.net/api/sys/user/1467780995754229760",
    headers={"Authorization": "Bearer 4c51c601-c3f7-4d1a-a738-7848f2439f45"},
    json={"username": "齐天大圣"})

print(resp.json())

# -------- 删除 delete
import requests

resp = requests.delete(
    url="http://ihrm-test.itheima.net/api/sys/user/1467780995754229760",
    headers={"Authorization": "Bearer 4c51c601-c3f7-4d1a-a738-7848f2439f45"})

print(resp.json())

3、Cookie

3.1 Cookie简介

  • 简介:工程师 针对 http协议是无连接、无状态特性,设计的 一种技术。 可以在浏览器端 存储用户的信息。
  • 特性:
    • cookie 用于存储 用户临时的不敏感信息。
    • cookie 位于浏览器(客户端)端。默认大小 4k(可以调整)
    • cookie 中的数据,可以随意被访问,没有安全性可言。
    • cookie 中存储的数据类型, 受浏览器限制。 

3.2 Cookie+Session认证方式

在计算机中,认证用户身份的方式有多种!学习路线中接触 2种:

  • ihrm项目:token认证。
  • tpshop项目:cookie+Session认证。

3.3 案例

完整实现 TPshop商城登录,并获取 “我的订单” 页面数据。
获取验证码:http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=verify

登录:http://tpshop-test.itheima.net/index.php?m=Home&c=User&a=do_login

我的订单:http://tpshoptest.itheima.net/Home/Order/order_list.html

import requests

# 发送 获取验证码请求
resp_v = requests.get(url="http://tpshop-test.itheima.net/index.php?
m=Home&c=User&a=verify&r=0.21519623710645064")

# 从 获取验证码 的响应结果,提取 cookie
my_cookie = resp_v.cookies

# 发送 登录请求 url、请求头、请求体。 携带 cookie。 得响应结果
resp = requests.post(url="http://tpshop-test.itheima.net/index.php?
m=Home&c=User&a=do_login&t=0.7094195931397276",
                    # headers={"Content-Type": "application/x-www-form-urlencoded"},
                    data={"username": "13012345678", "password": "12345678", "verify_code":
"8888"},
                    cookies=my_cookie)

# 打印响应结果
print(resp.json())

# 发送 查看我的订单 请求
resp_o = requests.get(url="http://tpshop-test.itheima.net/Home/Order/order_list.html",
                    cookies=my_cookie)
print(resp_o.text)

4、Session

4.1 Session简介

  • 简介:也叫 会话。通常出现在网络通信中,从客户端借助访问终端登录上服务器,直到 退出登录 所产生的通信数据,保存在 会话中。
  • 特性:
    • Session 用于存储 用户的信息。
    • Session 位于服务端。大小直接使用服务器存储空间
    • Session 中的数据,不能随意被访问,安全性较高。
    • Session 中存储的数据类型,受服务器影响,几乎能支持所有的数据类型。

4.2 Session自动管理Cookie

因为 Cookie 中的 数据,都是 Session 传递的。因此,Session 可以直接 自动管理 cookie 

4.3 案例

借助session重新实现 上述 TPshop商城登录,并获取 “我的订单” 页面数据。
实现步骤:
1. 创建一个 Session 实例。
2. 使用 Session 实例,调 get方法,发送 获取验证码请求。(不需要获取cookie)
3. 使用 同一个 Session 实例,调用 post方法,发送 登录请求。(不需要携带 cookie)
4. 使用 同一个 Session 实例,调用 get方法,发送 查看我的订单请求。(不需要携带 cookie)
 

import requests
# 1. 创建一个 Session 实例。
session = requests.Session()
# 2. 使用 Session 实例,调 get方法,发送 获取验证码请求。(不需要获取cookie)
resp_v = session.get(url="http://tpshop-test.itheima.net/index.php?
m=Home&c=User&a=verify&r=0.21519623710645064")
# 3. 使用 同一个 Session 实例,调用 post方法,发送 登录请求。(不需要携带 cookie)
resp = session.post(url="http://tpshop-test.itheima.net/index.php?
m=Home&c=User&a=do_login&t=0.7094195931397276",
                    data={"username": "13012345678", "password": "12345678", "verify_code":
"8888"})
print(resp.json())
# 4. 使用 同一个 Session 实例,调用 get 方法,发送 查看我的订单请求。(不需要携带 cookie)
resp_o = session.get(url="http://tpshop-test.itheima.net/Home/Order/order_list.html")

print(resp_o.text)

4.4 面试题 Cookie 和 Session 区别

1. 数据存储位置:
        cookie存储在浏览器;session存储在服务器。
2. 安全性:
        cookie中的数据可以随意获取,没有安全性可言。Session的数据多为加密存储,安全较高!
3. 数据类型:
        cookie支持的数据类型受浏览器限制,较少;Session直接使用服务器存储,支持所有数据类型
4. 大小:
        cookie大小默认 4k; Session 大小约为服务器存储空间大小

5、获取指定响应数据

常用:

  • 获取 URL:resp.url
  • 获取 响应状态码:resp.status_code
  • 获取 Cookie:resp.cookies
  • 获取 响应头:resp.headers
  • 获取 响应体:
    • 文本格式:resp.text
    • json格式:resp.json()
import requests
resp = requests.get(url="http://www.baidu.com")
# - 获取 URL:resp.url
print("url =", resp.url)
# - 获取 响应状态码:resp.status_code
print("status_code =", resp.status_code)
# - 获取 Cookie:resp.cookies
print("cookies =", resp.cookies)
# - 获取 响应头:resp.headers
print("headers =", resp.headers)
# - 获取 响应体:
# - 文本格式:resp.text
print("body_text =", resp.text)
# - json格式:resp.json() 当显示 JSONDecodeError 错误时,说明 resp 不能转换为 json格式数据。
print("body_json =", resp.json())

二、UnitTest框架

UnitTest 是开发人员用来实现 “单元测试” 的框架。测试工程师,可以在自动化 “测试执行” 时使用。
使用 UnitTest 的好处:
1. 方便管理、维护测试用例。
2. 提供丰富的断言方法。
3. 生成测试报告。(需要插件 HTMLTestReport) 

参考:软件测试 —— Python(七)之UnitTest框架与测试报告

ihrm案例

==登录成功==

import unittest

# 定义测试类
class TestIhrmLogin(unittest.TestCase):
    # 添加测试方法
    def test01_login_ok(self):
        # 发送 post 登录请求,指定 url、请求头、请求体,获取响应结果
        resp = requests.post(url="http://ihrm-test.itheima.net/api/sys/login",
                            json={"mobile": "13800000002", "password": "123456"})
        # 打印响应结果
        print(resp.json())
        # 断言- 响应状态码为 200
        self.assertEqual(200, resp.status_code)
        # 断言 success 的值为 true
        self.assertEqual(True, resp.json().get("success"))
        # 断言 code 的值为 10000
        self.assertEqual(10000, resp.json().get("code"))
        # 断言 message 的值为 操作成功!
        self.assertIn("操作成功", resp.json().get("message"))

assertEqual(参1,参2) :
参1:预期结果。 参2:实际结果。
成功:完全相等。断言通过。不报错!
失败:报错!


assertIn(参1,参2):
参1:预期结果。参2:实际结果。
成功:实际结果中,包含预期结果。断言通过。不报错!
失败:报错!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/83413.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Flask从入门到放弃二(请求与相应、Session的使用与源码分析、Flash闪现、异步说明、请求拓展、BluePrint蓝图)

文章目录一、请求与响应1)请求对象2)响应对象3)前后端分离和混合二、Session的使用和原理1)Session的使用2)Session源码分析三、Flash闪现四、异步说明五、请求扩展六、BluePrint蓝图一、请求与响应 1)请求…

中国移动ZN-M160G光猫超级密码破解 | 河南移动兆能光猫超管密码获取 | 中国移动光猫如何开启UPnP功能

文章目录1. 按2. 重设光猫超管密码3. 开启UPnP功能1. 按 首先应确保设备型号是ZN-M160G,这点可以通过观察光猫底部的铭牌或者访问http://192.168.1.1/查看网页标题,因为本教程是基于兆能的这款ZN-M160G光猫进行操作的,其他的光猫&#xff08…

微信小程序框架(四)-全面详解(学习总结---从入门到深化)

目录 路由_navigateTo 页面跳转 携带参数 返回上一级页面 路由_redirectTo 页面跳转 路由_reLaunch 页面跳转 路由_switchTab 实现 tabbar 页面跳转 交互_消息提示框 基本弹出框 常用属性 icon详情 hideToast 交互_ loading 提示框 基本实现 常用属性 交互_模…

这次我把Redis数据类型写出了花✿❀~~~

1. String 字符串是 Redis 最基本的数据类型,不仅所有 key 都是字符串类型,其它几种数据类型构成的元素也是字符串。注意字符串的长度不能超过 512M。 1.1 编码方式(encoding) 字符串对象的编码可以是 int ,raw 或者…

1566_AURIX_TC275_电源管理_低功耗模式

全部学习汇总:GreyZhang/g_TC275: happy hacking for TC275! (github.com) Idle模式每一个核都可以单独进入,但是standby、sleep模式是会影响整个系统的。进入idle模式的几种方法:软件请求、其他的CPU进行软件请求、SMU因为报警等处理进行请求…

CSS -- 精灵图(sprites)的讲解及使用方法

文章目录精灵图(sprites)1 为什么使用精灵图2 精灵图的使用精灵图(sprites) 1 为什么使用精灵图 一个网页中往往会应用很多小的背景图像作为修饰,当网页中的图像过多时,服务器就会频繁地接收和发送请求图片,造成服务器请求压力过大&#xff…

ja3指纹 笔记

通过给openssl和nginx打补丁获取ja3指纹: https://github.com/phuslu/nginx-ssl-fingerprint 这个项目算出来的ja3指纹和wireshark的不完全一致,wireshark后面的是“-21,29-23-24,0”, 小小不同,👀。。 通过wireshark查看ja3指…

Selenium Grid 分布式 | 介绍与实战

一. 介绍 Selenium 包含 3 大组件,分别是:Selenium IDE、Selenium WebDriver、Selenium Grid 其中,Selenium IDE 负责录制、回放脚本,模拟用户对页面的真实操作 Selenium WebDriver 提供 API 来操作浏览器,比如&…

vue面试考察知识点全梳理

一、简介 vue几个核心思想: 数据驱动组件化虚拟dom、diff局部最优更新 源码目录介绍 Vue.js 的源码在 src 目录下,其目录结构如下。 src ├── compiler # 编译相关 ├── core # 核心代码 ├── platforms # 不同平台…

速度百倍提升,高性能 Python 编译器 Codon 火了

众所周知,Python 是一门简单易学、具有强大功能的编程语言,在各种用户使用统计榜单中总是名列前茅。相应地,围绕 Python,研究者开发了各种便捷工具,以更好的服务于这门语言。 编译器充当着高级语言与机器之间的翻译官…

4.19 Cadence Allegro软件中应该如何按照系统模板去创建PCB封装?异形表贴焊盘应该如何创建?

笔者电子信息专业硕士毕业,获得过多次电子设计大赛、大学生智能车、数学建模国奖,现就职于南京某半导体芯片公司,从事硬件研发,电路设计研究。对于学电子的小伙伴,深知入门的不易,特开次博客交流分享经验&a…

js常用函数

一、特常用函数以及功能解释(建议掌握) 1、alert()函数:显示一个警告对话,如: alert(1111) 2、eval()函数:计算表达式的结果,如: alert(eval(11)) 3、confirm()函数:显…

3 面蚂蚁,一路过关斩将 成功拿到 offer 定级 P6,大厂面试雀食有点难

线上服务 CPU 很高该怎么做&#xff1f;有哪些措施可以找到问题 JDK 中有哪几个线程池&#xff1f;顺带把线程池讲了个遍 应尽量避免在 where 子句中使用!或<>操作符&#xff0c;否则将引擎放弃使用索引而进行全表扫描 SQL 索引的顺序&#xff0c;字段的顺序 查看 SQ…

缓存一致性解决方案

文章目录常见的缓存一致性解决方案双写模式失效模式两种模式的总结上述模式的改进常见的缓存一致性解决方案 这里的缓存一致性其实就是缓存中的数据和数据库中的数据如何保持一致. 这个问题根据具体的业务场景和需要解决起来略有差异,但是总体看以分为两类,双写模式和失效模…

C-Frost安装及Cassie计算样例

本文运行环境为&#xff1a;Matlab2021b/Mathematic 13/Ubuntu18.04 matlab安装mathematic安装 一、 C-Frost安装 1、安装ipopt 安装参考 2、执行NLP例子验证是否安装成功 官方步骤 1&#xff09;修改create_problem.m文件中的 FROST_PATH路径 2&#xff09;修改CMakeL…

写代码时记录的小技巧

本文是记录自己写代码时候遇到的一些感觉比较有用/有意思的技巧&#xff0c;怕自己忘了记录一下。如果有想要分享的思路/纠正改进的地方欢迎交流。 如何输出结果 (Verbose Trick) 有关类的输出 1. 如果想在**模型的 forward 中输出相关变量**&#xff0c;但又不希望反复输出影…

Oracle如何删除归档日志文件?

Oracle如何删除归档日志文件&#xff1f; Oracle启用归档日志的状态下&#xff0c;会在指定的归档日志目录生成大量的日志文件&#xff0c;而且这些日志文件默认是不会定期清理。长时间运行下&#xff0c;会占用大量的存储空间&#xff0c;最终可能导致Oracle没有足够的空间维持…

Linux集成环境部署tomcat+Linux

Linux环境部署 tomcat redisTomcat 安装配置Redis安装配置Tomcat 安装配置 下载tomcat安装包&#xff0c;将安装包上传至自己的linux服务器中&#xff0c;将安装包传到linxu环境中的/usr/local/tomcat下&#xff0c;使用tar -xvf 命令解压 2. 进入到bin目录下&#xff0c;给所…

Allegro如何查找和高亮PAD Stack类型操作指导

Allegro如何查找和高亮PAD Stack类型操作指导 Allegro可以在板子上查找并且高亮PAD的类型,查找的范围包括器件的pad,以及过孔的pad,具体操作如下 用Allegro的was performance L模式下,并且勾选Allegro Productivity Toolbox选项 选择Tools-padstack finder 会出现padsta…

数字图像处理 - 图像采样和量化

1、 目标 获取图像的方法有很多种&#xff0c;但最终的目标是一致的&#xff1a;从传感数据生成数字图像。大多数传感器的输出是连续的电压波形&#xff0c;其幅度和空间行为与被感测的物理现象有关。要创建数字图像&#xff0c;我们需要将连续感测数据转换为数字格式。这就需要…