Python3+Requests+Excel完整接口自动化测试框架的实现

我来为您详细讲解“Python3+Requests+Excel完整接口自动化测试框架的实现”的完整实例教程。

简介

在当前的软件开发过程中,接口测试不可或缺。为了提升测试效率和测试质量,我们需要使用接口自动化测试框架来进行测试,提高测试的可重复性和可维护性。这里我们将结合Python3+Requests+Excel来实现一个完整的接口自动化测试框架。

工具说明

  • Python3:一个流行的编程语言,拥有丰富的第三方库,适合作为接口自动化测试工具使用。
  • Requests库:Python中的一个HTTP库,提供了一系列操作HTTP的方法,以便我们发送请求和读取响应。
  • Excel:目前大多测试人员或开发人员均能熟练使用Excel,其表格功能可以帮助我们整理数据。

流程

我们将通过以下步骤,完成一个基于Python3+Requests+Excel的接口自动化测试框架:
1. 定义测试用例:将需要进行测试的接口数据存储在Excel中作为测试用例。
2. 获取测试数据:使用Python操作Excel库,读取测试用例数据并存储到Python的数据结构中,如List或Dict。
3. 发送请求:使用Requests库发送HTTP请求,获取服务器的响应。
4. 解析响应:将响应数据解析为Python的数据类型,如JSON等。
5. 断言响应:使用Python的断言机制,验证响应是否符合预期。
6. 输出测试结果:将测试结果存储回Excel中。

详细步骤

1.定义测试用例

首先,我们需要在Excel中定义测试用例。测试用例包括每个接口的请求参数、请求方式、响应结果、状态码等。测试用例的数据结构可以参考以下样例:

接口名称 请求方式 请求URL 请求头 请求参数 预期状态码 预期响应
login post http://localhost:8080/login {"Content-Type": "application/json"} {"username": "testuser", "password": "testpassword"} 200 {"code": 0, "message": "login success"}

2.获取测试数据

在Python中,我们可以使用pandas库来读取和操作Excel文件。首先,我们需要使用以下命令来安装pandas库:

pip install pandas

接下来,我们可以使用以下代码来读取Excel文件:

import pandas as pd

data = pd.read_excel('testcases.xlsx', sheet_name='Sheet1')

其中,'testcases.xlsx'是Excel文件的名称,'Sheet1'是Excel文件中的sheet名称。

读取后的数据结构类似于:

   接口名称 请求方式                   请求URL                   请求头                    请求参数  预期状态码                           预期响应
0   login   POST  http://localhost:8080/login  {'Content-Type': 'application/json'}  {'username': 'testuser', 'password': 'testpassword'}      200  {'code': 0, 'message': 'login success'}
1     ...    ...                          ...                          ...                                      ...      ...                                   ...  

3.发送请求

使用Requests库可以发送HTTP请求。我们可以使用以下代码来发送请求:

import requests

response = requests.post(url=url, headers=headers, json=data)

其中,'url'是请求的URL地址,'headers'是请求头,'data'是请求参数的数据。如果是GET请求,则可以使用以下代码:

response = requests.get(url=url, headers=headers, params=params)

其中,'params'是请求参数,以字典形式传入。

4.解析响应

使用Requests库响应的数据类型是Response对象,我们需要将响应数据解析为Python的数据类型,如JSON等。可以使用以下代码来解析响应:

import json

response_data = json.loads(response.text)

5.断言响应

使用Python的断言机制来验证响应数据是否符合预期。对于接口的响应,可以根据业务场景来自定义断言规则。以JSON格式的响应为例,可以使用以下代码来断言:

assert response_data['code'] == 0
assert response_data['message'] == 'success'

6.输出测试结果

最后,将测试结果输出到Excel文件中。我们可以使用以下代码来将测试结果写回Excel文件中:

data['实际状态码'] = status_code_list
data['实际响应'] = response_list

writer = pd.ExcelWriter('testcases.xlsx')
data.to_excel(writer, 'Sheet1', index=False)
writer.save()

其中,'status_code_list'和'response_list'分别表示接口的实际状态码和实际响应数据的列表,需要先在前面获取到。将它们再赋值到DataFrame中,并将DataFrame重新写回Excel文件中,以便查看测试结果。

示例说明

这里给出两个示例说明,以帮助理解之前的步骤。

示例一:基于Python3+Requests+Excel实现的接口自动化测试框架

import pandas as pd
import requests
import json

def test_interface(row):
    url = row['请求URL']
    headers = json.loads(row['请求头'])
    request_data = json.loads(row['请求参数'])
    method = row['请求方式']
    expected_status_code = row['预期状态码']
    expected_response = row['预期响应']

    if method == 'GET':
        response = requests.get(url, headers=headers, params=request_data)
    else:
        response = requests.post(url, headers=headers, json=request_data)

    response_data = json.loads(response.text)

    try:
        assert response.status_code == expected_status_code
        assert response_data == expected_response

        status_code_list.append(response.status_code)
        response_list.append(response_data)
    except AssertionError as e:
        print('用例编号:%d,接口名称:%s,测试不通过' % (row.name, row['接口名称']))
        print('抛出异常:%s' % str(e))
        print('预期状态码:%d,实际状态码:%d' % (expected_status_code, response.status_code))
        print('预期响应:%s,实际响应:%s' % (json.dumps(expected_response, indent=2), json.dumps(response_data, indent=2)))

        status_code_list.append(response.status_code)
        response_list.append(response_data)

if __name__ == '__main__':
    data = pd.read_excel('testcases.xlsx', sheet_name='Sheet1')

    status_code_list = []
    response_list = []

    data.apply(test_interface, axis=1)

    data['实际状态码'] = status_code_list
    data['实际响应'] = response_list

    writer = pd.ExcelWriter('testcases.xlsx')
    data.to_excel(writer, 'Sheet1', index=False)
    writer.save()

