python API自动化(接口测试基础与原理)

1.接口测试概念及应用

什么是接口

接口是前后端沟通的桥梁,是数据传输的通道,包括外部接口、内部接口,内部接口又包括:上层服务与下层服务接口,同级接口

外部接口 :比如你要从 别的网站 或 服务器 上获取 资源或信息 ,别人肯定不会把数据库共享给你,他只能给你提供一个他们写好的方法来获取数据,你引用他提供的接口就能使用他写好的方法,从而达到数据共享的目的 。比如说:支付接口,沙箱,Mock.....

内部接口方法与方法之间,模块与模块之间的交互,程序内部抛出的接口。比如:bbs系统,有登陆模块,有发帖模块等等,那你要发帖就必须先登陆,那么这两个模块就有交互,我们在测试的时候都用通过工具才能调试和测试

如图所示,我们提供了账号密码,通过http协议接口访问服务器,服务器再通过接口访问资料数据库和代码进行校验 ,校验的接口通过服务器返还给客户端进行响应

什么是接口测试:接口测试分为两种手段:手工测试、自动化测试

接口测试是对系统或组件之间的接口进行测试,主要校验数据的交换、传递和控制管理过程,以及相互逻辑依赖关系。而接口自动化测试是让程序代替人为对接口项目进行自动化验证测试的过程

手工测试:页面--登录功能时候--对登录接口测试

自动化测试:自动、无人值守--知识点:CICD--持续集成

我们进行测试应该借助某些工具去完成:postman、jmeter 、代码等

接口测试的意义

1.项目成本、时间成本---更低

2.更早进入测试环节---效率

3.接口(不会频繁变动)--- 节约成本

4.跳过前端的校验(正则),直接访问接口。(确定前端和后端同时做校验)---安全着想

2.HTTP请求的核心概念及原理

重点HTTP的请求头、请求体、响应码解析

核心请求四要素:

**1.**接口URL:IP地址+端口+路径

  1. 接口请求参数:用户名 密码

  2. 接口请求方法:get post delete put...

  3. 接口响应报文

缩略的词:

URL: 统一资源(图片、网页、视频...)定位符(地方)--- 地址 :www.baidu.com

HTML: 超文本标记语言,特点:成对出现:内容--- 前端常用

HTTP: 常用的协议 --- 超文本传输协议

URL详解:

协议:客户端和服务器通讯的标准,http、https、ssh等

host: IP或域名,比如上面的localhost(127.0.0.1)- 本机

www.baidu.com (14.119.104.254) --- 背后都是对应的ip--相当于是对应的网络的 地址 ---某台电脑程序:mysql :3306 、tomcat:8080、....(域名化方便记忆)

端口号:协议默认的端口号是可以省略的(http:默认端口80、 https:默认端口 443、ssh:默认端口22)

资源路径:资源存放的位置,资源可以是各种超文本信息,如音频、视频等,如 上:/index.php

参数:如 ?m=Home&c=Goods&a=goodsInfo&id=46 ;格式:用?与URL的主体部 分分开,参数的格式 参数名=参数值 ,有多个参数时用&拼接即可

HTTP详解:

HTTP: 常用的协议 --- 超文本传输协议:请求--- 响应协议 ----

怎么通信的呢?TCP/IP协议

HTTP包含哪些请求:请求行、请求头、请求体

请求行:请求方法、请求地址(URL)、协议版本

请求头:很多字段、看不懂,系统固定的。告诉服务器我需要什么样的资源、描述 对应的请求。

注意:cookie(鉴权)、content-Type(告诉我们传输数据的格式是什么,要和请求体 当中的数据格式一一对应)

Content-Type取值与body传值方式对应关系:

请求体 :请求参数--- 后面再说--- 这个接口的对应的参数:get请求一般是在url当 中;post一般在body当中

HTTP的请求方法

响应的详解:

响应行、响应头、响应正文 ---通过对应的请求得到对应的响应数据

响应行: 协议版本、状态码、状态信息

常见的状态码有哪些?

1xx:指示信息--表示请求已接收,继续处理

2xx:成功--表示请求已被成功接收、理解、接受

3xx:重定向--要完成请求必须进行更进一步的操作

4xx:客户端错误--请求有语法错误或请求无法实现

5xx:服务器端错误--服务器未能实现合法的请求

常见状态码:

  • 200 OK//客户端请求成功
  • 400 Bad Request//客户端请求有语法错误,不能被服务器所理解
  • 401 Unauthorized//请求未经授权,这个状态代码必须和WWW-Authenticate报头域一起使用
  • 403 Forbidden//服务器收到请求,但是拒绝提供服务
  • 404 Not Found//请求资源不存在,eg:输入了错误的URL
  • 500 Internal Server Error//服务器发生不可预期的错误
  • 503 Server Unavailable//服务器当前不能处理客户端的请求,一段时间后可能恢复正常

