Python结合Requests与Unittest的接口自动化测试实战
本文详解如何利用Python的Requests库进行接口数据交互,并结合Unittest框架搭建自动化测试体系。通过获取Session、构造请求头、断言响应状态等具体代码示例,展示从单接口测试到多接口自动化执行的完整流程,包含错误处理与邮件报告发送机制,适用于企业级接口测试场景。
Python接口自动化测试概述
本文通过具体实例,解析如何使用Python配合Requests库及Unittest框架实现接口自动化测试,旨在为读者提供可参考的实践方案。
首先介绍Python中Requests模块的基本用法。
关于Python Requests的快速入门指南,可参考官方文档:http://cn.python-requests.org/zh_CN/latest/
具备Python基础知识的开发者应当能够轻松理解相关内容。
Requests接口自动化测试实践
接下来深入探讨基于Requests的接口自动化测试方法。
基础接口测试Demo
2.1 如何利用这一工具进行接口测试,具体演示如下:
# -*- coding:utf-8 -*
import requests
def test():
url = "http://120.24.239.**:9080/user/app/get_sys_time.do" #测试的接口url
headers = {'content-type': 'application/json'}
r = requests.get(url=url, headers=headers)
return r.json()
if __name__ == "__main__":
test()
在接口测试过程中,需对传入参数执行边界值测试、错误推导测试及等价类测试等多种策略。出于安全考量,部分请求需在URL中携带Session信息。此时,可直接提取登录接口返回的Session值,并将其置于POST请求的Header中,例如:
# -*- coding:utf-8 -*
import requests
def test():
url = "http://120.24.239.**:9080/user/app/login.do" #登录的接口
headers = {'content-type': 'application/json'}
r = requests.get(url=url, headers=headers)
return r.json()
def test_have_session(url):
cookie = "JSESSIONID=" + "".join(test().get("JSESSIONID")) #利用登录接口获取JSESSIONID
headers = {'content-type': 'application/xml', 'Cookie': cookie}
r = requests.post(url, headers=headers)
return r.json()
if __name__ == "__main__":
url = "" #测试的接口url
test_have_session(url)
简化版接口自动化测试框架
2.2 完成所有接口的测试后,需编写接口自动化脚本。若每次接口修改都需手动回归测试,尤其在产品上线阶段需全量测试所有接口时,效率极低。引入接口自动化可显著提升便利性,以下是一个简化版的接口自动化测试Demo:
# -*- coding:utf-8 -*
# 测试报告邮件内容
text = ""
# 用例统计
num_success = 0
num_fail = 0
# 测试通过
def test_success():
global num_success
num_success += 1
print_out(u"测试结果:通过\n")
# 测试不通过
def test_fail(txt):
global num_fail
num_fail += 1
print_out(u"测试结果:不通过 \n错误信息: " + txt + "\n")
# 邮件内容写入 & 客户端输出
def print_out(message):
global text
text += "\n" + message
print message
# 返回值判断
def test_result(result, code):
if result.get("status") == code:
test_success()
return "pass"
else:
txt = u"期望返回值:" + str(code) + u" 实际返回值:" + str(result.get("status"))
test_fail(txt)
return "fail"

def test_interface():
# 初始化测试起始时间
start_time = datetime.datetime.now()
# 构造测试集
suite = unittest.TestSuite()
suite.addTest(MyTestSuite("test_login")) # 登陆
suite.addTest(MyTestSuite("test_employees")) # 员工管理
suite.addTest(MyTestSuite("test_department")) # 部门管理
suite.addTest(MyTestSuite("test_work_sys")) # 工作日历管理
suite.addTest(MyTestSuite("test_holiday")) # 节假日管理
suite.addTest(MyTestSuite("test_queryAp")) # 智能终端管理
suite.addTest(MyTestSuite("test_edit_info")) # 企业信息管理 & 个人信息
suite.addTest(MyTestSuite("test_data")) # 每日数据报表 & 月度数据报表
# 执行测试
runner = unittest.TextTestRunner()
runner.run(suite)
# 测试执行时间计算
end_time = datetime.datetime.now()
total_use_case = u"执行用例总数:" + str(num_success + num_fail) + \
u"\t通过数:" + str(num_success) + \
u"\t不通过数:" + str(num_fail)
total_time = u"\t总共耗时:" + str((end_time-start_time).seconds) + u"秒"
print_out(total_use_case + total_time)
# 发生邮件测试报告
Send_email.send_email(text)
示例中省略了部分针对具体项目测试接口的判断逻辑,整体框架结构如下。在接口数量庞大的项目中,建议按模块分文件编写,以便后期维护测试用例。以我司产品为例,共计69个接口,已分类管理。若需在服务器端运行测试脚本,需添加try...except异常捕获机制以输出错误信息,并可利用smtplib模块将错误报告发送至指定邮箱。
如需了解更多Python相关知识,可查阅本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。
希望本文所述内容能对大家的Python程序设计工作有所帮助。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













