目录
前言:
1.项目背景及需求
2.框架整体架构设计
3.接口管理模块的封装
4.用例管理模块的封装
5.请求模块的封装
6.签名模块的封装
7.案例展示及代码实现
结语:
前言:
随着互联网技术的不断发展,人们对于软件质量的要求也越来越高,其中接口自动化测试是保证软件质量的重要手段。为了让测试人员更加方便、高效地进行接口自动化测试,我们基于Python语言,使用了测试框架unittest,封装了一个接口自动化框架。
1.项目背景及需求
在进行接口自动化测试时,我们发现很多测试人员都会遇到以下几个问题:
1. 重复造轮子,写重复的代码;
2. 接口模块过多,管理起来非常困难;
3. 没有统一的用例管理方法,测试人员之间的沟通存在问题;
4. 部分接口需要进行签名才能进行访问。
基于以上问题,我们决定封装一个接口自动化框架,用于方便、高效地进行接口自动化测试。
2.框架整体架构设计
整个框架的设计采用了模块化设计,主要包括如下几个模块:
1. 接口管理模块:用于管理所有接口信息,包括接口地址、请求参数、响应结果等;
2. 用例管理模块:用于管理所有测试用例,包括用例名称、用例执行顺序、用例执行状态等;
3. 请求模块:用于发送各种类型的HTTP请求;
4. 签名模块:用于对请求进行签名处理;
3.接口管理模块的封装
接口管理模块是整个框架的核心模块,其主要功能是负责对所有接口信息的管理。具体代码实现如下:
import json
class Api:
def __init__(self, url, method, params=None):
self.url = url
self.method = method
self.params = params
self.response = None
self.result = None
# 对象转json字符串
def to_json_str(self):
return json.dumps({"url": self.url, "method": self.method, "params": self.params})
# json字符串转对象
@staticmethod
def from_json_str(json_str):
dict_data = json.loads(json_str)
return Api(dict_data["url"], dict_data["method"], dict_data["params"])
在封装接口信息时,我们主要考虑如下几个因素:
1. 接口地址;
2. 请求方法;
3. 请求参数;
通过实现Api类中的to_json_str()和from_json_str()方法,我们可以方便地将对象转换为json字符串,并将json字符串转换为对象,以方便管理接口信息。
4.用例管理模块的封装
用例管理模块是整个框架中比较重要的一块,它对于测试用例的管理非常关键。具体代码实现如下:
class Case:
STATUS_READY = 1
STATUS_PASS = 2
STATUS_FAIL = 3
STATUS_ERROR = 4
def __init__(self, name, api_list=None):
self.name = name
self.api_list = api_list or []
self.status = Case.STATUS_READY
# 向用例添加接口
def add_api(self, api):
self.api_list.append(api)
# 执行用例
def execute(self):
for api in self.api_list:
api.execute()
# 对象
#转字典
def to_dict(self):
return {
"name": self.name,
"api_list": [api.to_json_str() for api in self.api_list],
"status": self.status,
}
# 字典转对象
@staticmethod
def from_dict(dict_data):
api_list = [Api.from_json_str(api_json_str) for api_json_str in dict_data.get("api_list", [])]
case = Case(dict_data["name"], api_list)
case.status = dict_data["status"]
return case
在封装用例管理模块时,我们着重考虑如下几个因素:
1. 用例名称;
2. 包含的接口列表;
3. 用例执行状态;
通过实现Case类中的add_api()和execute()方法,我们可以方便地进行接口自动化测试,并可以跟踪测试用例的执行状态。
5.请求模块的封装
请求模块是整个框架中最为基础的一部分,其主要功能是发送各种类型的HTTP请求,并能够获取到响应结果。具体代码实现如下:
import requests
class Request:
@staticmethod
def send(url, method, params=None):
if method.lower() == "get":
response = requests.get(url, params=params)
elif method.lower() == "post":
response = requests.post(url, data=params)
elif method.lower() == "put":
response = requests.put(url, data=params)
elif method.lower() == "delete":
response = requests.delete(url, data=params)
else:
raise Exception("Unsupported HTTP method: {}".format(method))
return response
在封装请求模块时,我们主要考虑如下几个因素:
1. 请求地址;
2. 请求方法;
3. 请求参数;
4. 响应结果;
通过实现Request类中的send()方法,我们可以方便、快速地发送各种类型的HTTP请求,并可以获取到响应结果。
6.签名模块的封装
签名模块是整个框架的一个补充模块,其主要功能是对请求进行签名处理,以保证接口的访问安全性。具体代码实现如下:
import hashlib
class Signature:
@staticmethod
def generate(params):
# 对请求参数按照key进行排序
sorted_params = sorted(params.items(), key=lambda x: x[0])
# 拼接成字符串
raw_str = "".join([str(key) + str(value) for key, value in sorted_params])
# 进行md5签名
sign = hashlib.md5(raw_str.encode("utf-8")).hexdigest()
return sign
在封装签名模块时,我们主要考虑如下几个因素:
1. 请求参数;
2. 根据请求参数生成签名;
通过实现Signature类中的generate()方法,我们可以对请求参数进行签名处理以保证访问接口的安全性。
7.案例展示及代码实现
下面我们以一个简单的接口为例,演示如何使用我们封装的接口自动化框架进行测试。
首先,我们需要定义一个接口:
api = Api("https://www.example.com/api/get_data", "get", {"name": "test"})
然后,我们需要定义一个用例,并向其中添加该接口:
case = Case("test_case")
case.add_api(api)
最后,我们可以执行这个用例,并将测试结果输出:
case.execute()
if case.status == Case.STATUS_PASS:
print("测试通过!")
else:
print("测试失败!")
到这里,我们已经对接口自动化框架的封装进行了详细的介绍。
总的来说,我们的接口自动化框架具有以下几个优点:
1. 封装了重复的代码;
2. 管理接口信息非常方便;
3. 用例管理方便高效;
4. 签名功能保证接口访问安全;
通过使用我们封装的接口自动化框架,可以帮助测试人员更加方便、高效地进行接口自动化测试,提高测试质量和效率。同时,我们的封装方法也可以为其他自动化测试框架的封装提供参考。
完整的代码实现和使用教程可以点击此链接访问:
[接口自动化框架封装项目实战:流程用例带签名混合封装](https://github.com/ChatAiTeam/Interface-Automation-Framework)
在使用本框架过程中,我们也应该注意以下几点:
1. 合理管理接口信息;
2. 定义规范的用例结构;
3. 对于需要签名的接口,需要提前完成签名的逻辑编写;
4. 不断完善和优化框架的功能。
结语:
在日益增长的技术需求下,软件测试必须要持续的创新和改进,用自动化测试工具更科学的尽可能的发现缺陷,提高测试质量成为测试人员的重要任务之一,而接口自动化测试在自动化测试中发挥着至关重要的作用。利用本文介绍的框架,实际运用于项目中进行接口自动化测试,一定会让测试人员的工作更加高效、轻松。
作为一位过来人也是希望大家少走一些弯路,在这里我给大家分享一些自动化测试前进之路的必须品,如果你用得到的话可以直接拿走,希望能对你带来帮助。(WEB自动化测试、app自动化测试、接口自动化测试、持续集成、自动化测试开发、大厂面试真题、简历模板等等),相信能使你更好的进步!
获取方式:留言【自动化测试】即可获取
【自动化测试交流】:574737577(进群备注ccc)http://qm.qq.com/cgi-bin/qm/qr?_wv=1027&k=odSMPmGHlyaD8rCmmNtxOnxgbTny92qe&authKey=%2BzeQysUw0Ux2FXY4G%2BQEOZh%2BDurjUV2vBF4XIm4HSYt73n5ISqUnjwMJSYlSSeZp&noverify=0&group_code=574737577