腾讯大佬细谈Python简易接口自动化测试框架设计与实现,我直呼内行!

Posted 程序员二黑

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了腾讯大佬细谈Python简易接口自动化测试框架设计与实现,我直呼内行!相关的知识,希望对你有一定的参考价值。

大家好,我是二黑,这里赠送一套软件测试相关资源:

  • 软件测试相关工具
  • 软件测试练习集
  • 深入自动化测试
  • Python学习手册
  • Python编码规范
  • 大厂面试题和简历模板

关注我公众号:【程序员二黑】即可免费领取!

交流群:642830685

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用来追踪日志。

4、日志打印

采用内置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')

5、接口请求类封装

安装第三方模块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

最后为方便大家学习测试,特意给大家准备了一份13G的超实用干货学习资源,涉及的内容非常全面。
在这里插入图片描述
包括,软件学习路线图,50多天的上课视频、16个突击实战项目,80余个软件测试用软件,37份测试文档,70个软件测试相关问题,40篇测试经验级文章,上千份测试真题分享,还有2021软件测试面试宝典,还有软件测试求职的各类精选简历,希望对大家有所帮助……

关注我公众号:【程序员二黑】即可获取这份资料了!

推荐阅读

高薪程序员也躲不过35岁这一关…当能力与年龄脱节,我们该如何自救

大学毕业开始销售…不甘于现状,转行测试的自救之路

从销冠到失业,最后选择软件测试,回头看看这段路,我很幸运!

以上是关于腾讯大佬细谈Python简易接口自动化测试框架设计与实现,我直呼内行!的主要内容,如果未能解决你的问题,请参考以下文章

代码实战丨Python简易接口自动化测试框架设计与实现

字节总监细谈:接口测试到接口自动化进阶的一些事

Python接口自动化测试框架实战 从设计到开发

简易selenium自动化测试框架(Python)

简易selenium自动化测试框架(Python)

Python接口自动化测试框架实战 从设计到开发