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 相关文章推荐
Python中文字符串截取问题
Jun 15 Python
关于Python中Inf与Nan的判断问题详解
Feb 08 Python
Python遍历文件夹和读写文件的实现方法
May 10 Python
python并发编程之线程实例解析
Dec 27 Python
python实现壁纸批量下载代码实例
Jan 25 Python
对Python 数组的切片操作详解
Jul 02 Python
Python3 修改默认环境的方法
Feb 16 Python
python钉钉机器人运维脚本监控实例
Feb 20 Python
pandas 层次化索引的实现方法
Jul 06 Python
python在CMD界面读取excel所有数据的示例
Sep 28 Python
Python datetime模块的使用示例
Feb 02 Python
Python干货实战之八音符酱小游戏全过程详解
Oct 24 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
也谈截取首页新闻 - 范例
2006/10/09 PHP
php中遍历二维数组并以表格的形式输出的方法
2017/01/03 PHP
很全的显示阴历(农历)日期的js代码
2009/01/01 Javascript
IE浏览器打印的页眉页脚设置解决方法
2009/12/08 Javascript
javascript event 事件解析
2011/01/31 Javascript
js如何判断不同系统的浏览器类型
2013/10/28 Javascript
jquery 检测元素是否存在的实例代码
2013/11/19 Javascript
使用jQuery判断Div是否在可视区域的方法 判断div是否可见
2016/02/17 Javascript
JavaScript String 对象常用方法总结
2016/04/28 Javascript
一个简单不报错的summernote 图片上传案例
2016/07/11 Javascript
JS中的hasOwnProperty()和isPrototypeOf()属性实例详解
2016/08/11 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
基于React+Redux的SSR实现方法
2018/07/03 Javascript
Python实现爬取知乎神回复简单爬虫代码分享
2015/01/04 Python
Python Property属性的2种用法
2015/06/21 Python
python与C互相调用的方法详解
2017/07/14 Python
python实现简易版计算器
2020/06/22 Python
python中的闭包函数
2018/02/09 Python
Python设计模式之命令模式原理与用法实例分析
2019/01/11 Python
Python字典遍历操作实例小结
2019/03/05 Python
python命名空间(namespace)简单介绍
2019/08/10 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
python音频处理的示例详解
2020/12/23 Python
利用CSS3伪元素实现逐渐发光的方格边框
2017/05/07 HTML / CSS
HTML5的结构和语义(4):语义性的内联元素
2008/10/17 HTML / CSS
佳能德国网上商店:Canon德国
2017/03/18 全球购物
涉外文秘个人求职的自我评价
2013/10/07 职场文书
党员思想汇报范文
2013/12/30 职场文书
私人会所最新创业计划书范文
2014/03/24 职场文书
2014年实习期工作总结
2014/11/27 职场文书
教师工作表现评语
2014/12/31 职场文书
小学运动会开幕词
2015/01/28 职场文书
MySQL 自定义变量的概念及特点
2021/05/13 MySQL
python机器学习Github已达8.9Kstars模型解释器LIME
2021/11/23 Python
「租借女友」第2季樱泽墨角色PV&新视觉图公开
2022/03/21 日漫
详解如何使用Nginx解决跨域问题
2022/05/06 Servers