博客
关于我
Python+requests+unittest执行接口自动化测试详情
阅读量:801 次
发布时间: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一维数组 提取_python – 如何从numpy中的1维数组中提取零维切片
查看>>
python三大库之--numpy(一)
查看>>
python三大库之--numpy(二)
查看>>
python上的字无效字符_标识中的无效字符
查看>>
python下用decode和encode 中文转码
查看>>
Python下调用Linux的Shell命令
查看>>
Python接口自动化测试实战系列
查看>>
python下载_安装_配置_以及第一行python程序---python工作笔记009
查看>>
Python不协调机器人消息.内容
查看>>
Python与C#之间内存共享互传信息
查看>>
python与c语言混合编程_你试过C语言和Python一起混合编程吗?两者相加不是已经无敌了!...
查看>>
python与excel
查看>>
Python与Excel的完美邂逅:深入浅出,手把手教你轻松玩转Excel数据操作
查看>>
python与flask_Python编程中flask的简介与简单使用
查看>>
python与图灵机器人交互(WXPY版本)
查看>>
python与运算符_python运算符
查看>>
python两个列表获取交集,并集,差集
查看>>
python两个字典合并,两个list合并
查看>>
Python两个版本共存时,命令行升级pip
查看>>