接口自动化测试Requests库实战超细详解

news2024/11/15 13:23:16

一、requests库

Requests is an elegant and simple HTTP library for Python, built for human beings.
Requests库就是一个使用Python语言发送HTTP请求的一个类库。
github地址:GitHub - psf/requests: A simple, yet elegant, HTTP library.

中文地址:https://2.python-requests.org/zh_CN/latest/user/quickstart.html

二、发送基本请求

import requests

base_url = "http://httpbin.org"

#发送get请求
r = requests.get(base_url+"/get")
print(r.status_code)

#发送post请求
r = requests.post(base_url+'/post')
print(r.status_code)

#发送put请求
r = requests.put(base_url+"/put")
print(r.status_code)

#发送delete请求
r = requests.delete(base_url+"/delete")
print(r.status_code)

二、参数传递

import requests

url = "http://httpbin.org"

param_data = {"name":"shiyan","password":"123456789"}

#get请求传递参数
r = requests.get(url+"/get",params=param_data)
print(r.url)
print(r.status_code)

param_data = {"name":"wangzhi","password":"20190001"}
#post请求传递参数
r = requests.post(url+"/post",data=param_data)
print(r.text)

三、请求头设置

import requests

url = "http://httpbin.org"

header = {"token":"201909011313"}

r = requests.get(url+"/get",headers=header)

print(r.text)

案例:访问知乎首页

import requests

url = "https://www.baidu.com/"

r = requests.get(url)

cookies = r.cookies

print(cookies)

for key,value in cookies.items():
    print(key+":"+value)

四、cookies设置

import requests

url = "http://httpbin.org"

cookie = {"username":"shiyan"}

r = requests.get(url+"/get",cookies=cookie)

print(r.text)

五、超时设置

import requests

url = "http://httpbin.org"

r = requests.get(url+"/get",timeout=5)

print(r.text)

六、上传文件

import requests

#登录
loginUrl = "http://testapp.airspace.cn/api/passport/app/loginByPwd"

#loginName: 15201438478, password: 123456a, deviceVersion: PCT-AL10, deviceOsVersion: 9, appVersion: 1.1.6
loginParam = {"loginName":"15201438478","password":"123456a","deviceVersion":"PCT-AL10","deviceOsVersion":"9","appVersion":"1.1.6"}

r = requests.post(loginUrl,params=loginParam)

print(r.json())

loginToken = r.json()["data"]["loginToken"]

print(loginToken)

#图片上传
uploadImageUrl = "http://testapp.airspace.cn/api/image/upload"

headers = {"Token":loginToken}

files = {'image': open('upload.png', 'rb')}

r = requests.post(uploadImageUrl,files=files,headers=headers)

print(r.json())

七、会话对象

import requests

url = "http://httpbin.org"

#设置cookie
r = requests.get(url+"/cookies/set/user/shiyan")
print(r.text)

#获取cookie
r = requests.get(url+"/cookies")
print(r.text)

结果
请添加图片描述

import requests

url = "http://httpbin.org"

s = requests.session()

#设置cookie
r = s.get(url+"/cookies/set/user/shiyan")
print(r.text)

#获取cookie
r = s.get(url+"/cookies")
print(r.text)

结果

八、ssl验证

import requests

url = "https://www.12306.cn"

r = requests.get(url,verify=False)

print(r.text)

通过设置verify=False可以关闭ssl验证。

九、代理设置

import requests

url = "http://httpbin.org"

proxies = {"http":"http://111.231.140.109:8888"}

r = requests.get(url+"/get",proxies=proxies)

print(r.text)

结果

通过结果我们发现,通过代理发送请求后,服务器端收到的origin这个客户端地址就是我们设置的代理地址,客户端设置代理后,可以通过代理发送请求,防止请求接口次数过多时,服务器把客户端对应的ip地址添加到黑名单中。

十、身份认证

import requests
from requests.auth import HTTPBasicAuth, HTTPDigestAuth

url = "http://httpbin.org"

#basic-auth认证
r = requests.get(url+"/basic-auth/shiyan/8888",auth=HTTPBasicAuth("shiyan","8888"))
print(r.text)

#digest-auth认证
r = requests.get(url+"/digest-auth/auth/shiyan/8888",auth=HTTPDigestAuth("shiyan","8888"))
print(r.text)

十一、实战 天气api

免费天气接口地址:天气免费 API | 天气API接口 | 天气JSON API | 天气XML API | JSON在线免费 API

