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())
Cookie
-
简介
-
cookie是针对http协议无状态的特征,设计的一种技术
-
cookie将数据保存在浏览器端,默认空间为4K(可以修改)
-
cookie中的数据,用户随意获取,没有安全性
-
数据类型受浏览器限制
-
cookie中大多存放网络通信相关的不敏数据信息,提高访问速度
-
-
Cookie+Session的认证方式(10分重要)
-
注意 : tpshop中,密码错误返回值为验证码错误
-
按照cookie+session认证方式修改:
# 导包 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())
-
成功登录
-
访问订单页面 : (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商城登录,获取我的订单页面数据
实现步骤 :
-
创建session对象(实例) ----> my_session=requests.Session()
-
session实例调get方法,发送获取验证码需求(不需要提取cookie,session自动能拿到) ----> my_session.get()
-
用同一个session实例调用post方法,发送登录请求(不需要携带cookie) ----> my_session.post()
-
使用用一个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.获取相应数据
-
获取URL : resp.url
-
获取响应状态码 : resp.status_code
-
获取Cookie : resp.cookies
-
获取响应头 : resp.headers
-
获取响应体 :
- 文本格式 : 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文件
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')
- 测试结果
- 测试报告