接口自动化测试套件封装示例

这篇具有很好参考价值的文章主要介绍了接口自动化测试套件封装示例。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 在Python中,我们可以使用requests库来实现接口自动化测试,并使用unittest或pytest等测试框架来组织和运行测试套件。以下是一个基本的接口自动化测试套件封装示例:

首先,我们需要安装所需的库:


pip install requests pytest

创建一个项目目录结构,如下所示:


project/
│
├── common/           # 公共方法模块
│   └── utils.py      # 存放请求、断言等公共函数
│
├── conf/             # 配置模块
│   └── config.py     # 存放测试环境、API基础URL等配置信息
│
├── data/             # 测试用例参数模块
│   └── test_data.json # 存放测试用例的输入数据
│
├── log/              # 日志模块
│   └── log.txt       # 存放测试过程中的日志信息
│
├── report/           # 测试报告模块
│   └── report.html   # 自动生成的测试报告
│
├── test_case/        # 测试用例模块
│   ├── test_login.py # 登录接口测试用例
│   ├── test_signup.py# 注册接口测试用例
│   └── ...          # 其他接口测试用例
│
└── testsuite.py      # 测试套件文件,用于组织和运行测试用例

同时,在这我也准备了一份软件测试视频教程(含接口、自动化、性能等),需要的可以直接在下方观看就行,希望对你有所帮助!【公众号:互联网杂货铺】免费领取软件测试资料!

2024年Python自动化测试全套保姆级教程,70个项目实战,3天练完,永久白嫖...

编写各个模块的代码

common/utils.py:封装请求和断言等公共函数。


import requests
import json
def send_request(method, url, headers=None, params=None, data=None):
    response = requests.request(method, url, headers=headers, params=params, data=data)
    response.raise_for_status()  # 如果响应状态不是200,抛出异常
    return response.json()
def assert_response(response_data, expected_key, expected_value):
    assert expected_key in response_data, f"Expected key '{expected_key}' not found in response."
    assert response_data[expected_key] == expected_value, f"Expected value for '{expected_key}' is '{expected_value}', but got '{response_data[expected_key]}'"

conf/config.py:配置测试环境和基础URL。

TEST_ENVIRONMENT = "development"
BASE_URL = "http://localhost:8000/api/"
test_case/test_login.py:编写登录接口测试用例。
import json
from project.common.utils import send_request, assert_response
from project.conf.config import BASE_URL
class TestLogin:
    def test_successful_login(self):
        url = f"{BASE_URL}login"
        data = {
            "username": "test_user",
            "password": "test_password"
        }
        response_data = send_request("POST", url, data=json.dumps(data))
        assert_response(response_data, "status", "success")
        assert_response(response_data, "message", "Logged in successfully.")
    def test_invalid_credentials(self):
        url = f"{BASE_URL}login"
        data = {
            "username": "invalid_user",
            "password": "invalid_password"
        }
        response_data = send_request("POST", url, data=json.dumps(data))
        assert_response(response_data, "status", "error")
        assert_response(response_data, "message", "Invalid credentials.")

testsuite.py:组织和运行测试用例。


import pytest
from project.test_case import test_login, test_signup  # 导入其他测试用例模块
@pytest.mark.parametrize("test_case_module", [test_login, test_signup])
def test_suite(test_case_module):
    suite = unittest.TestLoader().loadTestsFromModule(test_case_module)
    runner = unittest.TextTestRunner()
    results = runner.run(suite)
    assert results.wasSuccessful(), "Test suite failed."

​​​​​​运行测试套件:

pytest testsuite.py

这个示例提供了一个基本的接口自动化测试套件的封装结构和代码。你可以根据实际项目的需要对其进行扩展和修改

添加更复杂的断言、错误处理、测试数据管理、报告生成等功能

更复杂的断言

在common/utils.py中,你可以添加更多的断言函数来处理更复杂的情况。例如,检查响应中的某个字段是否在预期的值列表中:

def assert_in_response(response_data, key, expected_values):
    assert key in response_data, f"Expected key '{key}' not found in response."
    assert response_data[key] in expected_values, f"Expected value for '{key}' to be one of {expected_values}, but got '{response_data[key]}'"

错误处理

在common/utils.py的send_request函数中,你可以添加更详细的错误处理逻辑,例如捕获和记录不同类型的HTTP错误:

def send_request(method, url, headers=None, params=None, data=None):
    try:
        response = requests.request(method, url, headers=headers, params=params, data=data)
        response.raise_for_status()  # 如果响应状态不是200,抛出异常
        return response.json()
    except requests.exceptions.HTTPError as http_error:
        logging.error(f"HTTP error occurred: {http_error}")
        raise http_error
    except Exception as e:
        logging.error(f"Unexpected error occurred: {e}")
        raise e

测试数据管理

你可以创建一个单独的模块或文件来管理测试数据。例如,在data/test_data.py中定义一个字典,包含所有测试用例所需的输入数据:

LOGIN_TEST_DATA = {
    "valid_credentials": {
        "username": "test_user",
        "password": "test_password"
    },
    "invalid_credentials": {
        "username": "invalid_user",
        "password": "invalid_password"
    }
}

然后在测试用例中使用这些数据:

from project.data.test_data import LOGIN_TEST_DATA
class TestLogin:
    def test_successful_login(self):
        url = f"{BASE_URL}login"
        data = LOGIN_TEST_DATA["valid_credentials"]
        response_data = send_request("POST", url, data=json.dumps(data))
        assert_response(response_data, "status", "success")
        assert_response(response_data, "message", "Logged in successfully.")
    def test_invalid_credentials(self):
        url = f"{BASE_URL}login"
        data = LOGIN_TEST_DATA["invalid_credentials"]
        response_data = send_request("POST", url, data=json.dumps(data))
        assert_response(response_data, "status", "error")
        assert_response(response_data, "message", "Invalid credentials.")

