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中else怎么用?else的用法总结

    下面是关于Python中else的用法及示例解释。 一、Python中if-else语句 在Python中,if-else语句是用于控制流程的语句,它根据条件判断来执行不同的代码块。它的语法结构如下: if condition: # 表达式为真时执行的代码块 else: # 表达式为假时执行的代码块 其中,condition表示一个条件表达式,如果它的结果为…

    python 2023年6月5日
    00
  • python3 lambda表达式详解

    Python3 Lambda表达式详解 Lambda表达式是Python中的一种匿名函数,它可以在不定义函数的情况下快速定义一个函数。本文将详细讲解Python3 Lambda表达式的使用方法,包括如何定义Lambda函数、如何使用Lambda函数等内容。 定义Lambda函数 以下是一个使用Lambda表达式定义函数的示例: f = lambda x: x…

    python 2023年5月15日
    00
  • python中的反斜杠问题深入讲解

    下面就给出一份 Python 中的反斜杠问题深入讲解攻略。 什么是反斜杠? 在计算机编程中,反斜杠(\)是一个特殊字符,通常用于转义(escape)被视为普通字符的字符。我们可以在字符串(string)中使用反斜杠来表示非打印字符、一些保留字符或其他特殊意义字符,这就是转义(escape)序列。 例如,我们可以使用反斜杠字符来在字符串中插入单引号或双引号,或…

    python 2023年6月3日
    00
  • 剖析Python的Tornado框架中session支持的实现代码

    要剖析Python的Tornado框架中session支持的实现代码,我们可以分为以下几个步骤: Step 1:了解Tornado框架的session支持 在Tornado框架中,session可以通过get_secure_cookie和set_secure_cookie函数来实现。其中,set_secure_cookie可以将session信息加密存储在c…

    python 2023年6月2日
    00
  • 使用NumPy Python在点(x,y)上评估一个二维Hermite数列

    使用NumPy Python在点(x,y)上评估一个二维Hermite数列的完整攻略如下: 首先,我们需要导入NumPy库。因为NumPy是Python的科学计算库,它提供了高效的数组操作功能,可用于计算和操作大量的数据。 import numpy as np 接下来,我们需要定义一个函数来计算一个二维Hermite数列。具体步骤如下: 首先,我们需要定义一…

    python-answer 2023年3月25日
    00
  • 利用Python实现Json序列化库的方法步骤

    当我们需要在不同的系统之间传递数据或保存数据时,常用的一种数据格式是JSON格式。JSON是一种轻量级的数据交换格式,易于阅读和编写,也易于机器解析和生成。为了处理JSON格式的数据,我们需要使用JSON序列化库。Python有许多成熟的JSON序列化库,如json库、simplejson库、ujson库等,但是理解如何实现一个简单的JSON序列化库也是非常…

    python 2023年6月2日
    00
  • python代码实现逻辑回归logistic原理

    Python代码实现逻辑回归(Logistic回归)原理 概述 Logistic回归是一种二元分类算法,常用于预测用户在某项活动中是否会产生某种行为。它的名字源于其使用的sigmoid函数,该函数可以将任何实数映射到0到1之间的值,因此非常适合概率估计。 本篇攻略将详细讲解如何使用Python实现Logistic回归,包括数据处理、模型训练、参数调整等过程。…

    python 2023年5月19日
    00
  • Python中实现对Timestamp和Datetime及UTC时间之间的转换

    下面是详细的攻略: Python中Timestamp、Datetime和UTC时间之间的转换 Timestamp与Datetime之间的转换 在Python中,我们可以将时间表示成Timestamp和Datetime这两种类型。Timestamp是指从1970年1月1日00:00:00开始的秒数,它通常是有符号的整数或浮点数。而Datetime则是一个更易读…

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