我来为您详细讲解“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技术站