报告生成

你可以使用pytest-html插件来生成HTML格式的测试报告。首先安装插件:


pip install pytest-html

然后在testsuite.py中配置报告生成:


import pytest
from pytest_html_reporter import attach_extra_css, add_context
from project.test_case import test_login, test_signup  # 导入其他测试用例模块
@pytest.mark.parametrize("test_case_module", [test_login, test_signup])
def test_suite(test_case_module):
    suite = unittest.TestLoader().loadTestsFromModule(test_case_module)
    runner = unittest.TextTestRunner()
    results = runner.run(suite)
    assert results.wasSuccessful(), "Test suite failed."
if __name__ == "__main__":
    pytest.main(["--html=report/report.html", "--self-contained-html"])
    attach_extra_css("custom.css")  # 添加自定义CSS样式
    add_context({"project_name": "My API Test Project"})  # 添加上下文信息

运行测试套件时,将会生成一个名为report.html的测试报告。文章来源地址https://www.toymoban.com/news/detail-774910.html

到了这里,关于接口自动化测试套件封装示例的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 自动化测试实战篇(8),jmeter并发测试登录接口,模拟从100到1000个用户同时登录测试服务器压力

    进程是资源分配最小单位,线程是程序执行的最小单位; 每个进程内部会有N个线程,但至少要有1个线 程。 比如公司就是一个进程,公司的员工就是线程。 线程占用的资源要⽐进程少很多。 线程之间通信比进程更方便 并发是指在一个时间段内有多个进程在执行 并行指的是

    2024年02月16日
    浏览(48)
  • 如何使用apifox打包测试用例生成测试套件自动化执行

    1、首先点击自动化测试--创建测试用例--新建分组(整理每个模块对应的测试用例),右键点击对应的分组新建测试用例,开始创建测试用例。 2、创建测试用例:输入对应的名称,以及用例执行的优先级(核心、高、中、低),添加对应的用例备注(说明)  3、编辑测试用

    2024年02月11日
    浏览(56)
  • 自动化测试、压力测试、持续集成

    因为项目的原因,前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api。下面将研究的成果展示给大家,希望对需要的人有所帮助。 SoapUI 是一个开源测试工具,通过 soap/http 来检查、调用、实现 Web Service 的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使

    2024年02月04日
    浏览(65)
  • SoapUI实践:自动化测试、压力测试、持续集成

    因为项目的原因,前段时间研究并使用了 SoapUI 测试工具进行自测开发的 api。下面将研究的成果展示给大家,希望对需要的人有所帮助。 SoapUI 是一个开源测试工具,通过 soap/http 来检查、调用、实现 Web Service 的功能/负载/符合性测试。该工具既可作为一个单独的测试软件使

    2024年02月05日
    浏览(69)
  • JMeter自动化压力测试-http

    下载: Apache JMeter - Download Apache JMeter https://jmeter.apache.org/download_jmeter.cgi 安装: JDK 版本要求为 1.8。 1.1、Jmeter 有什么样功能 Apache JMeter 是一个开源、纯 Java、优秀的性能测试工具 能够测试许多不同的应用程序/服务器/协议类型: HTTP、HTTPS REST、SOAP JDBC FTP LDAP JMS 消息类 邮件类

    2024年02月03日
    浏览(50)
  • Python接口自动化之request请求封装

    我们在做自动化测试的时候,大家都是希望自己写的代码越简洁越好,代码重复量越少越好。那么,我们可以考虑将request的请求类型(如:Get、Post、Delect请求)都封装起来。这样,我们在编写用例的时候就可以直接进行请求了。 我们先来看一下Get、Post、Delect等请求的源码,

    2024年02月13日
    浏览(50)
  • Python接口自动化搭建过程,含request请求封装

    接口测试自动化好处 显而易见的好处就是解放双手😀。 可以在短时间内自动执行大量的测试用例 通过参数化和数据驱动的方式进行测试数据的变化,提高测试覆盖范围 快速反馈测试执行结果和报告 支持持续集成和持续交付的流程 使用Requests+pytest+allure搭建测试框架的目的

    2024年02月07日
    浏览(54)
  • Python接口自动化 ❀ Request库详解和框架封装

    从招聘需求我们不难看出目前市面上对软件测试人员的要求: 综合型的测试人才、侧重业务能力 代码能力(在自动化框架这一块有一定的建树) 开发思维(代码的封装能力) 而接口测试或者接口自动化是每一个面试环节都必问的,比如: 主流接口测试工具 Postman+Newman+Jen

    2023年04月21日
    浏览(46)
  • 接口自动化测试实践指导(下):接口自动化测试断言设置思路

    作者 : 石臻臻 , CSDN博客之星Top5 、 Kafka Contributor 、 nacos Contributor 、 华为云 MVP , 腾讯云TVP , 滴滴Kafka技术专家 、 KnowStreaming 。 KnowStreaming 是滴滴开源的Kafka运维管控平台, 有兴趣一起参与参与开发的同学,但是怕自己能力不够的同学,可以联系我,当你导师带你参与开源! 。 在

    2024年01月18日
    浏览(76)
  • 【接口自动化测试入门】从0到1落地接口自动化测试

    前段时间写了一系列自动化测试相关的文章,当然更多的是方法和解决问题的思路角度去阐述我的一些观点。这篇文章来聊聊新手如何从零到一落地实践接口自动化测试。 早些时候,软件研发交付流程大多遵循V型或W型的瀑布模式,这种模式下只有开发编码完成才会提测进入

    2024年02月04日
    浏览(52)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包