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表格。

python 复制代码
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')
  1. xlwt库为测试结果提供格式化的输出,用户可以自定义表格样式以及表格内容的格式、字体、颜色、边框等,以便用户快速理解接口测试结果,对其做出有效的应对。

综上所述,requests和xlwt是Python的两个基础库,它们能够方便地完成接口自动化测试,并且大大提高测试的效率和精度。因此,如果您还没有使用它们进行接口自动化测试,不妨试试看以下的接口自动化测试框架DEMO。

完整代码

python 复制代码
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. 编写接口自动化测试基类及测试用例实现

python 复制代码
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)  # 断言响应的结果是否与预期一致
  1. 编写 Excel 文件读取和解析函数
python 复制代码
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
  1. 编写 Excel 结果报告写入函数
python 复制代码
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)
  1. 编写主函数
python 复制代码
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 请求方法和数据格式,适用于各种接口自动化测试场景。

行动吧,在路上总比一直观望的要好,未来的你肯定会感 谢现在拼搏的自己!如果想学习提升找不到资料,没人答疑解惑时,请及时加入扣群: 320231853,里面有各种软件测试+开发资料和技术可以一起交流学习哦。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

相关推荐
&岁月不待人&2 分钟前
Kotlin by lazy和lateinit的使用及区别
android·开发语言·kotlin
StayInLove6 分钟前
G1垃圾回收器日志详解
java·开发语言
无尽的大道14 分钟前
Java字符串深度解析:String的实现、常量池与性能优化
java·开发语言·性能优化
爱吃生蚝的于勒17 分钟前
深入学习指针(5)!!!!!!!!!!!!!!!
c语言·开发语言·数据结构·学习·计算机网络·算法
一名技术极客23 分钟前
Vue2 doc、excel、pdf、ppt、txt、图片以及视频等在线预览
pdf·powerpoint·excel·文件在线预览
binishuaio27 分钟前
Java 第11天 (git版本控制器基础用法)
java·开发语言·git
zz.YE28 分钟前
【Java SE】StringBuffer
java·开发语言
就是有点傻33 分钟前
WPF中的依赖属性
开发语言·wpf
洋24041 分钟前
C语言常用标准库函数
c语言·开发语言
用余生去守护42 分钟前
【反射率】-- Lab 转换(excel)
excel