import requests

url = "http://t.weather.sojson.com/api/weather/city/"

cityId = "101030100"

r = requests.get(url+cityId)

response = r.json()

print(response["cityInfo"]["city"])

print(response["data"]["forecast"][0]["ymd"])

十二、unittest 实战天气api

import unittest
import requests

class WeatherTest(unittest.TestCase):

    #开始
    def setUp(self):

        print("接口测试开始")

        self.baseUrl = "http://t.weather.sojson.com/api/weather/city/"

    #接口正常测试
    def test_weather_tianjin(self):

        self.url = self.baseUrl +"101030100"

        r = requests.get(self.url)

        response = r.json()

        self.assertEqual(response["status"],200)

        self.assertEqual(response["cityInfo"]["city"],"天津市")

    #接口参数错误
    def test_weather_params_error(self):

        self.url = self.baseUrl + "8888"

        r = requests.get(self.url)

        response = r.json()

        self.assertEqual(response["status"],404)

        self.assertEqual(response["message"],"Request resource not found.")

    #接口参数不传
    def test_weather_params_no(self):

        self.url = self.baseUrl

        r = requests.get(self.url)

        response = r.json()

        self.assertEqual(response["status"], 404)

        self.assertEqual(response["message"], "Request resource not found.")

    #结束
    def tearDown(self):

        print("接口测试结束")

十三、测试报告生成

1.编写run脚本:run.py

import unittest
from BSTestRunner import BSTestRunner
import time

#指定测试用例和测试报告的路径
test_dir = "."
report_dir = "./reports"

#加载测试用例
discover = unittest.defaultTestLoader.discover(test_dir,pattern="unittest_weather_api.py")

#定义报告的文件格式
now = time.strftime("%Y-%m-%d %H_%M_%S")
report_name = report_dir + "/" + now + "test_report.html"

#运行用例并生成报告
with open(report_name,"wb") as f:
    runner = BSTestRunner(stream=f,title="Weather Api Test Report",description="China City Weather Test Report")
    runner.run(discover)

2.执行脚本
案例图示如下:

3.生成接口测试报告
效果图示如下:

感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

 

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!有需要的小伙伴可以点击下方小卡片领取   

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

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

相关文章

【华为】将eNSP导入CRT,并解决不能敲Tab问题

