当前位置: 首页 > news >正文

接口测试---Requests

Requests

案例

  • 安装 pip install requests

  • 案例1 : requests访问百度

    # 导包
    import requests
    # 2.发送http请求
    resp=requests.get(url="http://www.baidu.com")
    # 打印结果
    print(resp.text)
    
  • 案例2 : 访问tpshop商城(提参数出来)

    # 导包
    import requests
    # 发送http请求
    resp=requests.get(url="https://hmshop-test.itheima.net/Home/Goods/search.html",params={"q":"iphone"})
    # 打印结果
    print(resp.text)
    
  • 案例3 : 登录ihrm系统--post请求

    import requests
    resp=requests.post(url="https://ihrm-java.itheima.net/api/sys/login",headers={"Content-Type":"application/json"},json={"mobile": "13800000002", "password": "929itheima.CN032@.20250910"})
    print(resp.json())
    
  • 案例4 : 修改员工信息并查看---put和get,删除同理

    # 导包
    import requests
    # 修改指定员工的姓名
    resp=requests.put(url="https://ihrm-java.itheima.net/api/sys/user/1066370498633486336",headers={"Authorization": "3b354697-1b3b-4f92-840f-d46d71ac5f6f"},json={"username":"aksha"})# 查看
    resp2=requests.get(url="https://ihrm-java.itheima.net/api/sys/user/1066370498633486336",headers={"Authorization": "3b354697-1b3b-4f92-840f-d46d71ac5f6f"})
    # 打印结果
    print(resp.json())
    print(resp2.json())
    

    image

  • 简介

    • cookie是针对http协议无状态的特征,设计的一种技术

    • cookie将数据保存在浏览器端,默认空间为4K(可以修改)

    • cookie中的数据,用户随意获取,没有安全性

    • 数据类型受浏览器限制

    • cookie中大多存放网络通信相关的不敏数据信息,提高访问速度

  • Cookie+Session的认证方式(10分重要)

image

  • 注意 : tpshop中,密码错误返回值为验证码错误
    image

  • 按照cookie+session认证方式修改:
    image

    # 导包
    import requests
    # 获取cookie值,点击刷新验证码(cookie中包含session_id)
    resp=requests.get(url="https://hmshop-test.itheima.net/index.php?  m=Home&c=User&a=verify&r=0.31241433102456484")
    # 获取cookie
    my_cookie=resp.cookies
    # 发送登录请求post(密码错误的url),携带获取到的cookie,获取响应结果
    resp2=requests.post(url="https://hmshop-test.itheima.net/index.php?m=Home&c=User&a=do_login&t=0.17791485152418463",data={"username":"13739717401","password":"1234567","verify_code":"8888"},cookies=my_cookie)
    # 打印输出
    print(resp2.json())
    
  • 成功登录
    image

  • 访问订单页面 : (cookie只需要获取一次,其它请求都需要继续带cookie发)

# 导包
import requests
# 获取cookie值,点击刷新验证码(cookie中包含session_id)
resp=requests.get(url="https://hmshop-test.itheima.net/index.php?m=Home&c=User&a=verify&r=0.31241433102456484")
# 获取cookie
my_cookie=resp.cookies
# 发送登录请求post(密码错误的url),携带获取到的cookie,获取响应结果
resp2=requests.post(url="https://hmshop-test.itheima.net/index.php?m=Home&c=User&a=do_login&t=0.17791485152418463",data={"username":"13739717401","password":"123456","verify_code":"8888"},cookies=my_cookie)
print(resp2.json())
# 发送请求访问我的订单页面
resp3=requests.get(url="https://hmshop-test.itheima.net/Home/Order/order_list.html",cookies=my_cookie)
# 打印输出
print("我的订单页面",resp3.text)

