软件测试: 从入门到实践(接口自动化)

接口自动化

接口自动化测试,是指通过程序化的方式对接口进行调用和验证,模拟不同的请求场景,以确保软件系统内部各个组件之间能够正确地通信并交换数据。相比人工逐个调用接口进行验证,接口自动化可以在短时间内反复执行大量测试用例,从而显著提高测试效率和测试结果的稳定性。

接口自动化测试关注的重点在于系统内部的逻辑处理和数据传输是否正确,而不是用户在页面上的操作过程。它直接绕过 UI 层,对后端接口进行验证,因此不会受到页面改版、样式变化或前端交互调整的影响。这种特性使接口自动化在系统功能频繁迭代的情况下,依然能够保持较高的测试稳定性。

由于接口测试直接作用于系统的核心功能和数据处理流程,一旦出现问题,也更容易通过返回结果、状态码和日志信息来快速定位错误原因。与 UI 自动化相比,接口自动化测试的执行速度更快、维护成本更低,同时覆盖范围也更容易扩展。通过合理地引入接口自动化测试,可以在保证系统质量的同时,有效减少人工测试投入,缩短测试周期,提升整体开发和测试效率。

在接口自动化中比较常用的编程语言有 python,Java,go等等

一 . 最常用的接口自动化语言

1.Python(首选 / 入门最友好

优点:

  • 语法简单,学习成本低

  • 第三方库丰富,特别适合接口测试

  • 非常适合快速搭建自动化框架


2.Java(企业级 / 大厂常用

优点:

  • 稳定、规范,适合大型项目

  • 企业级项目多(尤其是金融、银行)

  • 和后端(Spring Boot)无缝衔接

二 . Python的requests模块

通过requests模块我们可以很轻易地对网站/接口等 发起http请求

我们先着手使用requests模块,再来介绍它的具体概念,使用之前只需要知道requests模块就是用来发起http请求的即可

1.通过pip下载requests模块

pip install requests == '版本version号'

pip install requests==2.31.0

看到successfully installed requests - 2.31.0即安装成功

通过pip list可以查看安装的包

2.简单的脚本

通过get方法可以向指定的网站或接口发出get请求,会给定一个对象作为返回值

requests.get('https://www.pdsu.edu.cn')

通过这个对象来封装了 http请求的响应

我们通过res. 属性 可以获取到响应的具体信息

可以看到 headers,cookies,status_code等都有包含,这里的headers我们仔细想一想一定是响应头,因为我们通过requests.get方法发出get请求,我们期望得到网站或者接口的响应来获取想要的信息,所以这里的headers是响应头

常见的属性

响应对象response 提供的属性/方法如下:

status_code,响应状态码,404,200,401,301等这些http响应状态码

content,字节方式的响应体,会自动解码gzip和deflate压缩

headers,以字典对象存储服务器响应头,若不存在返回None

json,requests模块内置的json解析方法,将响应体解析为json格式

url,获取实际请求的url

encoding,编码格式,根据响应头的字符编码确定

cookies,获取服务器设置的cookies

text,字符串格式的响应体,会自动根据响应头部的字符编码进行解码

常用的就是如上写的这些属性

常见请求方法

get请求,post请求,request请求

通过源码我们可以得知,get方法和post方法 其实都是request方法的封装,本质是一样的

以get请求为例看一下源码

def get(url, params=None, **kwargs):
    r"""Sends a GET request.

    :param url: URL for the new :class:`Request` object.
    :param params: (optional) Dictionary, list of tuples or bytes to send
        in the query string for the :class:`Request`.
    :param \*\*kwargs: Optional arguments that ``request`` takes.
    :return: :class:`Response <Response>` object
    :rtype: requests.Response
    """

    return request("get", url, params=params, **kwargs)

先忽略掉get方法的params,**kwargs,以及post方法的data,json,**kwargs,还有request的**kwargs 的属性

我们先来简单的使用这三个方法

了解到这么多已经可以开始愉快的玩耍了,等到这三个方法的这几个参数都使用熟练了,你就会有欲求不满的感觉,接下来这几个参数就显得弥足珍贵了

所有可传递的参数如下:

url:请求的接口地址
headers:一个字典,包含要发送的 HTTP 头信息
cookies:一个字典、列表或者 RequestsCookieJar 对象,包含要发送的 cookies
files:一个字典,包含要上传的文件
data:一个字典、列表或者字节串,包含要发送的请求体数据(常用于表单提交)
json:一个字典,会被自动转换为 JSON 格式并发送
params:一个字典、列表或者字节串,会作为查询字符串拼接到 URL 后面

auth:一个元组,包含用户名和密码,用于 HTTP 基本认证
timeout:一个浮点数或元组,用于指定请求的超时时间
proxies:一个字典,包含代理服务器的配置信息
verify:一个布尔值或字符串,用于指定是否校验 SSL 证书

我们在这里举一个博客查询和登录的小例子,来演示使用一下

博客查询

1.先打开postman验证接口

通过登录接口,我们拿到后端返回来的json数据,里面包含了code,errMsg,还有data,这里的data就是user_token_header(后端自行设置,为鉴权使用)

2.通过python自动化脚本来验证一下

可以看到代码总共是分为了四个部分,分别是header字典,params字典,url路径 , request方法

回顾我们之前讲解到的request方法,当时总共有三个参数,分别是,method,url,**kwargs,前两个很简单分别是请求的方法和请求的路径,第三个参数 **kwargs 是一个可变关键字参数,用来接收方法调用时传入的所有“键值对”形式的实参。在方法内部,这些键值对会被统一封装成一个字典,通过形参 **kwargs 进行接收和处理。

这里我们分别传入了params和header字典

params:一个字典、列表或者字节串,会作为查询字符串拼接到 URL 后面

不懂**kwargs 或者 * args可以看这篇文章

(68 封私信 / 82 条消息) Python中的*args和**kwargs - 知乎

最终的返回值如图所示: 

博客登录

我们这里直接开始编写自动化脚本,先通过postman验证接口也行

可以看到这里大概分为三个部分,data字典, url路径,post方法

data:一个字典、列表或者字节串,包含要发送的请求体数据(常用于表单提交)

恰巧我们的登录功能使用的是表单

返回值如果不确定是什么类型的,其实可以逐个尝试一下,也就是text,json这两种

这里我们通过res.json()得到返回结果

通过postman验证后无误

添加Cookie信息

我们用这个接口
https://httpbin.org/cookies

它的作用很简单:
你传什么 cookie,它就原样返回给你
非常适合学习「requests 如何添加 cookie」

代码格式和上面两个案例类似

返回值为

问题:上传参数时该选择 params、json 还是 data

params 用于在 URL 中传递查询参数(Query Parameters),参数会直接拼接在 URL 后面,最常见于 GET 请求,但在其他请求方式中也可以使用,一般用于分页、筛选等场景。

json 用于在请求体(Body)中传递 JSON 格式的数据,常用于 POST、PUT 等请求方式。当使用 json 参数时,requests 会自动将数据序列化为 JSON 字符串,并自动设置请求头 Content-Type 为 application/json,这是当前接口开发中最常见、最规范的参数传递方式。

data 用于在请求体(Body)中传递表单格式的数据,通常对应传统表单提交,Content-Type 一般为 application/x-www-form-urlencoded 或 multipart/form-data,多用于老接口或文件上传等场景。

简单理解就是:
查询条件用 params,
JSON 接口用 json,
表单提交用 data。

有了 requests 库,我们可以方便地对接口发起 HTTP 请求,但在自动化测试中,往往需要编写和维护大量测试用例,仅靠 requests 是不够的。这时就需要配合更专业的测试框架来使用。

requests 库主要负责 HTTP 请求的发送与响应获取,而 pytest 框架则负责 测试用例的组织、执行、断言以及测试结果的管理。两者结合,才能构成一套完整、规范的接口自动化测试体系。

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值