Python3简易接口自动化测试框架设计与实现(上)

发表于:2019-5-13 10:37  作者:秦无殇   来源:博客园

字体: | 上一篇 | 下一篇 |我要投稿 | 推荐标签: Python 自动化测试框架

  目录
  1、开发环境
  2、用到的模块
  3、框架设计 ?3.1、流程
  3.2、项目结构
  5、日志打印
  6、接口请求类封装
  1、开发环境
  操作系统:Ubuntu18
  开发工具:IDEA+PyCharm插件
  Python版本:3.6
  2、用到的模块
  requests:用于发送请求
  xlrd:操作Excel,组织测试用例
  smtplib,email:发送测试报告
  logging:日志追踪
  json:数据格式化
  Django:接口开发
  configparser:读取配置文件
  3、框架设计
  3.1、流程
  接口用例是通过Excel来组织的,定义了URL,Request Body等列。执行流程如下:
  使用xlrd工具读取Excel中的信息,拼接成一个个完整的请求。
  接口请求类拿到一个个完整的请求的去执行,这个过程需要记录日志,每一次执行情况都要有迹可循。
  回填测试结果,发送邮件,归档每次的运行结果。更好一点的做法是把历史运行情况做个报表,更直观。
  优点:
  用例通过Excel来组织,不需要编写代码,上手难度小。
  在用例个数不是很多的情况,开发速度快。
  缺点:
  用例依赖是痛点。
  只能支持接口自动化用例。
  Excel中用例无法预先检查正确性,只有跑一把才能知道。
  无法很好地管理大量用例,且不支持团队协同作业,个人用来回归测试或上线后的冒烟测试会是一个不错的选择。
  通过优缺点的对比,可以明显发现这个框架的硬伤其实很多了。所以无论是业界开源的自动化测试框架或企业自研的还没有见过用Excel来组织用例的。值得一提的是个别企业自研的自动化框架非常难用,抑或是把一堆工具简单组合到一起。根本无法提高团队的生产力。不过好的产品也不是一蹴而就的,需要一个持续优化的过程。所以上面用Excel组织用例的框架还是值的玩一玩的,暂且命名为apitest吧。目前比较好的自动化测试框架有unittest,testng,pytest等。
  3.2、项目结构
  testcase:存放测试用例或请求的json文件。
  config:配置文件。
  report:测试报告和日志文件及其归档。
  untils:工具集,send_request用来发送请求,email_tool用来发送邮件,excel_tool用来读取Excel中的数据,check_result用来校验结果,run_main用例执行入口,log_trace用来追踪日志。
  5、日志打印
  采用内置logging模块才记录运行日志,设置日志级别。
  log_trace.log:
   import  logging
  filename = "../report/test_case_run.log"
  logging.basicConfig(level=logging.INFO,
  format='%(asctime)s %(levelname)s1 %(filename)s [line:%(lineno)d]  %(message)s',
  datefmt='%a, %d %b %Y %H:%M:%S',
  filename=filename,
  filemode='w')
  6、接口请求类封装
   安装第三方模块requests
 pip install requests
  定义函数send_request,根据传入的方法类型分别去调用request的get,post,delete,put等方法去发送请求。send_request.py:
   import  requests
  from untils. log_trace import  *
  #发送get请求
  def get_request(url,data=None,headers=None):
  res = requests.get(url=url,data=data,headers=headers)
  return res
  #发送post请求
  def post_request(url,data,headers=None):
  res = requests.post(url=url,data=data,headers=headers)
  return res
  #发送delete请求
  def del_request(url,data=None,headers=None):
  res = requests.delete(url,data=data)
  return res
  #发送put请求
  def put_request(url,data,headers=None):
  pass
  def send_request(method,url,data=None,headers=None):
  try:
  logging.info(headers)
  if headers:
  if method == "GET":
  return get_request(url,data,headers=headers)
  if method == "POST":
  return post_request(url,data=data,headers=headers)
  if method == "DELETE":
  return  del_request(url,data=data,headers=headers)
  #put使用频率低,暂时不写
  if method == "PUT":
  return  put_request(url,data=data,headers=headers)
  else:
  logging.info("Header is null")
  except Exception as e:
  logging.info("send request fail:%s"%e)
  在untils_test.py中编写代码测试send_request方法,代码如下:
   #coding:utf-8
  from untils.send_request import send_request
  def test_send_request():
  url="http://127.0.0.1:9000/articles/"
  headers = {
  "X-Token":"0a6db4e59c7fff2b2b94a297e2e5632e"
  }
  res = send_request("GET",url,headers=headers)
  print(res.json())
  if __name__ == "__main__":
  test_send_request()
  运行结果:
   /usr/bin/python3.6 /home/stephen/IdeaProjects/apitest/untils/untils_test.py
  {'status': 'BS.200', 'all_titles': {'amy1': 'alive', 'modifytest': 'alive', 'addTest': 'alive'}, 'msg': 'query articles sucess.'}
  Process finished with exit code 0
  
     上文内容不用于商业目的,如涉及知识产权问题,请权利人联系博为峰小编(021-64471599-8017),我们将立即处理。

【调查报告】你以为的测试行业现状,其实是这样的!

评 论

论坛新帖

顶部 底部


建议使用IE 6.0以上浏览器,800×600以上分辨率,法律顾问:上海瀛东律师事务所 张楠律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2019, 沪ICP备05003035号
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪公网安备 31010102002173号

51Testing官方微信

51Testing官方微博

扫一扫 测试知识全知道