华为】将eNSP导入CRT,并解决不能敲Tab问题 eNSP导入CRT打开eNSP,新建一个拓扑右键启动查看串口号关联CRT成功界面 SecureCRT连接华为模拟器ensp,Tab键不能补全问题选择Options(选项)-- Global Options (全局选项&#…

民国漫画杂志《时代漫画》第6期.PDF

时代漫画06.PDF: https://url03.ctfile.com/f/1779803-1247397790-72c351?p9586 (访问密码: 9586) 《时代漫画》的杂志在1934年诞生了,截止1937年6月战争来临被迫停刊共发行了39期。 ps:资源来源网络!

MySQL慢查询原因总结

文章目录 一.SQL没加索引二. SQL 索引不生效2.1 隐式的类型转换,索引失效2.2 查询条件包含or,可能导致索引失效2.3 like通配符可能导致索引失效2.4 查询条件不满足联合索引的最左匹配原则2.5 在索引列上使用mysql的内置函数2.6 对索引进行列运算&#xf…

低耦合双写一致性方案-使用canal+MQ

需求:继上一篇使用xxljob实现数据的全量同步到es后,当数据库中新增、删除、修改数据时,应该对es中的对应索引库实现增量同步。 本文介绍了2种双写一致性方案,对其中使用MQ的方案进行了实现。 1. 方案设计 1.1 数据一致性问题分析…

QT7_视频知识点笔记_5_线程,数据库

多线程 两种办法:第一种:Qt4.7之前的线程使用的方法(简单);第二种:Qt4.7之后的(灵活–推荐)----connect最后一个参数的作用:默认连接,队列连接,直…

vue3使用mitt.js进行各种组件间通信

我们在vue工程中,除开vue自带的什么父子间,祖孙间通信,还有一个非常方便的通信方式,类似Vue2.x 使用 EventBus 进行组件通信,而 Vue3.x 推荐使用 mitt.js。可以实现各个组件间的通信 优点:首先它足够小&…

从业务角度来看,DevOps 是什么?

如果您在我们的应用程序名称中看到“DevOps”,这意味着我们必须正确解释该术语,我们会这样做,但角度会有所不同。让我们从业务角度看看 DevOps 是什么。 通用名称 首先你应该知道,DevOps 没有明确的定义。是的。 大多数情况下&a…

分类和品牌关联

文章目录 1.数据库表设计1.多表关联设计2.创建表 2.使用renren-generator生成CRUD1.基本配置检查1.generator.properties2.application.yml 2.生成代码1.进入localhost:81生成代码2.将main目录覆盖sunliving-commodity模块的main目录 3.代码检查1.注释掉CategoryBrandRelationC…

使用xsd验证xml格式的正确性

1.1 基础知识介绍 XML简介:XML是可扩展标记语言(eXtensible Markup Language)的缩写,它是一种数据表示格式,可以描述非常复杂的数据结构,常用于传输和存储数据。xml文件、xml消息。XSD简介:是X…

JS对象超细

目录 一、对象是什么 1.对象声明语法 2.对象有属性和方法组成 二、对象的使用 1.对象的使用 (1)查 (2)改 (3)增 (4)删(了解) (5&#xf…

九州未来十二周年丨聚力同行,奔赴智能新未来

九州未来迎来十二周年! 从国内首批提供 OpenStack 云服务的专业公司, 经过十二年的发展, 现今成长为开放智能云边架构引领者。 在这十二年的时间中, 九州未来持续创新,步履不停, 打造成熟的云基础设施…

【软件测试】软件测试基础理论

目录 软件测试简介软件产生过程小结 主流测试掌握技能功能测试功能测试的注意事项 自动化测试自动化测试的优势自动化测试的限制和适用性:自动化测试的注意事项 接口测试接口测试通常可以涵盖以下方面接口测试的注意事项 性能测试性能测试的几个方面性能测试的注意事…

JavaSE:Clonable接口、浅拷贝与深拷贝

1、引言 我们在学习的数组时,就了解到了数组克隆方法,可以通过数组克隆方法来拷贝一个一模一样的数组: 那对于自定义类型中有没有克隆方法呢?答案是有的! 就让这篇文章来帮助大家学习自定义类型的拷贝! …

基于深度学习的表情识别系统

欢迎大家点赞、收藏、关注、评论啦 ,由于篇幅有限,只展示了部分核心代码。 文章目录 一项目简介 二、功能三、系统四. 总结 一项目简介 一、项目背景 随着人工智能技术的快速发展,表情识别成为了人机交互领域的一个研究热点。表情识别技术旨…

docker redis 持久化

1、拉取redis镜像 docker pull redis:latest 2、 mkdir /data/redis 3、填充redis.conf文件及根据需求修改相应的配置 •通过官网地址找到对应版本的配置文件 •将配置信息复制到redis.conf中 •常见的修改配置 https://redis.io/docs/latest/operate/oss_and_stack/managem…

K8s 高级调度

文章目录 K8s 高级调度CronJobinitContainerTaint 和 Toleration污点(Taint)容忍(Toleration) AffinityNodeAffinityPodAnffinity 和 PodAntiAffinity 总结 K8s 高级调度 CronJob 在 k8s 中周期性运行计划任务,与 li…

获取支持Windows7的最新Edge离线版本

从110版本开始,微软Edge和谷歌停止了对Win7、Win8/8.1的支持,后续又发布了几版安全更新,截止目前为止,能支持Win7的版本是 109.0.1518.140。 如果你想用最新版本谷歌浏览器,可以考虑下Supermium,这个浏览器…

Flask CORS: 解决跨域资源共享问题的利器

文章目录 安装和启用 CORS配置 CORS拓展 在本文中,我们介绍了如何使用 Flask-CORS 扩展来解决跨域问题。Flask-CORS 是一个方便的工具,可以帮助我们轻松地实现跨域资源共享支持。 安装和启用 CORS 要开始使用 Flask-CORS,我们需要先安装它。…

一些常见的程序设计问题

秒杀 redis缓存库存 1.判断库存名额是否充足,2.进行扣减 为了防止超卖,必须保证这两部的原子性 库存扣减后发送mq消息,去异步执行创建订单流程,创建订单失败会造成少卖。可加重试机制,对多次重试依旧失败的&#xff…

react 函数组件 开发模式默认被渲染两次

这是 React 刻意为之,函数式组件应当遵从函数式编程风格,每次执行应该是无副作用的(no sideEffect),在 dev 下多次渲染组件,是为了防止开发者写出有问题的代码。 用 React 写函数组件,如何避免重复渲染? -…