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的面向对象思想分析
Jan 14 Python
Python编程中使用Pillow来处理图像的基础教程
Nov 20 Python
python3实现暴力穷举博客园密码
Jun 19 Python
Python MySQLdb 使用utf-8 编码插入中文数据问题
Mar 13 Python
修改默认的pip版本为对应python2.7的方法
Nov 06 Python
利用Python求阴影部分的面积实例代码
Dec 05 Python
python之Flask实现简单登录功能的示例代码
Dec 24 Python
Python 一键制作微信好友图片墙的方法
May 16 Python
使用Python3 poplib模块删除服务器多天前的邮件实现代码
Apr 24 Python
python opencv实现简易画图板
Aug 27 Python
python全栈开发语法总结
Nov 22 Python
利用python做数据拟合详情
Nov 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
亚洲咖啡有什么?亚洲咖啡产地介绍 亚洲咖啡有什么特点?
2021/03/05 新手入门
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
PHP开发注意事项总结
2015/02/04 PHP
tp5框架的增删改查操作示例
2019/10/31 PHP
JScript中的"this"关键字使用方式补充材料
2007/03/08 Javascript
一个tab标签切换效果代码
2009/03/27 Javascript
Jquery调用webService远程访问出错的解决方法
2010/05/21 Javascript
stream.js 一个很小、完全独立的Javascript类库
2011/10/28 Javascript
HTTP 304错误的详细讲解
2013/11/13 Javascript
Jquery跨域获得Json的简单实例
2016/05/18 Javascript
javascript中json基础知识详解
2017/01/19 Javascript
微信小程序开发之map地图实现教程
2017/06/08 Javascript
Vue中父组件向子组件通信的方法
2017/07/11 Javascript
NodeJs实现简单的爬虫功能案例分析
2018/12/05 NodeJs
关于layui 实现点击按钮添加一行(方法渲染创建的table)
2019/09/29 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
python调用java的Webservice示例
2014/03/10 Python
简单的Python2.7编程初学经验总结
2015/04/01 Python
python实现单线程多任务非阻塞TCP服务端
2017/06/13 Python
Python2.7版os.path.isdir中文路径返回false的解决方法
2019/06/21 Python
python3.6 如何将list存入txt后再读出list的方法
2019/07/02 Python
Python实现遗传算法(二进制编码)求函数最优值方式
2020/02/11 Python
Python configparser模块操作代码实例
2020/06/08 Python
Django ModelForm组件原理及用法详解
2020/10/12 Python
python中Pexpect的工作流程实例讲解
2021/03/02 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
HTML高亮关键字的实现代码
2018/10/22 HTML / CSS
美国婚礼礼品网站:MyWeddingFavors
2018/09/26 全球购物
个人违纪检讨书
2014/09/15 职场文书
2014年国庆节广播稿
2014/09/19 职场文书
2015年办公室文秘工作总结
2015/04/30 职场文书
小学中队长竞选稿
2015/11/20 职场文书
MySQL获取所有分类的前N条记录
2021/05/07 MySQL
教你使用pyinstaller打包Python教程
2021/05/27 Python
Vue实现tab导航栏并支持左右滑动功能
2021/06/28 Vue.js
HTML中的表单元素介绍
2022/02/28 HTML / CSS