【五、接口自动化测试】5分钟掌握python + requests接口测试

你好啊!我是山茶,一个持续探索AI + 测试的程序员!

在做接口测试时,在python中内置了HTTP库 urllib,可以用于发送http请求。基于urllib二次封装的三方库Requests,相较于urllib更佳简介易用。所以,在接口自动化测试中通常使用Requests库对接口进行测试

Requests安装

因为Requests是第三方库,所以需要对其进行安装,通常安装使用pip命令安装即可

# 在终端命令行或python编辑工具pycharm的Terminal中输入以下指令即可
pip install requests

安装完成后,在编辑器中引入对应的库import requests

Requests常见请求类型

HTTP接口测试涉及到3个方面

  • 请求方法:get、post、put、 delete、head ......

  • 请求体:form、json、xml、 binary

  • 响应结果:status code、 response body、 json path、 xpath

接口常见的请求方法及类型如下

#【如有问题,关注公众号:程序员山茶】留言

r = requests.get('http://127.0.0.1:8080/shancha/test_one') #get请求
r = requests.post('http://127.0.0.1:8080/shancha/test_one', data = {'key':'value'})#post请求
r = requests.put('http://127.0.0.1:8080/shancha/test_one', data = {'key':'value'})
r = requests.delete('http://127.0.0.1:8080/shancha/test_one')
r = requests.head('http://127.0.0.1:8080/shancha/test_one')
r = requests.options('http://127.0.0.1:8080/shancha/test_one')


#【如有问题,关注公众号:程序员山茶】留言
# 构造请求目标
import resquests
r = requests.get('http://127.0.0.1:8080/shancha/test_one')
print(r.status_code)  # 响应结果为 200

# 构造请求头
url = 'http://127.0.0.1:8080/shancha/test_one'
headers ={'user-agent': 'my-app/0.0.1'}
r = requests.get(url, headers=headers)
print(r.status_code) # 响应结果为 200

# 构造请求cookie
url = 'http://127.0.0.1:8080/shancha/test_one'
cookies = dict(cookies_are='chengxuyuanshancha')
r = requests.get(url, cookies=cookies)
print(r.status_code) # 响应结果为 200

Requests请求体构造

请求体key:value 即键值对的形式存在,如query参数、form请求、binary请求(上传文件)以及json、xml、 json rpc等结构化请求

# form 和 Json 示例如下
#【如有问题,关注公众号:程序员山茶】留言

# form请求
payload = {'key':'valuel','key2':'value2'}
r = requests.post("http://127.0.0.1:8080/shancha/test_one", data=payload)
print(r.status_code) # 响应结果为 200

# JSON请求
url = 'http://127.0.0.1:8080/shancha/test_one'
payload = {'some': 'data'}
r = requests.post(url, json=payload)
print(r.status_code) # 响应结果为 200

Requests响应断言

在做测试时,结果判断是功能实现的重要依据之一。结果判断也可以称之为响应断言,即对请求动作结果返回的预期

  • 响应的类型有多种

    • r.url:

    • r.status_code

    • r.headers

    • r.cookies

    • r.encoding

    • r.content

    • r.text

    • r.json()

以接口API为例

#【如有问题,关注公众号:程序员山茶】留言

# 结构化响应断言方式
import requests
import json

r = requests.get('https://api.github.com/repos/hiyongz/DjangoDemo')
json_data = r.json()
print(json.dumps(json_data, indent=4))
# 返回信息结果为
{
    "message": "API rate limit exceeded for 50.7.252.58. (But here's the good news: Authenticated requests get a higher rate limit. Check out the documentation for more details.)",
    "documentation_url": "https://docs.github.com/rest/overview/resources-in-the-rest-api#rate-limiting"
}

除了常用的Assert断言以外, 还有Hamcrest 断言、xml解析断言、schema断言、JSONPath断言等多种断言方式,断言也可以组合使用,在测试过程中要根据返回的结果数据选择适合的断言方法

接口测试示例

使用Springboot编写一个接口“/shancha/test_one”,且在web端也可以访问


