# 目录 | 目标

目录

  • 接口与接口测试
    • 接口测试认知
    • Postman 接口测试
    • Python 接口开发
    • 接口测试实战
  • 接口自动化测试技术篇
    • 接口自动化测试用例设计
    • Excel 接口测试用例访问
    • MySQL 数据库接口测试用例访问
    • PyTest 测试框架
    • 接口自动化测试必备技能-HTTP 协议
    • Requests 库实现接口请求的代码实现
  • 接口自动化测试实战篇
    • 电商平台慕慕生鲜全套接口自动化测试实现

目标

  • 能够独立进行接口自动化测试的代码开发
  • 掌握 Requests 库,能够使用 Requests 库进行接口自动化测试
  • 掌握 Postman 工具,并能够使用 Postman 完成接口测试
  • 能够掌握 PyTest 测试框架,并能够结合 Allure 框架自动生成测试报告
  • 掌握 PyMySQL,能够使用 PyMySQL 进行数据库的操作
  • 掌握 HTTP 协议,能够理解请求头与响应头中信息的含义

接口测试简介

为什么要进行接口测试

image-20240213211750412

什么是接口

硬件接口

  • 通过某种约定对其他设备进行接入以实现设备与设备之间的交互
    • 比如 : USB 接口 , HDMI 接口 , VGA 接口 , Type-C 接口等等……

软件接口

image-20240213212245384

  • 软件接口常见的约定
    • HTTP 协议
      • HTTPS 协议
      • TCP 协议
      • UDP 协议

接口测试与功能测试的区别

测试方法

功能测试

  • 围绕着页面上的功能点进行测试用例设计与执行
  • 从页面的反馈层面验证,侧重验证功能逻辑实现的准确性

接口测试

  • 根据接口协议,并结合接口参数进行测试用例设计与执行
  • 从接口返回的数据验证,侧重验证返回数据的准确性

介入时机不同

image-20240213213001535

HTTP 协议的接口请求方法

常见的请求方法

  • get 请求
  • post 请求
  • ……

get 请求

  • 通过 ur 来向接口传递数据的请求方式
  • 比较适合传递数据量小,并且保密性低的数据

post 请求

  • 通过请求体的方式向接口传递数据的请求方式
  • 比较适合传递数据量偏大或数据保密性高的数据

Python 接口开发

Flask 简介与安装

什么是 Flask

  • Flask 是轻量级的 web 开发框架
  • 相比其他框架,Flask 更自由、灵活
  • 相比其他框架,Flask 更容易上手

安装 Flask

  • 终端命令 : pip install Flask

Flask 开发 get 接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# 导入模块
from flask import Flask,request

# 创建实例
app = Flask(__name__)

# 路由挂载
# 根路径
@app.route("/")
def hello_world():
return "hello world"

# 指定路径
@app.route("/hello")
def hello():
return "hello"

# 路径动态参数
@app.route("/hello/<username>")
def username(username):
return "hello" + username

# query 参数
# http://127.0.0.1:5000/hello/args/xiaomi?key=hongmi&value=yijia
@app.route("/hello/args/<username>")
def queryKeyValue(username):
key = request.args.get("key")
value = request.args.get("value")
return "hello" + username + "::::" + key + value

# 执行实例
if __name__ == "__main__":
app.run()

Flask 开发 Post 接口

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 导入模块
from flask import Flask,request

# 创建实例
app = Flask(__name__)

# 路由挂载
@app.route("/mypost",methods=["post"])
def my_post():
return "post request"

@app.route("/mypost1",methods=["post"])
def my_post1():
# 表单数据类型
username = request.form["username"]
sex = request.form["sex"]
print(username)
print(sex)
return "post request" + username + sex

@app.route("/mypost2",methods=["post"])
def my_post2():
# json 数据格式
request_data = request.get_json()
print(request_data)
print(request_data["user"])
return "post request" + str(request_data)

# 执行实例
if __name__ == "__main__":
app.run(port=5555)

接口与数据库的交互

  • 安装 PyMySQL
    • 终端命令 : pip install PyMySQL
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# 导入模块
import pymysql
from flask import Flask

# 连接数据库
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="it666",
charset="utf8"
)

# 创建连接数据库的实例
cursor = conn.cursor()

# 创建实例
app = Flask(__name__)

# 路由挂载
@app.route("/")
def hello_world():
# SQL 语句
sql = "select * from users"
# 执行 sql 语句,获得返回的结果
result = cursor.execute(sql) # 获取到返回数据的总条数
r = cursor.fetchall() # 获得返回的数据
return str(r)

# 执行实例
if __name__ == "__main__":
app.run(port=5555)

Postman 接口测试

Postman 的介绍与安装

  • 略….

Postman 发起 get 请求

  • 服务端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 导入模块
from flask import Flask,request
import pymysql

# 连接数据库
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="it666",
charset="utf8"
)

# 创建连接数据库的实例
cursor = conn.cursor()

# 创建实例
app = Flask(__name__)

# 路由挂载
# get 请求 的 query 参数
@app.route("/hello/args/<username>")
def queryKeyValue(username):
key = request.args.get("key")
value = request.args.get("value")
return "hello" + username + "::::" + key + value

# get 请求
@app.route("/")
def hello_world():
# SQL 语句
sql = "select * from users"
# 执行 sql 语句,获得返回的结果
result = cursor.execute(sql) # 获取到返回数据的总条数
r = cursor.fetchall() # 获得返回的数据
return str(r)

# post 请求
@app.route("/mypost",methods=["post"])
def my_post():
return "post request"

@app.route("/mypost1",methods=["post"])
def my_post1():
# 表单数据类型
username = request.form["username"]
sex = request.form["sex"]
print(username)
print(sex)
return "post request" + username + sex

@app.route("/mypost2",methods=["post"])
def my_post2():
# json 数据格式
request_data = request.get_json()
print(request_data)
print(request_data["user"])
return "post request" + str(request_data)

# 执行实例
if __name__ == "__main__":
app.run(port=5555)

image-20240213225632855

image-20240213225415004

Postman 发起 post 请求

  • 服务端代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
# 导入模块
from flask import Flask,request
import pymysql

# 连接数据库
conn = pymysql.connect(
host="127.0.0.1",
user="root",
password="123456",
database="it666",
charset="utf8"
)

# 创建连接数据库的实例
cursor = conn.cursor()

# 创建实例
app = Flask(__name__)

# 路由挂载
# get 请求 的 query 参数
@app.route("/hello/args/<username>")
def queryKeyValue(username):
key = request.args.get("key")
value = request.args.get("value")
return "hello" + username + "::::" + key + value

# get 请求
@app.route("/")
def hello_world():
# SQL 语句
sql = "select * from users"
# 执行 sql 语句,获得返回的结果
result = cursor.execute(sql) # 获取到返回数据的总条数
r = cursor.fetchall() # 获得返回的数据
return str(r)

# post 请求
@app.route("/mypost",methods=["post"])
def my_post():
return "post request"

@app.route("/mypost1",methods=["post"])
def my_post1():
# 表单数据类型
username = request.form["username"]
sex = request.form["sex"]
print(username)
print(sex)
return "post request" + username + sex

@app.route("/mypost2",methods=["post"])
def my_post2():
# json 数据格式
request_data = request.get_json()
print(request_data)
print(request_data["user"])
return "post request" + str(request_data)

# 执行实例
if __name__ == "__main__":
app.run(port=5555)

image-20240213225839828

image-20240213225724584

接口测试实战项目

接口文档