python使用requests+excel进行接口自动化测试
在当今的互联网时代中,接口自动化测试越来越成为软件测试的重要组成部分。Python是一种简单易学,高效且可扩展的语言,自然而然地成为了开发人员的首选开发语言。而requests和xlwt这两个常用的Python标准库,能够帮助我们轻松地开发接口自动化测试,更快更好地完成测试工作。
下面是这两个库在接口自动化测试中可带来的好处:
1. requests可以方便地模拟发送HTTP请求,实现接口测试,支持GET、POST、PUT、DELETE等请求方式。使用requests,我们可以轻松实现对接口的请求及返回结果的处理。
import requests
response = requests.get('http://example.com')
2. requests提供了对HTTP头的复杂处理和特定认证方案的支持,包括Basic,Digest,OAuth等。这意味着我们可以轻松地实现接口的授权认证。
import requests
response = requests.get('http://example.com', auth=('user', 'pass'))
3. requests支持Cookie和Session的处理,可以用来保证用户的身份认证或后续请求的连续性。这对于需要进行多次调用接口的测试非常有用。
4. xlwt库支持将测试结果以Excel格式将结果输出或记录。接口自动化测试有的时候需要输出测试报告,xlwt可以方便地将测试结果输出为Excel表格。
?
import xlwt
book = xlwt.Workbook(encoding='utf-8')
sheet = book.add_sheet('Sheet1')
sheet.write(0, 0, '接口名称')
sheet.write(0, 1, '测试结果')
sheet.write(1, 0, 'test API')
sheet.write(1, 1, 'Pass')
book.save('result.xls')
5. xlwt库为测试结果提供格式化的输出,用户可以自定义表格样式以及表格内容的格式、字体、颜色、边框等,以便用户快速理解接口测试结果,对其做出有效的应对。
综上所述,requests和xlwt是Python的两个基础库,它们能够方便地完成接口自动化测试,并且大大提高测试的效率和精度。因此,如果您还没有使用它们进行接口自动化测试,不妨试试看以下的接口自动化测试框架DEMO。
完整代码
?
import requests
import xlwt
import xlrd
import unittest
class BaseTestCase(unittest.TestCase):
url = "" # 接口请求的 URL
method = "GET" # 接口请求的方法
data = {} # 接口请求的数据
headers = {} # 接口请求的头部
expected_code = 200 # 预期的 HTTP 状态码
expected_result = {} # 预期的响应结果
def setUp(self):
"""每个测试方法执行前调用"""
pass
def tearDown(self):
"""每个测试方法执行后调用"""
pass
def run_case(self, case):
"""动态创建的测试方法,执行测试用例"""
self.url = case['url']
self.method = case['method']
self.data = case['data']
self.headers = case.get('headers', {})
self.expected_code = case.get('expected_code', 200)
self.expected_result = case.get('expected_result', {})
self.test_api()
def test_api(self):
"""测试用例实现"""
response = requests.request(self.method, url=self.url, headers=self.headers, data=self.data)
self.assertEqual(response.status_code, self.expected_code) # 断言响应的 HTTP 状态码是否与预期一致
self.assertDictEqual(response.json(), self.expected_result) # 断言响应的结果是否与预期一致
def read_excel(file_path, sheet_name):
workbook = xlrd.open_workbook(file_path) # 打开 Excel 文件
sheet = workbook.sheet_by_name(sheet_name) # 获取 Excel 工作表
rows = sheet.nrows # 获取行数
cases = []
for i in range(1, rows): # 从第 2 行开始读取测试用例
case = {}
case['url'] = sheet.cell_value(i, 0) # 读取接口请求的 URL
case['method'] = sheet.cell_value(i, 1) # 读取接口请求的方法
case['data'] = sheet.cell_value(i, 2) # 读取接口请求的数据
case['headers'] = sheet.cell_value(i, 3) # 读取接口请求的头部
case['expected_code'] = int(sheet.cell_value(i, 4)) # 读取预期的 HTTP 状态码
case['expected_result'] = eval(sheet.cell_value(i, 5)) # 读取预期的响应结果
case['name'] = sheet.cell_value(i, 6) # 读取用例名称
cases.append(case)
return cases
def write_excel(file_path, sheet_name, cases):
workbook = xlwt.Workbook()
sheet = workbook.add_sheet(sheet_name)
sheet.write(0, 0, '用例编号')
sheet.write(0, 1, '用例名称')
sheet.write(0, 2, '测试结果')
for i, case in enumerate(cases):
sheet.write(i+1, 0, i+1)
sheet.write(i+1, 1, case.get('name', '') or case['url'])
sheet.write(i+1, 2, '通过' if case.get('result') else '失败')
workbook.save(file_path)
if __name__ == '__main__':
cases = read_excel('cases.xlsx', 'Sheet1') # 读取测试用例
suite = unittest.TestSuite() # 创建测试套件
for case in cases:
case_name = case.get('name', '') or case['url']
setattr(BaseTestCase, 'test_{}'.format(case_name), lambda self, case=case: self.run_case(case))
# 动态创建测试方法,并将测试用例绑定到测试方法上
unittest.TextTestRunner().run(suite) # 执行测试套件
write_excel('report.xls', 'Sheet1', cases) # 写入测试结果报告
下面详细介绍一下??上方代码
1. 安装所需要的库和依赖项
pip install requests
pip install xlwt
2. 编写接口自动化测试基类及测试用例实现
import requests
import xlwt
import unittest
class BaseTestCase(unittest.TestCase):
url = "" # 接口请求的 URL
method = "GET" # 接口请求的方法
data = {} # 接口请求的数据
headers = {} # 接口请求的头部
expected_code = 200 # 预期的 HTTP 状态码
expected_result = {} # 预期的响应结果
def setUp(self):
"""每个测试方法执行前调用"""
pass # 可以进行一些初始化工作
def tearDown(self):
"""每个测试方法执行后调用"""
pass # 可以进行一些清理工作
def test_api(self):
"""测试用例实现"""
response = requests.request(self.method, url=self.url, headers=self.headers, data=self.data)
self.assertEqual(response.status_code, self.expected_code) # 断言响应的 HTTP 状态码是否与预期一致
self.assertDictEqual(response.json(), self.expected_result) # 断言响应的结果是否与预期一致
3. 编写 Excel 文件读取和解析函数
import xlrd
def read_excel(file_path, sheet_name):
workbook = xlrd.open_workbook(file_path) # 打开 Excel 文件
sheet = workbook.sheet_by_name(sheet_name) # 获取 Excel 工作表
rows = sheet.nrows # 获取行数
cases = []
for i in range(1, rows): # 从第 2 行开始读取测试用例
case = {}
case['url'] = sheet.cell_value(i, 0) # 读取接口请求的 URL
case['method'] = sheet.cell_value(i, 1) # 读取接口请求的方法
case['data'] = sheet.cell_value(i, 2) # 读取接口请求的数据
case['headers'] = sheet.cell_value(i, 3) # 读取接口请求的头部
case['expected_code'] = int(sheet.cell_value(i, 4)) # 读取预期的 HTTP 状态码
case['expected_result'] = eval(sheet.cell_value(i, 5)) # 读取预期的响应结果
cases.append(case)
return cases
4. 编写 Excel 结果报告写入函数
def write_excel(file_path, sheet_name, cases):
workbook = xlwt.Workbook()
sheet = workbook.add_sheet(sheet_name)
sheet.write(0, 0, '用例编号')
sheet.write(0, 1, '用例名称')
sheet.write(0, 2, '测试结果')
for i, case in enumerate(cases):
sheet.write(i+1, 0, i+1)
sheet.write(i+1, 1, case.get('name', ''))
sheet.write(i+1, 2, '通过' if case.get('result') else '失败')
workbook.save(file_path)
5. 编写主函数
if __name__ == '__main__':
cases = read_excel('cases.xlsx', 'Sheet1') # 读取测试用例
suite = unittest.TestSuite() # 创建测试套件
for case in cases:
case_name = case.get('name', '') or case['url']
setattr(BaseTestCase, 'test_{}'.format(case_name), lambda self, case=case: self.run_case(case))
# 动态创建测试方法,并将测试用例绑定到测试方法上
unittest.TextTestRunner().run(suite) # 执行测试套件
write_excel('report.xls', 'Sheet1', cases) # 写入测试结果报告
这是一个简单的Python接口自动化测试项目,可以通过Excel 文件管理测试用例,支持多种 HTTP 请求方法和数据格式,适用于各种接口自动化测试场景。
读到这了,希望能够“分享并转发文章”让更多同学知道。
总结:
感谢每一个认真阅读我文章的人!!!
作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。
文档获取方式:
加入我的软件测试交流群:632880530免费获取~(同行大佬一起学术交流,每晚都有大佬直播分享技术知识点)
这份文档,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!
以上均可以分享,只需要你搜索vx公众号:程序员雨果,即可免费领取
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!