前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python3简易接口自动化测试框架设计与实现(上)

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

作者头像
顾翔
发布2019-12-12 12:14:42
5960
发布2019-12-12 12:14:42
举报

来源:http://www.51testing.com

目录

  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

星云测试

http://www.teststars.cc

奇林软件

http://www.kylinpet.com

联合通测

http://www.quicktesting.net

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-05-22,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 软件测试培训 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
日志服务
日志服务(Cloud Log Service,CLS)是腾讯云提供的一站式日志服务平台,提供了从日志采集、日志存储到日志检索,图表分析、监控告警、日志投递等多项服务,协助用户通过日志来解决业务运维、服务监控、日志审计等场景问题。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档