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使用百度API上传文件到百度网盘代码分享
Nov 08 Python
Python3中多线程编程的队列运作示例
Apr 16 Python
Java中重定向输出流实现用文件记录程序日志
Jun 12 Python
windows 10下安装搭建django1.10.3和Apache2.4的方法
Apr 05 Python
基于python 处理中文路径的终极解决方法
Apr 12 Python
python实现转盘效果 python实现轮盘抽奖游戏
Jan 22 Python
查看python安装路径及pip安装的包列表及路径
Apr 03 Python
python使用time、datetime返回工作日列表实例代码
May 09 Python
python移位运算的实现
Jul 15 Python
python实现知乎高颜值图片爬取
Aug 12 Python
使用python代码进行身份证号校验的实现示例
Nov 21 Python
如何使用pdb进行Python调试
Jun 30 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数组中删除元素的实现代码
2012/06/22 PHP
PHP基础教程(php入门基础教程)一些code代码
2013/01/06 PHP
本地计算机无法启动Apache故障处理
2014/08/08 PHP
浅谈ThinkPHP的URL重写
2014/11/25 PHP
thinkPHP5 ACL用户权限模块用法详解
2017/05/10 PHP
关于php支持的协议与封装协议总结(推荐)
2017/11/17 PHP
PHP性能分析工具xhprof的安装使用与注意事项
2017/12/19 PHP
JavaScript弹出新窗口并控制窗口移动到指定位置的方法
2015/04/06 Javascript
js实现网页抽奖实例
2015/08/05 Javascript
使用Promise解决多层异步调用的简单学习心得
2016/05/17 Javascript
jQuery层次选择器用法示例
2016/09/09 Javascript
javascript 产生随机数的几种方法总结
2017/09/26 Javascript
Vue 项目代理设置的优化
2018/04/17 Javascript
vue router 组件的高级应用实例代码
2019/04/08 Javascript
vue slot与传参实例代码讲解
2019/04/28 Javascript
更优雅的微信小程序骨架屏实现详解
2019/08/07 Javascript
[56:00]DOTA2上海特级锦标赛主赛事日 - 4 胜者组决赛Secret VS Liquid第一局
2016/03/05 DOTA
采用Psyco实现python执行速度提高到与编译语言一样的水平
2014/10/11 Python
使用Python生成url短链接的方法
2015/05/04 Python
python过滤字符串中不属于指定集合中字符的类实例
2015/06/30 Python
Django实现自定义404,500页面教程
2017/03/26 Python
用python实现的线程池实例代码
2018/01/06 Python
详解如何将python3.6软件的py文件打包成exe程序
2018/10/09 Python
PyQt5 界面显示无响应的实现
2020/03/26 Python
HTML5打开本地app应用的方法
2016/03/31 HTML / CSS
美国儿童运动鞋和服装零售商:Kids Foot Locker
2017/08/05 全球购物
哈弗商学院毕业生求职信
2014/02/26 职场文书
英语一分钟演讲稿
2014/04/29 职场文书
数控机床专业自荐信
2014/05/19 职场文书
建筑学专业自荐书
2014/07/09 职场文书
机械工程及其自动化专业求职信
2014/08/08 职场文书
领导干部“四风”问题批评与自我批评材料
2014/09/24 职场文书
批评与自我批评总结
2014/10/17 职场文书
2014年维修电工工作总结
2014/11/20 职场文书
2015年幼儿园中班下学期工作总结
2015/05/22 职场文书
简单聊聊Golang中defer预计算参数
2022/03/25 Golang