@RestController
@RequestMapping("/shancha")
public class FirstController {

    @Autowired
    FirstService firstService;

    @GetMapping("/test_one")
    public String showNlefer(){
        System.out.println("我是山茶,公众号:程序员山茶。有问题请公众号留言!");

        return "{\"name\":\"山茶\",\"公众号\":\"程序员山茶\"}";
    }


}

web端访问结果

使用requests测试接口

import requests

def requestsShanCha():
    r = requests.get('http://127.0.0.1:8080/shancha/test_one')
    assert r.status_code == 200
    print(r.status_code)
    print(r.headers)
    print(r.content)
    print("返回信息结果:"+r.text)



if __name__ == '__main__':
    requestsShanCha()

响应结果如下所示,与web浏览器响应结果一致

以上,本文完,如果你觉着有用就点个“赞呗👍”

作者简介:

程序员山茶,一个工作5年,并坚持探索测试之路的测试开发工程师。曾混迹于互联网大厂、IOTA行业领航企业、安全行业、大数据行业领航企业,欢迎和我一起沟通交流。


欢迎关注我,  和我一起探索AI+测试之路,终身成长

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

LED基础知识分享(一)

大家好,我是砖一。 今天给大家分享一下,LED的基础知识,有照明行业,或者对LED感兴趣的朋友,可以学习一下,希望对你有用~ 一,什么是LED (Light Emitting Diode)? 1,LED是一种发出某…

MathType7最新软件产品秘钥2024中文版

MathType 7是一款功能强大的数学公式编辑器,专为教育工作者、学生、科研人员以及任何需要处理数学公式的人群设计。以下是对MathType 7的详细介绍: 一、功能特点: 广泛的符号和模板支持:MathType 7支持各种数学符号、公式、方程…

Centos7 安装postgresql14后无法连接数据库

1、数据库服务器允许外部访问5432端口。 2、postgresql.conf 3、pg_hba.conf a、制定某个IP(192.168.0.107)访问 b、指定ip段访问 允许10.1.1.0~10.1.1.255网段登录数据库 host all all 10.1.1.0/24 trust c、指定全网访问 host a…

mysql5.6---windows和linux安装教程和忘记密码怎么办

一、windows安装 1.完成解压 解压完成之后将其放到你喜欢的地址当中去,这里我默认放在了D盘,这是我的根目录 2.配置环境变量 我的电脑->属性->高级->环境变量->系统变量 选择PATH,在其后面添加: (注意自己的安装地址) D:\mysql-5.6.49…

【C++庖丁解牛】vector容器的简易模拟实现(C++实现)(最后附源码)

🍁你好,我是 RO-BERRY 📗 致力于C、C、数据结构、TCP/IP、数据库等等一系列知识 🎄感谢你的陪伴与支持 ,故事既有了开头,就要画上一个完美的句号,让我们一起加油 目录 前言vector容器代码实现内…

【测试开发学习历程】Linux用户管理+文件权限管理

目录 一、用户管理 (一)用户和用户组的基本概念 1.概念 2.设置原因 3.用户与用户组的关系 4.用户类型 (二)用户的创建、修改属性和删除用户 1.用户信息文件 2.创建用户 3.修改用户密码 4.修改用户信息 5.用户查询 6.…

5.shell if判断语句