Session(会话)

  • 概念 : 从客户端登陆服务器开始,直到客户端退出登录,所产生的所有通信数据,保存在session中

    • session 将数据存储在服务器端

    • session使用服务器存储空间,没有大小限制

    • 数据类型受服务器主机影响,几乎支持所有数据类型

    • session中的数据,大多采用加密,转码存储,安全性高

Session自动管理Cookie : cookie中的数据,都由session提供的

  • 案例6 : 用session实现Tpshop商城登录,获取我的订单页面数据

实现步骤 :

  1. 创建session对象(实例) ----> my_session=requests.Session()

  2. session实例调get方法,发送获取验证码需求(不需要提取cookie,session自动能拿到) ----> my_session.get()

  3. 用同一个session实例调用post方法,发送登录请求(不需要携带cookie) ----> my_session.post()

  4. 使用用一个session实例,调用get方法,查看我的订单页面请求(不需要携带cookie) ----> my_session.get()

# 导包
import requests# 创建session实例
my_session=requests.Session()# 通过实例调用get方法发送获取验证码请求
resp=my_session.get(url="https://hmshop-test.itheima.net/index.php?m=Home&c=User&a=verify&r=0.31241433102456484")# 通过实例调用post方法实现登录请求
resp2=my_session.post(url="https://hmshop-test.itheima.net/index.php?m=Home&c=User&a=do_login&t=0.17791485152418463",data={"username":"13739717401","password":"123456","verify_code":"8888"})# 通过实例调用get方法实现我的订单页面请求
resp3=my_session.get(url="https://hmshop-test.itheima.net/Home/Order/order_list.html")print("登陆结果:",resp2.json())
print("我的订单页面:",resp3.text)

cookie与session区别!!!

  • 数据存储位置 :

    • cookie存储在浏览器端
    • session存储在服务器端
  • 安全性 : cookie安全性低,session高

    • cookie直接存储在浏览器,可以任意获取,没有安全性可言
    • session存储在服务器端,采用加密转码形式存储数据,安全性高
  • 数据类型 :

    • cookie在浏览器端,支持测试数据类型受浏览器限制
    • session在服务器端,服务器是主机,几乎支持所有的数据类型
  • 大小 :

    • cookie默认大小4KB
    • session直接使用服务器存储,没有限制.

响应resp

  • 每次收到的resp都是全部信息,怎么获取数据中的指定内容??

    • 使用resp.获取相应数据

      1. 获取URL : resp.url

      2. 获取响应状态码 : resp.status_code

      3. 获取Cookie : resp.cookies

      4. 获取响应头 : resp.headers

      5. 获取响应体 :

        • 文本格式 : resp.text
        • json格式 : resp.json(),如果出现JSONDecodeError错误提示,说明不能转换为json数据
  • 实例9 : 访问百度并获取相应数据

import requests
resp=requests.get(url="https://www.baidu.com")
# 获取url
print("获取url:",resp.url)
# 获取响应状态码
print("响应状态码:",resp.status_code)
# 获取Cookie
print("获取cookie:",resp.cookies)
# 获取响应头
print("获取响应头:",resp.headers)
# 获取 响应体
print("获取响应体:",resp.text)

PyTest框架--实现单元测试的框架

  • 安装 : pip install pytest

  • 查验 : pip list/pip show pytest

  • 定义类/测试方法

# 测试类名,建议以Test开头
class Testxxx(object):# 测试方法名:必须以test开头def test_xxx(self):pass
  • 执行测试用例
单文件执行(了解):方法1:终端命令 pytest -s xxx.py方法2:方法定义后,右键->运行,此方法,类定义后:右键->运行 所有方法方法3:导包import pytestif __name__=='__main__':pytest.main(['s','xxx.py'])多文件执行:[重点]1.直接在项目目录下,创建文件pytest.ini2.编写 pytest.ini文件[pytest]				固定内容adopts=-s				添加命令行参数 add optionstest paths=./xxx			.py测试用例文件,相对于pytest.inipython_files=xxx*.py	.py文件名,可用通配符python_classes=Test*	 测试类名,可用通配符python_functions=test*	 测试方法名,可用通配符3.终端执行命令pytest	
  • Fixture
