美文网首页壁纸小家自动化测试程序员
接口测试框架优化(一)---主要结构

接口测试框架优化(一)---主要结构

作者: 迈阿密小白 | 来源:发表于2018-01-30 19:56 被阅读388次

前言

先贴上Github地址,以表诚意。认真脸.jpg
之前第一次做接口自动化,整体采用的模型是线性测试,即:每个测试脚本都是完整且独立的,相互之前没有什么强依赖,所有的测试数据都是写在脚本中的,长期下来开发和维护成本都很高,后来公司也慢慢弃用了。
后来慢慢了解了一些其他模型:

  • 模块化驱动
    把重复的操作当做独立的公共模块,当用例需要调用相关模块时被调用,大大的减少了代码量,整体也很简洁,降低了开发和维护成本,提高了效率
  • 数据驱动
    实现数据和脚本的分离,用数据去驱动脚本的执行,根据数据的变化生成不同的结果,增强了脚本的复用性,理想情况下做到不修改代码,只修改数据(不过这应该很难)
  • 关键字驱动
    在数据的基础上,用关键字去驱动,生成对应的结果

整体框架及流程图

最终结合自身情况,暂时选择了数据驱动+模块化驱动的模式

主要流程如下:

流程图.png

所有的用例都用Excel来管理,理想情况是不修改任何代码,只修改Excel来驱动相应的测试,产生不同的结果。

表格中的用例暂时由如下部分组成:

执行前.png
执行后.png
  • 用例编码、名称等自己定义
  • url地址及对应的接口地址
  • 请求方式根据对应的方式发请求
  • 是否执行:1 执行,0 不执行
  • 请求头和请求参数
  • sql校验,同是否执行:1 执行 ,0 不执行
  • 执行sql,需要sql校验时,执行的sql
  • 预计结果,预计执行的sql的结果,主要用于结果判断
  • 断言对象,主要用来和content做正则匹配
  • 状态码和内容是实际返回的值
  • 结果分为pass、fail、not execute(未执行)

代码整体结构如下:

主要结构.png

其中:

  • common文件夹,主要用来存放公共的文件及配置文件

    • getexceldata.py setexceldata.py 用来读取和写入Excel数据
    • connect_DB check_db 主要是数据库相关,connect连接,check用来校验执行的sql和预期结果是否一致
    • readconfig.py 主要用来读取配置文件config.ini
    • check_all 主要用来校验结果,采用三重校验:1.status-code 2.sql执行的结果 3.content与预期结果正则匹配
  • result文件,主要用来存放测试结果

  • testcase文件夹,主要用来测试用例,目前采用的是一个模块一个用例

  • testdata文件夹,主要用来存放测试数据,如:管理用例的Excel文件夹

  • test_runner.py 用来执行所有的测试用例

整体框架如上,核心代码部分下一次说。

需要了解的一点小技能

在这之前需要一些其他的小技能,方便我们进行编写用例:

  • 使用python读取Excel表格
    我用的是xlrd这个库,如果不想深入学习的话,只需要了解几个常用的api:
alldata=xlrd.open_workbook(file)
sheet = alldata.sheet_by_name(name)
nrows = sheet.nrows   ----读取行数
value = sheet.cell(rows,cols).value  ----读取执行单元的值
  • 使用python往旧的Excel表格中写数据(即有数据的表格)
    同样只用到了简单的api
oldWb=xlrd.open_workbook(file,formatting_info=True)
newWb = copy(oldWb)
newWs = newWb.get_sheet(sheetnum)
newWs.write(rows,cols,statuscode)
newWb.save(file)
  • 使用python连接数据库
    我司用的是psg数据,其他的sql等操作方法应该差不多,都是连接--执行sql--输出结果的流程,主要api如下:
self.conn = psycopg2.connect(host= host ,
                                         user=user,
                                         port=port,
                                         password=password,
                                         database=db,
                                         )
cusor = self.conn.cursor()
cusor.execute(sql)
rows = cusor.fetchall()
for row in rows:
    print row[0]
  • 简单的正则表达式
    用来检验某个字段是否包含在接口返回的content中

相关文章

网友评论

  • cooling2016:测试结果,实现回写到Excel?
    迈阿密小白:@cooling2016 是的,每一行最后会有结果
  • cooling2016:大哥,有空开源代码地址出来
    cooling2016:@迈阿密小白 哈哈,到时你git后,我来仔细研究你写的
    迈阿密小白:哇,兄弟你这速度。。。杠杠的
    下一篇介绍主要代码,到时候应该会把地址贴出来。暂时还没有上传github。
    有不少缺陷,多指教哇

本文标题:接口测试框架优化(一)---主要结构

本文链接:https://www.haomeiwen.com/subject/fmaczxtx.html