博客
关于我
Python+requests+unittest执行接口自动化测试详情
阅读量:796 次
发布时间:2023-03-07

本文共 5360 字,大约阅读时间需要 17 分钟。

Python + requests + unittest 实现接口自动化测试

随着软件开发的快速迭代,自动化测试越来越成为开发人员和测试人员的必需工具。通过使用 Python、requests 和 unittest 等工具,可以轻松实现接口的自动化测试。本文将详细介绍如何利用这些工具从零到实现接口自动化测试的完整流程。

1. 安装所需库

首先,确保环境中安装了所有必要的库。通过以下 pip 命令可以快速安装:

pip install requests xlrd json unittest

这些库中,requests 用于发送 HTTP 请求,xlrd 用于读取 Excel 文件,unittest 是 unittest 框架,json 用于处理 JSON 格式数据。

2. 创建六类 Python Package

为了更好地组织代码,通常会基于 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)

3. 创建通用类 common.py

common.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)

4. 实现测试用例 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)

5. 生成测试报告

在 test_login.py 的末尾添加以下代码以生成测试报告:

if __name__ == '__main__':    load = unittest.TestLoader().loadTestsFromTestCase(TestLogin)    suite = unittest.TestSuite([load])    Common().GetHtmlResult(suite, '登录测试用例')

6. 运行测试

运行测试脚本时,可以通过以下方式执行:

python test_login.py

7. 查看测试报告

生成的测试报告 saved.html 文件位于报告目录下,打开浏览器查看即可。

注意事项

在实际应用中,可能会遇到以下问题:

  • HTTP 请求超时:可以通过设置请求的 timeout 参数来解决。
  • SessionID 不一致:确保每次请求都使用新的 SessionID。
  • 接口认证:处理 API 的认证机制(如 OAuth、API 密钥等)。

通过以上步骤,可以实现从零开始的接口自动化测试解决方案。如果需要更多功能或详细的实现,可以参考完整的项目代码或参考更多的技术文章。

转载地址:http://bgofk.baihongyu.com/

你可能感兴趣的文章
Python基础之(一)基本数据类型
查看>>
Python基础【os】
查看>>
Python基础——面向对象
查看>>
Python基础——线程锁
查看>>
python基础——线程与进程
查看>>
Python基础——构造方法和特殊成员方法
查看>>
Python基础——多线程值从Thread类继承
查看>>
Python基础——多线程之信号量
查看>>
Python基础——_thread多线程
查看>>
Python基础——Thread类与线程对象
查看>>
Python基础——Thread创建管理多线程
查看>>
Python基础——SQLite数据库基本操作
查看>>
Python基础——MySQL数据库基本操作
查看>>
Python基础_列表 list
查看>>
python系列【仅供参考】:python异步库调用gevent和asyncio对比
查看>>
python基础3
查看>>
Python基础08 面向对象的基本概念
查看>>
python系列【仅供参考】:python二进制转10进制
查看>>
Python基础-函数篇
查看>>
python基础---->常用模块
查看>>