之前分析完了接口测试框架的设计与架构,下面我们就来一步一步的完成接口自动化测试框架的实现。
1、创建测试框架项目
为Student Management System Interface testing framework
创建一个测试项目SMSITF
。
项目名上右键 —> New —> Python Package —> 创建common目录。
同理创建
interface目录:存放接口的目录。
script目录:存放测试用例的目录。
Config目录:存放配置文件。配置一些常量,例如数据库的相关信息,接口的相关信息等。
Data目录:存放公共部分数据,比如测试数据,excel文件等等。
Log目录:存放logging日志信息。
Reports目录:存放接口测试报告目录。
创建好后如下图:
接下来我们要一步一步实现这个框架里边的功能。
Dictionary
和Python Package
目录说明:
Dictionary
在Pycharm中就是一个文件夹,放置资源文件,该文件夹其中并不包含__init.py__
文件。
Python Package
文件夹会自动创建__init.py__
文件,换句话说Python Package
就是创建一个目录,其中包括一组模块和一个__init.py__
文件。
2、封装发送请求方法
一些公共的方法,要写在common目录中,主要是封装使用requests库发送请求的方法。
其他所有的公共的方法都可以封装在common目录中。
"""
send_method.py 文件说明:
1,封装接口请求方式
根据项目接口文档提供的内容进行封装
不同的项目,sendmethod也不太一样,如请求体格式等。
2.封装思路-结合接口三要素
请求方式+请求地址
请求参数
返回值
3.以学生管理系统SMS为例:
结合学生管理系统项目的接口文档,封装SendMethod类
"""
# 导入所需模块
import requests
import json
# 封装请求模块
class SendMethod:
"""
结合学生管理系统SMS,请求方式包括如下:
get ---> parmas标准请求参数
post--->请求参数类型 json
put --->请求参数类型 json
delete ---> parmas标准请求参数
"""
# 定义该方法为静态方法
@staticmethod
def send_method(method, url, parmas=None, json=None):
"""
封装适用于学生管理系统项目的接口请求
:param method: 请求方式
:param url: 请求地址
:param parmas: get和delete请求参数
:param json: post和put请求参数
:param headers: 请求头
:return:
"""
# 定义发送请求的方法
if method == "get" or method == "delete":
response = requests.request(method=method, url=url, params=parmas)
elif method == "post" or method == "put":
response = requests.request(method=method, url=url, json=json)
# 如果有不同的请求头,还可以继续添加接收的参数
# response = requests.request(method=method, url=url, json=json, data=data, files=data)
else:
# 这里是简单处理,完成封装需要加上异常处理。
response = None
print("请求方式不正确")
# 如果请求方式是delete,只返回状态码
# 这是根据项目接口文档中delete方法的返回规则定的。
if method == "delete":
return response.status_code
else:
# 项目中接口的返回值是json格式的,就可以用json()进行格式化返回结果。
return response.json()
@staticmethod
def json_2_python(res):
"""
格式化返回数据
:param res:接口返回的数据
:return:
"""
return json.dumps(res, indent=2, ensure_ascii=False)
if __name__ == '__main__':
method = "post"
url = "http://127.0.0.1:8000/api/departments/"
data = {
"data": [
{
"dep_id": "T02",
"dep_name": "接口测试学院",
"master_name": "Test-Master",
"slogan": "Here is Slogan"
}
]
}
res = SendMethod.send_method(method=method, url=url, json=data)
# print(res)
print(SendMethod.json_2_python(res))
# method = "get"
# params = {"$dep_id_list": "1, 2, 3"}
# res = SendMethod.send_method(method=method, url=url, json=data)
# print(SendMethod.json_2_python(res))