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开发的小球完全弹性碰撞游戏代码
Oct 15 Python
c++生成dll使用python调用dll的方法
Jan 20 Python
Python的collections模块中的OrderedDict有序字典
Jul 07 Python
Python图形绘制操作之正弦曲线实现方法分析
Dec 25 Python
python对excel文档去重及求和的实例
Apr 18 Python
python中ASCII码字符与int之间的转换方法
Jul 09 Python
python pygame模块编写飞机大战
Nov 20 Python
django 捕获异常和日志系统过程详解
Jul 18 Python
pygame编写音乐播放器的实现代码示例
Nov 19 Python
PyTorch中的padding(边缘填充)操作方式
Jan 03 Python
TensorFlow tensor的拼接实例
Jan 19 Python
解决python和pycharm安装gmpy2 出现ERROR的问题
Aug 28 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详细彻底学习Smarty
2008/03/27 PHP
sourcesafe管理phpproj文件的补充说明(downmoon)
2009/04/11 PHP
PHP number_format() 函数定义和用法
2012/06/01 PHP
ThinkPHP CURD方法之order方法详解
2014/06/18 PHP
Uglifyjs(JS代码优化工具)入门 安装使用
2020/04/13 Javascript
jQuery教程 $()包装函数来实现数组元素分页效果
2013/08/13 Javascript
jquery滚动加载数据的方法
2015/03/09 Javascript
JS实现两表格里数据来回转移的方法
2015/05/28 Javascript
jQuery实现定时读取分析xml文件的方法
2015/07/16 Javascript
学习Bootstrap组件之下拉菜单
2015/07/28 Javascript
jQuery双向列表选择器select版
2016/11/01 Javascript
JavaScript 中对象的深拷贝
2016/12/04 Javascript
JS经典正则表达式笔试题汇总
2016/12/15 Javascript
详解微信小程序 wx.uploadFile 的编码坑
2017/01/23 Javascript
Angular 4依赖注入学习教程之简介(一)
2017/06/04 Javascript
微信小程序后台解密用户数据实例详解
2017/06/28 Javascript
javaScript封装的各种写法
2017/08/14 Javascript
jsonp跨域获取数据的基础教程
2018/07/01 Javascript
微信小程序网络请求封装示例
2018/07/24 Javascript
thinkjs微信中控之微信鉴权登陆的实现代码
2019/08/08 Javascript
js实现简单抽奖功能
2020/11/24 Javascript
Python 常用string函数详解
2016/05/30 Python
Python 转义字符详细介绍
2017/03/21 Python
200行python代码实现2048游戏
2019/07/17 Python
python安装gdal的两种方法
2019/10/29 Python
python boto和boto3操作bucket的示例
2020/10/30 Python
Mankind美国/加拿大:英国领先的男士美容护发用品公司
2018/12/05 全球购物
军用级手机壳,专为冒险而建:Zizo Wireless
2019/08/07 全球购物
Piercing Pagoda官网:耳环、戒指、项链、手链等
2020/09/28 全球购物
学校安全责任书
2014/04/14 职场文书
学生未请假就回家检讨书
2014/09/22 职场文书
上班迟到检讨书300字
2014/10/18 职场文书
Mysql Online DDL的使用详解
2021/05/20 MySQL
Python实现8种常用抽样方法
2021/06/27 Python
中国古风插画师排行榜:夏达第一,第三是阴阳师姑获鸟皮肤创作者
2022/03/18 国漫
SQL Server远程连接的设置步骤(图文)
2022/03/23 SQL Server