Python + Requests + Unittest接口自动化测试实例分析


Posted in Python onDecember 12, 2019

本文实例讲述了Python + Requests + Unittest接口自动化测试。分享给大家供大家参考,具体如下:

1. 介绍下python的requests模块

Python Requests快速入门 :http://cn.python-requests.org/zh_CN/latest/

想必会Python基础的小伙伴们一看就懂了

2. Requests接口自动化测试:

2.1 如何利用这么利器进行接口测试,请看小demo:

# -*- 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"

Python + Requests + Unittest接口自动化测试实例分析

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个接口,将这69个接口我进行了分类去管理,如果需要将接口测试脚本放服务器去跑,需要添加try….except,将出现的错误信息报出来,利用smtplib发送错误信息到自己的邮箱就好了。

更多关于Python相关内容可查看本站专题:《Python Socket编程技巧总结》、《Python数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
pyqt4教程之messagebox使用示例分享
Mar 07 Python
Windows系统下安装Python的SSH模块教程
Feb 05 Python
python学习数据结构实例代码
May 11 Python
Python数据类型详解(二)列表
May 08 Python
Python装饰器(decorator)定义与用法详解
Feb 09 Python
python使用response.read()接收json数据的实例
Dec 19 Python
python使用pygame模块实现坦克大战游戏
Mar 25 Python
opencv3/C++图像像素操作详解
Dec 10 Python
Opencv求取连通区域重心实例
Jun 04 Python
PyCharm中配置PySide2的图文教程
Jun 18 Python
Python Tornado核心及相关原理详解
Jun 24 Python
Python提取视频中图片的示例(按帧、按秒)
Oct 22 Python
python opencv图片编码为h264文件的实例
Dec 12 #Python
Python pygame绘制文字制作滚动文字过程解析
Dec 12 #Python
详解python 中in 的 用法
Dec 12 #Python
python调用c++返回带成员指针的类指针实例
Dec 12 #Python
在Python中实现函数重载的示例代码
Dec 12 #Python
django框架F&Q 聚合与分组操作示例
Dec 12 #Python
使用OpenCV-python3实现滑动条更新图像的Canny边缘检测功能
Dec 12 #Python
You might like
如何在PHP程序中防止盗链
2008/04/09 PHP
在PHP中使用curl_init函数的说明
2010/11/02 PHP
php隐藏IP地址后两位显示为星号的方法
2014/11/21 PHP
PHP永久登录、记住我功能实现方法和安全做法
2015/04/27 PHP
Web版彷 Visual Studio 2003 颜色选择器
2007/01/09 Javascript
SOSO地图API使用(一)在地图上画圆实现思路与代码
2013/01/15 Javascript
jquery中常用的SET和GET$(”#msg”).html循环介绍
2013/10/09 Javascript
jQuery提交多个表单的小技巧
2014/07/27 Javascript
Nodejs进阶:核心模块net入门学习与实例讲解
2016/11/21 NodeJs
angularJs的ng-class切换class
2017/06/23 Javascript
jQuery实现注册会员时密码强度提示信息功能示例
2017/09/05 jQuery
面包屑导航详解
2017/12/07 Javascript
JavaScript设计模式之构造函数模式实例教程
2018/07/02 Javascript
jQuery实现的老虎机跑动效果示例
2018/12/29 jQuery
浅谈vue-router路由切换 组件重用挖下的坑
2019/11/01 Javascript
easyUI 实现的后台分页与前台显示功能示例
2020/06/01 Javascript
Element-UI 使用el-row 分栏布局的教程
2020/10/26 Javascript
[33:09]完美世界DOTA2联赛循环赛 Forest vs DM BO2第二场 10.29
2020/10/29 DOTA
python基础教程之Hello World!
2014/08/29 Python
用Python写一个无界面的2048小游戏
2016/05/24 Python
Python编程pygame模块实现移动的小车示例代码
2018/01/03 Python
python @property的用法及含义全面解析
2018/02/01 Python
python的scikit-learn将特征转成one-hot特征的方法
2018/07/10 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
Python CSS选择器爬取京东网商品信息过程解析
2020/06/01 Python
Virtualenv 搭建 Py项目运行环境的教程详解
2020/06/22 Python
中国第一家杂志折扣订阅网:杂志铺
2016/08/30 全球购物
销售副总经理岗位职责
2013/12/11 职场文书
秘书英文求职信范文
2014/01/31 职场文书
出纳员岗位责任制
2014/02/11 职场文书
社区党建工作汇报材料
2014/08/14 职场文书
实施意见格式范本
2015/06/05 职场文书
司法廉洁教育心得体会
2016/01/20 职场文书
《天净沙·秋思》教学反思三篇
2019/11/02 职场文书
SQL 聚合、分组和排序
2021/11/11 MySQL
Python使用Beautiful Soup(BS4)库解析HTML和XML
2022/06/05 Python