IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 开发测试 -> python+requests+pytest 接口自动化框架(四) -> 正文阅读

[开发测试]python+requests+pytest 接口自动化框架(四)

目录

一、requests库简介

二、requests库常用方法

三、request()返回的response对象

四、实战案例

post(url, data=None, json=None, **kwargs)

Postman中post的四种传参方式: ?

案例

今日内容:接口自动化之requests模块详解以及Cookie,Session关联处理

一、requests库简介

1.requests是用来发送http请求以及接收http响应的python第三方库,主要用于做接口自
动化。
? pip install requests

二、requests库常用方法

requests.get(url, params=None, **kwargs)? ? **kwargs可变长度的字典
requests.post(url, data=None, json=None, **kwargs)
requests.put(url, data=None, **kwargs)
requests.delete(url, **kwargs)
requests.request(method, url, **kwargs)? 包含了上面所有的请求
底层方法:
    def request(self, method, url,
            params=None, data=None, headers=None, cookies=None, files=None,
            auth=None, timeout=None, allow_redirects=True, proxies=None,
            hooks=None, stream=None, verify=None, cert=None, json=None):
返回:响应的数据response
method:请求方式
url:请求路径
params:get请求传参
data和json:post或put传参。
headers:请求头
cookies:cookie信息
files:文件上传

三、request()返回的response对象

print(res.text) #返回body的text格式
{"access_token":"55_TkMfJCy6FAfRE1LmveEhO1bG0JxHD4_5kSbzxR3aeoTxbE-IHdHJ42VJ-J8LlTKomNxUIqh1trffa_XeSvfTzb-JYtlzw61lWRb_TRY59PkW7apX3smIDSXuTYQIz-jLQOXhodir3skc7f0DIHAhAIASRK","expires_in":7200}
print(res.json()) # 返回body的dict格式 ---------重点--------

{'access_token': '55_TkMfJCy6FAfRE1LmveEhO1bG0JxHD4_5kSbzxR3aeoTxbE-IHdHJ42VJ-J8LlTKomNxUIqh1trffa_XeSvfTzb-JYtlzw61lWRb_TRY59PkW7apX3smIDSXuTYQIz-jLQOXhodir3skc7f0DIHAhAIASRK', 'expires_in': 7200}

print(res.content) #返回body的byte格式

b'{"access_token":"55_TkMfJCy6FAfRE1LmveEhO1bG0JxHD4_5kSbzxR3aeoTxbE-IHdHJ42VJ-J8LlTKomNxUIqh1trffa_XeSvfTzb-JYtlzw61lWRb_TRY59PkW7apX3smIDSXuTYQIz-jLQOXhodir3skc7f0DIHAhAIASRK","expires_in":7200}'

print(res.status_code) #返回状态码

200

print(res.reason) #返回状态信息

OK

print(res.cookies) #返回响应的cookie信息

<RequestsCookieJar[]>

print(res.encoding) #返回编码格式

utf-8

print(res.headers) #返回响应头

{'Connection': 'keep-alive', 'Content-Type': 'application/json; encoding=utf-8', 'Date': 'Thu, 14 Apr 2022 08:42:45 GMT', 'Content-Length': '194'}
print(res.request.method) #返回请求的数据
GET

四、实战案例

字典:dict
JSON:JSON字符串
json.loads()? ?把json字符串转化成dict
json.dumps()? 把dict转化成json字符串

post(url, data=None, json=None, **kwargs)

Postman中post的四种传参方式: ?

form-data:可以传键值对,也可以传文件。

????????请求头中 Content-Type:muilpart/form-data 表单的请求方式? ? 通过data传参 a=1&b=2

x-www-form-urlencoded:只能传键值对

??? ?????请求头中 Content-Type:application/x-www-from-urlencoded 表单的方式?? 通过data传参

raw:text,javascript,json,html,xml

? ? ? ? Content-Type:text/plain
????????Content-Type:application/javascript
????????Content-Type:application/json? ?通过json传参(字典格式)?{a:1,b:2}
????????Content-Type:text/html
????????Content-Type:application/xml
binary:把文件转化成二进制传参
??? ?????Content-Type:application/octent-stream? ? 通过data传参

总结:

通过data传参data:

场景一:表示表单传参
默认的请求头:Content-Type:application/x- www-from-urlencoded,
请求的格式是:a=1&b=2,
传的参数的类型: 纯键值对的字典
场景二:表示 字符串 传参,
默认请求头:text/plain
传的参数的类型: 字符串类型

通过json传参:

默认请求头:Content-Type:application/json
传的参数类型: dict(键值对、非键值对都可以)

?files:文件上传

案例

案例1:创建标签

    def test_create_flag(self):
        urls = "https://api.weixin.qq.com/cgi-bin/tags/create?access_token="+TestApi.access_token
        datas = {"tag":{"name":"天草柑橘"}}
        res = requests.post(url=urls,json=datas)
        print(res.json())
{'tag': {'id': 5438, 'name': '\\u5929\\u8349\\u67d1\\u6a58'}}
替换成标准的unicode格式 单个\ 此时中文可以显示成功
print(json.loads(json.dumps(res.json()).replace(r"\\","\\")))

案例2:文件上传

    def test_file_upload(self):
        urls = "https://api.weixin.qq.com/cgi-bin/media/uploadimg?access_token="+TestApi.access_token
        datas = {
            "media": open(r"../testfile/img/seola.jpg",'rb')
        }
        res = requests.post(url=urls,files=datas)
        print(res.json())
案例3:访问web项目
凡是web项目的接口,大部分都存在cookie关联。
 # 通过session会话去关联。session默认的情况下回自动的关联cookie。
 session = requests.session() 

 def test_phpwind_index(self):
        urls = "http://47.107.116.139/phpwind/"
        res = TestApi.session.request("get",url=urls)
        # 凡是web项目的接口,大部分都存在cookie关联。笨方法1 取cookie 好方法通过session关联
        # TestApi.phpwind_cookies = res.cookies
        # TestApi.csrf_token = dict(TestApi.phpwind_cookies)['csrf_token']
        TestApi.csrf_token = re.search('name="csrf_token" value="(.*?)"', res.text).group(1)


    def test_phpwind_login(self):
        urls = "http://47.107.116.139/phpwind/index.php?m=u&c=login&a=dorun"
        datas = {
            "username": "王晓佳",
            "password": "123456",
            "csrf_token": TestApi.csrf_token,
            "backurl": "http://47.107.116.139/phpwind/",
            "invite": ""
        }
        headers = {
            "Accept": "application/json, text/javascript, /; q=0.01",
            "X-Requested-With": "XMLHttpRequest"
        }
        # 笨方法1 用cookie res = requests.post(url=urls, data=datas, headers=headers, cookies=TestApi.phpwind_cookies)
        res = TestApi.session.request("post",url=urls,data=datas,headers=headers)
        print(res.text)

  开发测试 最新文章
pytest系列——allure之生成测试报告(Wind
某大厂软件测试岗一面笔试题+二面问答题面试
iperf 学习笔记
关于Python中使用selenium八大定位方法
【软件测试】为什么提升不了?8年测试总结再
软件测试复习
PHP笔记-Smarty模板引擎的使用
C++Test使用入门
【Java】单元测试
Net core 3.x 获取客户端地址
上一篇文章      下一篇文章      查看所有文章
加:2022-04-18 18:12:40  更:2022-04-18 18:12:58 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/18 0:15:23-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码