# 1.方法级别方法def setup(self):		在每个普通测试方法执行之前,自动调用一次def teardown(self):		在每个普通测试方法执行之后,自动调一次
# 2.类级别方法def setup_class(self):	在类中所有 测试方法执行之前,自动被调用一次def teardown_class(self):在类中所有测试方法执行结束之后,自动被调用一次
  • 断言
# 方法1:assert 预期结果 == 实际结果		-----断言相等
# 方法2:assert 预期结果 in 实际结果		-----断言包含
  • 测试报告生成
1.安装插件 pip install pytest-html
2.修改pytest.ini文件中addopts的值addopts= -s --html=report/测试报告名.html --self-contained-html
3.使用命令pytest生成测试报告
  • 案例1 : 使用pytest测试TestAdd,终端使用命令会自动调用pytest.ini文件

image

ihrm案例

# 导包
import requests
# 定义测试类
class TestLogin(object):# 定义测试方法-登录成功def test01_login_success(self):# 发送post请求,登录ihrm得响应结果resp = requests.post(url="https://ihrm-java.itheima.net/api/sys/login",json={"mobile": "13800000002", "password": "929itheima.CN032@.20250912"})# 打印结果转jsonprint("登陆成功:", resp.json())# 断言assert 200 == resp.status_codeassert 10000 == resp.json().get("code")assert True == resp.json().get("success") # python用get获取值assert "操作成功" in resp.json().get("message")# 定义方法-手机号不存在def test02_tel_not_exists(self):resp = requests.post(url="https://ihrm-java.itheima.net/api/sys/login",json={"mobile": "1380000012", "password": "929itheima.CN032@.20250912"})# 打印结果print("手机号不存在:", resp.json())# 断言判断assert 200 == resp.status_codeassert False == resp.json().get('success')assert 20001 == resp.json().get('code')assert "用户名或密码错误" in resp.json().get('message')# 定义方法-密码错误def test01_pwd_error(self):resp = requests.post(url="https://ihrm-java.itheima.net/api/sys/login",json={"mobile": "1380000002", "password": "itheima.CN032@.20250523"})# 打印结果输出print("密码错误:", resp.json())# 断言判断assert 200 == resp.status_codeassert False == resp.json().get('success')assert 20001 == resp.json().get('code')assert "用户名或密码错误" in resp.json().get('message')
  • 测试结果

image

  • 测试报告

image
image

http://www.wxhsa.cn/company.asp?id=2232

相关文章:

  • LangChain大模型应用开发介绍
  • [豪の学习笔记] 软考中级备考 基础复习#8
  • lc1025-除数博弈
  • 漏洞解析--文件包含漏洞究竟怎么用?
  • 办公室装修 暂存
  • 博客更新公告
  • 爆:GitHub Copilot支持包括Anthropic、Azure、Google Gemini、Groq、OpenAI 和 OpenRouter等供应商API
  • JavaWeb05 - 详解
  • CF182C
  • CF185D
  • Python计算文件md5
  • CF201C
  • CF1774D
  • CF23C
  • CF37C
  • CF33D
  • 支持类 Unix 语法 ``:Windows 下用 PowerShell 7 优化 npm 和 VS Code
  • 初赛程序阅读做题要点
  • 模拟堆(手写堆 的五大操作)
  • 【A】杂题悬桨
  • 使用Osquery进行远程取证:NTFS取证扩展实战指南
  • 完整教程:简单介绍一下Clickhouse及其引擎
  • 矩阵分解
  • 11
  • 基于 Gitlab 实现 Go 的 CI/CD
  • 2025.9.11
  • 容斥原理
  • 【B】世良真纯
  • 如何使用jobleap.cn避免简历中的严重错误
  • 在 Zustand 中创建通用 Action 的优雅实践