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 相关文章推荐
windows下安装python paramiko模块的代码
Feb 10 Python
python写日志封装类实例
Jun 28 Python
python sys,os,time模块的使用(包括时间格式的各种转换)
Apr 27 Python
使用pandas将numpy中的数组数据保存到csv文件的方法
Jun 14 Python
Python字符串对象实现原理详解
Jul 01 Python
python实现按行分割文件
Jul 22 Python
Python Selenium参数配置方法解析
Jan 19 Python
tensorflow之并行读入数据详解
Feb 05 Python
基于python3的socket聊天编程
Feb 17 Python
Python使用Socket实现简单聊天程序
Feb 28 Python
python 用opencv实现图像修复和图像金字塔
Nov 27 Python
python中sys模块的介绍与实例
Apr 17 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
山进SANGEAN ATS-909X电路分析
2021/03/02 无线电
php操作JSON格式数据的实现代码
2011/12/24 PHP
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
2013/07/03 PHP
PHP以mysqli方式连接类完整代码实例
2014/07/15 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
解析WordPress中的post_class与get_post_class函数
2016/01/04 PHP
php调用自己java程序的方法详解
2016/05/13 PHP
php操作路径的经典方法(必看篇)
2016/10/04 PHP
实现png图片和png背景透明(支持多浏览器)的方法
2009/09/08 Javascript
jsp js鼠标移动到指定区域显示选项卡离开时隐藏示例
2013/06/14 Javascript
jQuery对html元素取值与赋值的方法
2013/11/20 Javascript
解决微信浏览器Javascript无法使用window.location.reload()刷新页面
2016/06/21 Javascript
AngularJS 依赖注入详解及示例代码
2016/08/17 Javascript
Bootstrap table使用方法记录
2017/08/23 Javascript
vue-awesome-swiper滑块插件使用方法详解
2017/11/27 Javascript
Vue结合Video.js播放m3u8视频流的方法示例
2018/05/04 Javascript
详解keep-alive + vuex 让缓存的页面灵活起来
2019/04/19 Javascript
Vue使用CDN引用项目组件,减少项目体积的步骤
2020/10/30 Javascript
[03:48]显微镜下的DOTA2第四期——TP动作
2014/06/20 DOTA
[00:36]我的中国心——Serenity vs Fnatic
2018/08/21 DOTA
python使用os模块的os.walk遍历文件夹示例
2014/01/27 Python
python 解析XML python模块xml.dom解析xml实例代码
2014/02/07 Python
使用python中的in ,not in来检查元素是不是在列表中的方法
2018/07/06 Python
简单了解python中的与或非运算
2019/09/18 Python
python如何使用socketserver模块实现并发聊天
2019/12/14 Python
python和js交互调用的方法
2020/06/23 Python
Python gevent协程切换实现详解
2020/09/14 Python
美国购买体育、音乐会和剧院门票网站:SelectATicket
2019/09/08 全球购物
马德里运动鞋商店:Nigra Mercato
2020/02/16 全球购物
几个Shell Script面试题
2012/08/31 面试题
标准毕业生自荐信范文
2013/11/04 职场文书
劳模事迹材料范文
2014/12/24 职场文书
诚信承诺书
2015/01/19 职场文书
七年级上册语文教学计划
2015/01/22 职场文书
《自然之道》读后感3篇
2019/12/17 职场文书