shell-if判断语句 1.什么是if2.为什么要用if3.if基础语法4.基于文件进行判断5.基于整数比对6.基于字符比对7.基于正则比对 1.什么是if if其实就是模仿人类的判断来进行的,要么真、要么假、就这两种结果。 2.为什么要用if 判断 3.if基础语法 单条件 if [ 如果你…

RocketMQ快速入门

RocketMQ快速入门 准备工作下载RocketMQ环境要求 JDK下载安装JDK下载JDK安装 安装RocketMQ安装步骤目录介绍 启动RocketMQ测试RocketMQ发送消息接收消息 关闭RocketMQ RocketMQ是阿里巴巴2016年开源的MQ中间件,使用Java语言开发,在阿里内部,R…

String、StringBuilder、StringBuffer 有什么区别?

1、典型回答 String、StringBuilder 和 StringBuffer 都是 Java 语言中,用于操作字符串的类,但它们在性能、可变性和线程安全性方面有一些区别 1、String:不可变字符串类,也就是说一旦创建,它的值就不可变。每次对 S…

数据库基础理论知识

1.基本概念 数据(Data):数据库存储的基本对象。数字、字符串、图形、图像、音频、视频等数据库(DB):在计算机内,永久存储、有组织、可共享的数据集合数据库管理系统(DBMS):管理数据库的系统软件数据库系统(DBS):DBDBMSDBADBAP 数…

【spring】-多模块构建二-问题整理

1、bean注入问题 The injection point has the following annotations: - org.springframework.beans.factory.annotation.Autowired(requiredtrue) 解决1: 由于引入的bean类 不属于启动类的子模块下,需要在启动类手动声明扫描的类 也适用于公共子模…

Ribbon-负载均衡

目录 一、负载均衡的作用位置 二、Ribbon负载均衡的工作流程 三、IRule接口 负载均衡的策略: 修改负载均衡策略(即修改使用的IRule接口的实现类): 四、饥饿加载 五、总结 前置知识:Eureka注册中心 不熟悉Eureka的…

【Emgu CV教程】9.3、形态学常用操作之开运算

文章目录 一、相关概念1.什么叫开运算3.开运算的函数 二、演示1.原始素材2.代码3.运行结果 一、相关概念 1.什么叫开运算 腐蚀、膨胀已经讲完,这两个是最基础的形态学操作。这次讲的是开运算,它是一个先腐蚀、后膨胀的过程。原始图像先被腐蚀&#xff…

使用Anaconda创建Python指定版本的虚拟环境

由于工作的需要和学习的需要,需要创建不同Python版本的虚拟环境。 比如zdppy的框架,主要支持的是Python3.8的版本,但是工作中FastAPI主要使用的是3.11的版本,所以本地需要两套Python环境。 决定使用Anaconda虚拟环境管理的能力&…

发那科数控机床FanucCNC(NCGuide)仿真模拟器配置和数据采集测试

开发日记3.12 此篇用于记录发那科数控机床(Fanuc CNC)采集程序开发中,用虚拟机做测试时,虚拟机的配置和使用以支持采集软件开发和测试。 配置虚拟机使用仿真软件 下载VMware15 「链接:https://pan.xunlei.com/s/VNsl9Gmb14ANBiiNlsT7vA2LA…

Chrome下载B站视频字幕的插件

大家好,我是爱编程的喵喵。双985硕士毕业,现担任全栈工程师一职,热衷于将数据思维应用到工作与生活中。从事机器学习以及相关的前后端开发工作。曾在阿里云、科大讯飞、CCF等比赛获得多次Top名次。现为CSDN博客专家、人工智能领域优质创作者。喜欢通过博客创作的方式对所学的…

多模态大模型Claude 3正式接入集简云与语聚!对标GPT-4且支持中文

自OpenAI发布GPT-4以来,引发了业务模式与应用使用的巨大变革,掀起了各大企业对于多模态大模型的研究热潮。3月初,AnthropicClaude在官网正式发布Claude 3系列多模态大模型,据了解,该模型在多个维度上超越了GPT-4&#…

Vcenter 定制创建 Rocky Linux 虚拟机

文章目录 1. 图形化安装2. 初始化配置 1. 图形化安装 2. 初始化配置 Centos 8.2 指南

图像分割损失函数

为什么要乘以2,是为了让DICE的值域在0和1之间 优化:两种LOSS相加 Focus loss:

C++的类和对象(六):友元、内部类

目录 友元 友元函数 友元类 内部类 匿名对象 拷贝对象时的一些编译器优化 再次理解类和对象 友元 基本概念:友元提供了一种突破封装的方式,有时提供了便利,但是友元会增加耦合度,破坏了封装,所以友元不宜多用&…