本文共 5360 字,大约阅读时间需要 17 分钟。
随着软件开发的快速迭代,自动化测试越来越成为开发人员和测试人员的必需工具。通过使用 Python、requests 和 unittest 等工具,可以轻松实现接口的自动化测试。本文将详细介绍如何利用这些工具从零到实现接口自动化测试的完整流程。
首先,确保环境中安装了所有必要的库。通过以下 pip 命令可以快速安装:
pip install requests xlrd json unittest
这些库中,requests 用于发送 HTTP 请求,xlrd 用于读取 Excel 文件,unittest 是 unittest 框架,json 用于处理 JSON 格式数据。
为了更好地组织代码,通常会基于 Page Object Model 设计理念创建六类 Python Package。这些类包括:
base_page.py:封装基础请求方法(如 POST、GET、PUT、DELETE 等)。common.py:封装通用功能(如日志记录、Excel 数据处理、报告生成等)。test_login.py、test_register.py 等:分别对应不同的功能模块的测试用例。以下是 base_page.py 的实现代码示例:
import requestsclass BasePage: 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 == 'post' or method == 'POST': return self.method_post(url, params=params, data=data, headers=headers, files=files) elif method == 'get' or method == 'GET': return self.method_get(url, params=params, data=data, headers=headers, files=files) elif method == 'put' or method == 'PUT': return self.method_put(url, params=params, data=data, headers=headers, files=files) elif method == 'delete' or method == 'DELETE': return self.method_delete(url, params=params, data=data, headers=headers, files=files)
common.pycommon.py 主要功能是封装日志记录、Excel 数据读取和 HTML 报告生成等功能。以下是实现代码:
import loggingimport xlrdimport osfrom datetime import datetimeclass Common: def __init__(self): self.log_path = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'report', 'logs') self.report_html = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'report', 'html') self.read_xlrd = os.path.join(os.path.dirname(os.path.dirname(os.path.abspath(__file__))), 'data') def get_logs(self, path): logging.basicConfig( filename=path + '/' + datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.log', level=logging.DEBUG, format='%(asctime)s - %(filename)s - %(funcName)s - %(levelname)s - %(message)s' ) return logging.getLogger('TEST_LOG') def ReadExcelTypeDict(self, file_name, path): path = path + '/' + file_name work_book = xlrd.open_workbook(path) sheets = work_book.sheet_names() DatasList = [] for sheet in sheets: sheet = work_book.sheet_by_name(sheet) nrows = sheet.nrows for i in range(nrows): values = sheet.row_values(i) title_list = values[0] content_list = values[1:] new_list = [] for content in content_list: dic = {} for j in range(len(content)): dic[title_list[j]] = content[j] new_list.append(dic) DatasList.append(new_list) return DatasList def GetHtmlResult(self, suite, title, path): report_path = path + '/' + datetime.now().strftime('%Y-%m-%d-%H-%M-%S') + '.html' with open(report_path, 'wb') as f: run = HTMLTestReportCN.HTMLTestRunner( stream=f, description='接口测试报告', tester='小白', title=title ) run.run(suite) test_login.py测试用例文件 test_login.py 实现了登录功能的自动化测试。以下是实现代码:
import unittestfrom ddt import ddt, datafrom base_page import BasePagefrom common import Common@ddt.ddtclass TestLogin(unittest.TestCase): def setUpClass(cls): cls.logs = Common().get_logs() cls.logs.debug('开始写入接口自动化测试用例') def tearDownClass(cls): cls.logs.debug('自动化接口用例结束') def setUp(self): self.logs.debug('开始本条接口用例') def tearDown(self): self.logs.debug('结束本条用例') @ddt.data(*Common().ReadExcelTypeDict('cezxhi.xlsx')) def test_logins(self, pars): import json dic = json.loads(pars['body参数值']) url = pars['接口地址'] yuqi = pars['预期结果'] fs = pars['请求方式'] result = Base().requests_type(method=fs, url=url, data=dic) self.assertEqual(result.text, yuqi) 在 test_login.py 的末尾添加以下代码以生成测试报告:
if __name__ == '__main__': load = unittest.TestLoader().loadTestsFromTestCase(TestLogin) suite = unittest.TestSuite([load]) Common().GetHtmlResult(suite, '登录测试用例')
运行测试脚本时,可以通过以下方式执行:
python test_login.py
生成的测试报告 saved.html 文件位于报告目录下,打开浏览器查看即可。
在实际应用中,可能会遇到以下问题:
timeout 参数来解决。SessionID。通过以上步骤,可以实现从零开始的接口自动化测试解决方案。如果需要更多功能或详细的实现,可以参考完整的项目代码或参考更多的技术文章。
转载地址:http://bgofk.baihongyu.com/