响应头

告诉客户端我返回的一些数据的情况,比如大小、时间、返回数据格式...

响应正文

具体的响应数据得到以后,我们对应的前端会进行渲染,得到用户能够看明白的 数据格式及样式等等。

5.接口测试

接口测试流程

我们来看一个注册接口的用例

我们先来看看文档

接口URL : 协议+域名+路径 + 公共参数

http://shop-xo.hctestedu.com?s=api/user/reg&application=app&application_client_type=weixin

请求方法:POST

请求参数:需要和请求头的content-type 一 一 对应

正常情况:

  1. 有些接口文档会告诉你这个字段是什么请求类型---直接选择即可
  2. 一般用form表单提交 (字段相对比较少),【默认】
  3. 提交的有对应的图片:from-data
  4. 字段非常多,或者它的数据{XXXX:XXXX}:raw-json

响应数据:

--- 期望结果:

  1. 输入正确的数据:注册成功

  2. 输入已经存在的数据:账号已存在

.... --- 测试用例设计 (请求参数不同数据的组合)

执行CASE---工具JMeter

  • 测试计划:测试起点,所有组件的容器
  • 线程组:代表一定数量的用户
  • 取样器:向服务器发送请求的最小单元
  • 逻辑控制器:结合取样器实现一些复杂的逻辑
  • 前置处理器:在请求之前的工作
  • 后置处理器:在请求之后的工作
  • 断言:判断请求是否成功
  • 定时器:负责请求之间的延迟间隔。常用的有固定,高斯,随机
  • 配置元件:配置信息
  • 监听器:收集结果

我们填入对应的值

添加监听器收集结果

响应=== 实际结果 --- 进行获取:msg字段 ---json提取器

测试用例===期望结果

我们可以通过添加断言来判断结果是否符合预期

请求默认面板

可以把不会经常修改的参数放入其中

环境变量 --- 这种不会经常改动的东西---就得这么去做

设置变量 --- 用户定义的变量 --- 引用变量:${变量名}

我们设置了环境变量之后我们http里的请求就如下所示

数据驱动(DDT)--把接口数据提取出来

  1. 数据准备阶段
  2. 利用csv进行引用

我们再加入循环控制器 循环我们的用例数

再修改断言

接口测试当中,怎么解决是谁的问题?--判别是谁就是有个通用的:token(软件当中的身份证号)

  1. 登录 --- 登录成功之后会在响应数据或者请求头当中有:ebc3bf29094fde4a0752dcc586b03f1d
  2. 通过登录用户去加入购物车 :请求数据会需要加上:ebc3bf29094fde4a0752dcc586b03f1d (header)--- url

接口关联

【接口关联】:通过登录用户去加入购物车

  1. 登录 --- 登录成功之后会在响应数据或者请求头当中有:ebc3bf29094fde4a0752dcc586b03f1d
  2. 通过登录用户去加入购物车 :请求数据会需要加上:ebc3bf29094fde4a0752dcc586b03f1d (header)--- url
  3. ...
  4. ...

Jmeter怎么连接数据库

1.填写如下数据,并且取一个名字

  1. 填写请求:需要引用上面的名字,正常写对应的sql --- 会有多个数据:sqlname+ 下标

  2. 在测试计划当中必须引用对应的jar包

相关推荐
一点媛艺3 小时前
Kotlin函数由易到难
开发语言·python·kotlin
魔道不误砍柴功4 小时前
Java 中如何巧妙应用 Function 让方法复用性更强
java·开发语言·python
_.Switch4 小时前
高级Python自动化运维:容器安全与网络策略的深度解析
运维·网络·python·安全·自动化·devops
安冬的码畜日常5 小时前
【玩转 Postman 接口测试与开发2_006】第六章:Postman 测试脚本的创建(中):脚本的位置与执行顺序、AI助手及私有模块的使用
测试工具·postman·测试脚本·postbot·package library
测开小菜鸟5 小时前
使用python向钉钉群聊发送消息
java·python·钉钉
萧鼎6 小时前
Python并发编程库:Asyncio的异步编程实战
开发语言·数据库·python·异步
学地理的小胖砸6 小时前
【一些关于Python的信息和帮助】
开发语言·python
疯一样的码农6 小时前
Python 继承、多态、封装、抽象
开发语言·python
Python大数据分析@7 小时前
python操作CSV和excel,如何来做?
开发语言·python·excel
黑叶白树7 小时前
简单的签到程序 python笔记
笔记·python