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 list使用示例 list中找连续的数字
Jan 27 Python
python使用PIL缩放网络图片并保存的方法
Apr 24 Python
python实现mysql的单引号字符串过滤方法
Nov 14 Python
matplotlib绘制符合论文要求的图片实例(必看篇)
Jun 02 Python
django项目搭建与Session使用详解
Oct 10 Python
使用Python批量修改文件名的代码实例
Jan 24 Python
基于Django实现日志记录报错信息
Dec 17 Python
Python多线程的退出控制实现
Aug 10 Python
python中的split、rsplit、splitlines用法说明
Oct 23 Python
Django通过设置CORS解决跨域问题
Nov 26 Python
Django数据统计功能count()的使用
Nov 30 Python
Python实现钉钉/企业微信自动打卡的示例代码
Feb 02 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
phpMyadmin 用户权限中英对照
2010/04/02 PHP
php 批量替换html标签的实例代码
2013/11/26 PHP
基于PHP的简单采集数据入库程序
2014/07/30 PHP
遍历echsop的region表形成缓存的程序实例代码
2016/11/01 PHP
PHP 实现字符串翻转(包含中文汉字)的实现代码
2017/04/01 PHP
Laravel 微信小程序后端实现用户登录的示例代码
2019/11/26 PHP
Laravel 验证码认证学习记录小结
2019/12/20 PHP
ThinkPHP6.0如何利用自定义验证规则规范的实现登陆
2020/12/16 PHP
jquery 表单取值常用代码
2009/12/22 Javascript
js中cookie的添加、取值、删除示例代码
2013/10/21 Javascript
text-align:justify实现文本两端对齐 兼容IE
2015/08/19 Javascript
利用HTML5的画布Canvas实现刮刮卡效果
2015/09/06 Javascript
浅谈JavaScript异步编程
2017/01/20 Javascript
详解Vue 普通对象数据更新与 file 对象数据更新
2017/04/26 Javascript
jQuery实现新闻播报滚动及淡入淡出效果示例
2018/03/23 jQuery
vue将后台数据时间戳转换成日期格式
2019/07/31 Javascript
layui对工具条进行选择性的显示方法
2019/09/19 Javascript
JS中比较两个Object数组是否相等方法实例
2019/11/11 Javascript
原生javascript制作贪吃蛇小游戏的方法分析
2020/02/26 Javascript
基于Echarts图表在div动态切换时不显示的解决方式
2020/07/20 Javascript
通过vue刷新左侧菜单栏操作
2020/08/06 Javascript
vue 表单输入框不支持focus及blur事件的解决方案
2020/11/17 Vue.js
[01:38]DOTA2第二届亚洲邀请赛中国区预选赛出线战队晋级之路
2017/01/17 DOTA
Python实现的将文件每一列写入列表功能示例【测试可用】
2018/03/19 Python
解决pyinstaller打包pyqt5的问题
2019/01/08 Python
python 检查数据中是否有缺失值,删除缺失值的方式
2019/12/02 Python
学生档案自我鉴定
2013/10/07 职场文书
旅游管理本科生求职信
2013/10/14 职场文书
校园安全教育广播稿
2014/02/17 职场文书
新闻报道策划方案
2014/06/11 职场文书
干部作风整顿个人剖析材料
2014/10/06 职场文书
2014年小学教学工作总结
2014/11/13 职场文书
DjangoRestFramework 使用 simpleJWT 登陆认证完整记录
2021/06/22 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
2021/08/02 Python
90后经典动画片排行:《数码宝贝》第二,《小鲤鱼历险记》在榜
2022/03/18 日漫
PostgreSQL聚合函数介绍以及分组和排序
2022/04/12 PostgreSQL