示例二:使用unittest结合Python3+Requests+Excel实现的接口自动化测试框架

import unittest
import requests
import json
import pandas as pd

class TestInterface(unittest.TestCase):
    # class level setup
    @classmethod
    def setUpClass(cls):
        cls.data = pd.read_excel('testcases.xlsx', sheet_name='Sheet1')
        cls.status_code_list = []
        cls.response_list = []

    # class level teardown
    @classmethod
    def tearDownClass(cls):
        cls.data['实际状态码'] = cls.status_code_list
        cls.data['实际响应'] = cls.response_list

        writer = pd.ExcelWriter('testcases.xlsx')
        cls.data.to_excel(writer, 'Sheet1', index=False)
        writer.save()

    def test_interface(self):
        row = self.data.iloc[self.index]
        url = row['请求URL']
        headers = json.loads(row['请求头'])
        request_data = json.loads(row['请求参数'])
        method = row['请求方式']
        expected_status_code = row['预期状态码']
        expected_response = row['预期响应']

        if method == 'GET':
            response = self.session.get(url, headers=headers, params=request_data)
        else:
            response = self.session.post(url, headers=headers, json=request_data)

        response_data = json.loads(response.text)

        try:
            self.assertEqual(response.status_code, expected_status_code)
            self.assertEqual(response_data, expected_response)

            self.status_code_list.append(response.status_code)
            self.response_list.append(response_data)
        except AssertionError as e:
            print('用例编号:%d,接口名称:%s,测试不通过' % (row.name, row['接口名称']))
            print('抛出异常:%s' % str(e))
            print('预期状态码:%d,实际状态码:%d' % (expected_status_code, response.status_code))
            print('预期响应:%s,实际响应:%s' % (json.dumps(expected_response, indent=2), json.dumps(response_data, indent=2)))

            self.status_code_list.append(response.status_code)
            self.response_list.append(response_data)

if __name__ == '__main__':
    unittest.main()

以上便是基于Python3+Requests+Excel实现的接口自动化测试框架的详细实例教程。通过学习这份框架,相信您能更好地用Python来进行接口自动化测试。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Python3+Requests+Excel完整接口自动化测试框架的实现 - Python技术站

(0)
上一篇 2023年5月13日
下一篇 2023年5月13日

相关文章

  • Python字典简介以及用法详解

    Python中的字典是一种无序的数据集合,常用来表示键值对。在Python字典中,每个键都映射到一个值,这些键-值对同时保存在大括号{}中,如下所示: my_dict = {"key1": "value1", "key2": "value2"} 字典是Python中非常重要的数据…

    python 2023年5月14日
    00
  • 利用Python发送 10 万个 http 请求

    以下是关于利用Python发送10万个HTTP请求的攻略: 利用Python发送10万个HTTP请求 在Python中,我们可以使用requests库来发送HTTP请求。以下是利用Python发送10万个HTTP请求的攻略: 发送GET请求 以下是使用requests发送GET请求的示例: import requests import time start_…

    python 2023年5月14日
    00
  • 如何在Python中将字符串转换为数组详解

    如何在Python中将字符串转换为数组?在Python中,字符串可以通过多种方式转换为数组,以下是其中的几种方法: 方法一: 使用split()方法分隔字符串 在Python中,字符串可以使用split()方法分隔成数组。该方法将返回一个字符串列表,其中每个元素都是原始字符串中的一个分隔符分隔的子字符串。 string = "Hello,World…

    python 2023年6月6日
    00
  • ImportError: No module named ‘PIL’ ( Python 3.4.3 , (1, 8, 7, ‘final’, 0)

    【问题标题】:ImportError: No module named ‘PIL’ ( Python 3.4.3 , (1, 8, 7, ‘final’, 0)ImportError: No module named ‘PIL’ ( Python 3.4.3 , (1, 8, 7, ‘final’, 0) 【发布时间】:2023-04-05 23:00:01…

    Python开发 2023年4月6日
    00
  • windows上安装python3教程以及环境变量配置详解

    Windows上安装Python3教程 Python是一种通用编程语言,拥有强大而简单易用的特性,广泛用于科学计算、Web开发、人工智能等领域。本教程将介绍在Windows上安装Python3以及环境变量配置的详细步骤。 下载Python3 我们可以从Python官网下载最新版本的Python3。在下载页面(https://www.python.org/do…

    python 2023年5月30日
    00
  • Python实现获取本地及远程图片大小的方法示例

    作为网站作者,我们可以提供以下Python实现获取本地及远程图片大小的方法示例: 获取本地图片大小 在Python中,我们可以使用PIL库来操作图片。要获取本地图片大小,可以使用Image.open()方法打开图片,然后使用获取大小属性size: from PIL import Image file_path = "path/to/image.jp…

    python 2023年6月3日
    00
  • python3中rank函数的用法

    Python3中rank函数的用法 Python3中的rank函数可以用于获取序列中元素的排名。具体来说,rank函数可以返回一个序列中所有元素的排名,排名越小表示该元素越小(接近序列的开始),排名越大表示该元素越大(接近序列的末尾)。 rank函数的语法 rank函数语法如下: import pandas as pd rank(axis=0, method…

    python 2023年6月5日
    00
  • Python 怎么定义计算N的阶乘的函数

    要定义一个计算阶乘的函数,可以使用递归或循环来实现。下面是两个示例函数: 递归实现 def factorial_recursive(n): """ 计算n的阶乘(递归实现) :param n: 一个整数 :return: n的阶乘 """ # 基线情况 if n == 0 or n == 1: re…

    python 2023年6月5日
    00
合作推广
合作推广
分享本页
返回顶部