本文共 5159 字,大约阅读时间需要 17 分钟。
随着软件开发的快速迭代,自动化测试已成为保障代码质量的重要环节。以下将从基础到高级实践,指导你如何利用Python、requests、unittest等工具实现接口自动化测试。
安装所需的第三方库是自动化测试的基础。通过以下命令可以快速完成安装:
pip install requestspip install xlrdpip install jsonpip install unittest
基于Page Object Model设计理念,我们创建了六个核心Python包,分别为:
base:封装所有公共请求方法。common:存储通用功能模块,如日志记录、Excel数据读取等。pages:根据业务功能划分页面类。test_cases:存储测试用例,采用数据驱动测试方式。reports:用于存储测试报告。config:存储测试配置信息,如路径设置。base/Base_Page.py 是核心模块,封装了所有常见的HTTP请求方法:
import requestsclass Base: def method_post(self, url, params=None, data=None, headers=None, files=None): return requests.post(url=url, params=params, data=data, headers=headers, files=files) def method_get(self, url, params=None, data=None, headers=None, files=None): return requests.get(url=url, params=params, data=data, headers=headers, files=files) def method_put(self, url, params=None, data=None, headers=None, files=None): return requests.put(url=url, params=params, data=data, headers=headers, files=files) def method_delete(self, url, params=None, data=None, headers=None, files=None): return requests.delete(url=url, params=params, data=data, headers=headers, files=files) def requests_type(self, method, url, params=None, data=None, headers=None, files=None): if method in ['post', 'POST']: return self.method_post(url=url, params=params, data=data, headers=headers, files=files) elif method in ['get', 'GET']: return self.method_get(url=url, params=params, data=data, headers=headers, files=files) elif method in ['put', 'PUT']: return requests.put(url=url, params=params, data=data, headers=headers, files=files) elif method in ['delete', 'DELETE']: return requests.delete(url=url, params=params, data=data, headers=headers, files=files)
common/Common.py 实现了日志记录、Excel数据读取等功能:
import loggingimport timeimport xlrd# 配置日志路径和报告路径log_path = r'D:\PycharmProjects\自动化接口测试\report\logs'report_html = r'D:\PycharmProjects\自动化接口测试\report\html'read_xlrd = r'D:\PycharmProjects\自动化接口测试\data'class Common: def get_logs(self, path=log_path): # 初始化日志器 logs = logging.getLogger() logs.setLevel(logging.DEBUG) # 生成日志文件路径 timestamp = time.strftime('%Y-%m-%d-%H-%M-%S') log_file = f'{path}/{timestamp}.log' # 配置文件处理器 file_handler = logging.FileHandler(log_file, 'a+', encoding='utf-8') file_handler.setLevel(logging.DEBUG) # 设置日志格式 formatter = logging.Formatter('%(asctime)s - %(filename)s - %(funcName)s - %(levelname)s - %(message)s') file_handler.setFormatter(formatter) pycharm_handler = logging.StreamHandler() pycharm_handler.setFormatter(formatter) # 添加日志处理器 logs.addHandler(file_handler) logs.addHandler(pycharm_handler) return logs def ReadExcelTypeDict(self, file_name, path=read_xlrd): # 读取Excel文件并转换为字典 path = f'{path}/{file_name}' work_book = xlrd.open_workbook(path) sheets = work_book.sheet_names() DatasList = [] for sheet in sheets: sheets = work_book.sheet_by_name(sheet) nrows = sheets.nrows for i in range(nrows): values = sheets.row_values(i) DatasList.append(values) # 转换为字典 title_list = DatasList[0] content_list = DatasList[1:] new_list = [] for content in content_list: dic = {} for i in range(len(content)): dic[title_list[i]] = content[i] new_list.append(dic) return new_list 在 test_cases/TestLogin.py 中,使用 unittest 和 ddt 框架设计测试用例:
import unittestimport ddtfrom common import commons as commonfrom base import Base_Page as Base@ddt.ddtclass TestLogin(unittest.TestCase): def setUp(self): self.logs = common.Common().get_logs() self.logs.debug('开始本条接口用例') def tearDown(self): self.logs.debug('结束本条用例') @ddt.data(*common.Common().ReadExcelTypeDict('cezxhi.xlsx')) def test_logins(self, pars): import json dic = json.loads(pars['body参数值']) url = pars['接口地址'] fs = pars['请求方式'] result = Base().requests_type(method=fs, url=url, data=dic) self.assertEqual(result.text, pars['预期结果']) 通过读取Excel文件,动态加载测试数据,实现数据驱动测试:
# 读取Excel文件并获取测试数据test_data = common.Common().ReadExcelTypeDict('cezxhi.xlsx') 在测试用例执行后,调用 common.Common().GetHtmlResult 生成HTML测试报告:
from unittest import TestLoader, Suiteimport HTMLTestReportCNdef run_tests(): loader = TestLoader() test_cases = loader.loadTestsFromTestCase(TestLogin) suite = Suite([test_cases]) common.Common().GetHtmlResult(suite, '登录测试用例') if __name__ == '__main__': run_tests()
运行测试后,查看控制台输出和生成的测试报告:
运行结果:INFO:root:开始写入接口自动化测试用例...INFO:root:自动化接口用例结束测试报告路径:D:\PycharmProjects\自动化接口测试\report\html\2024-03-21-10-23-59.html
通过以上步骤,你可以实现一套完整的接口自动化测试框架,并根据实际项目需求进行扩展和调整。
转载地址:http://dgofk.baihongyu.com/