接口自动化测试框架设计

需求描述

基本要求:

    对服务后台一系列的HTTP接口功能测试,主要涉及POST、PUT、GET、DELETE等类型;

    用例与用例之间保持独立,即低耦合。

 

输入:

根据各接口描述,构造不同的参数输入值,模拟客户端请求。

 

输出:

服务端响应(HTTP状态码/具体响应数据)。

 

检验:

用例执行过程中增加断言,判断用例执行成功/失败与否。

 

结果:

可视化的HTML/XML测试报告;

用例执行过程中日志信息记录。

 

CI:

与jenkins结合,完成持续构建、自动部署、自动执行,并将结果发送到相关人。

 

实现方法

  1、采用python脚本来驱动测试;

  2、调用HTTP接口,采用python封装好的API;

  3、测试需要的HTTP,组装字符转处理;

  4、测试数据以随机数传递到各接口对应参数,确保用例独立性;

  5、设置1个/多个检查点,校验响应消息中的返回值(通过解析响应消息得到);

  6、首次执行需根据实际测试环境,修改下配置文件autotest.config(注:不是每次测试

都需要修改这个配置文件,只有在变更测试环境情况下才需要修改)

 

测试框架

设计图:

 

 

 

用例执行过程示意图:

 

 

 

自动化使用指南

自动化概述

    目前使用python的urllib、urllib2模块,封装http请求消息,完成发送json报文到后台,后台处理后,根据http response或其他,并增加断言,以判断用例执行结果是成功还是失败。

   同时组织了用例生成的报告,以及与jenkins结合,实现持续集成,自动执行用例,并将结果以HTML Report方式发送到相关邮箱,及时知道构建结果。

 

测试准备

1、配置文件

只需保证自动化配置文件内容正确即可。配置文件存放在src/common/config/目录下,名称是:autotest.config。配置文件各参数介绍,请参考下图:

2、第三方模块的安装

模块名称

安装命令

模块说明

progressbar

pip install progressbar

进度条

configobj

pip install configobj

读取配置文件

matplotlib

pip install matplotlib

绘图使用

dateuti

pip install python-dateutil

绘图使用

numpy

pip install numpy

绘图使用

pyparsing

pip install pyparsing

 

测试用例的编写

1、所有用例的编写,放在对应功能目录下testcase目录下,且必须以test开头;

2、每一个函数就是一个测试用例,函数名的命名尽量要有意义,能根据函数名称而知道用例是做哪方面的功能测试;

3、用例要保证独立性,互相不依赖。

 

示例如下:

成功登录测试用例

异常登录测试用例

 

 

创建一个通知测试用例:

 

 

测试用例的执行

有两种执行方式

方式1、通过IDE执行

比如在eclipse中打开某个用例,右击选择Run Asà Python unit-test:

 

方式2、通过入口脚本执行

入口脚本存放在src目录下,名称:interfaceRunner.py,双击即可执行所有的测试用例:

 

说明:

选择性的执行用例,可在后期增加,目前只有执行全部用例函数,无选择性执行用例函数。

 

用例执行进度查看

双击src目录下processBar.py,即可查看用例执行进度:

 

在网络或server端响应较慢情况下,用例执行耗时非常长(有一次是79个用例耗时47分钟37秒);经过测试,这79个测试用例,在公网环境正常状态下,只需88秒即可完成。由此也证实了,网络不好的情况下,并不影响自动化测试用例的正常执行。

 

 

历史测试记录数据展示

    每次执行用例(通过执行interfaceRunner.py完成),将测试结果(report目录下Interface_TestReport.xml文件)解析、入库到SQLite  report_history表中,通过统计脚本(statInfoInfo.py)读取数据库中历史记录,以曲线图形展示用例执行成功率。

 

创建sqlite表相关语句:

CREATETABLE [report_history] (

  [begintime] DATETIME NOT NULL,

  [endtime] DATETIME NOT NULL,

  [total] INT NOT NULL,

  [passed] INT NOT NULL,

  [failed] INT NOT NULL,

  [error] INT NOT NULL,

  PRIMARY KEY (begintime));

测试报告查看

测试报告在report目录下Interface_TestReport.html文件,部分截图如下:

 

 

 

配置文件说明

配置文件在src/common/config目录下,名称为:autotest.config,详细内容与解释,请参考本文附件章节中的“配置文件说明”excel文档。

 

 

优缺点

优点

1、直接使用JSON构造报文

    构造的消息体,直接使用json表示。因为后台使用的是JSON,拿到接口文档后就可直接构造报文了,不需要转换成其他类型的报文(如果使用pyresettest,需要将json转成yaml)。

 

2、参数化

      所有测试用例中的host、账号隶属于的组织结构的id、接口的URL地址、接口中需要的参数/tooken等信息,都可以从配置文件/基类中获取;

1)变更测试环境,无需对测试用例进行修改,仅需修改config目录下配置文件即可;

 2)cookie是动态变化的,直接从login response中获取,并传递下去,不需要手工干预,不会出现会话过期失效问题;

3)参数化的另外一个好处是,可以多样化构造报文中字段各式各样的值,测试/验证后台能否正常处理;

4)扩展性强:接口变更后(比如携带的参数调整),直接修改对应基类中构造json报文代码即可。

3、测试记录跟踪、测试结果可视化

    (1)记录用例运行过程中的日志;

    (2)可生成HTML和XML格式测试报告,界面直观,数据一目了然

 

4、用例统一管理

    用例执行有一个统一的入口,可执行所有的用例(如果有需要,将来可增加选择性执行用例)

 

5、成功与jenkins结合,做CI(持续集成)测试

   目前已成功完成与jenkins结合,进行自动构建,并将测试结果(自动化运行日志、测试报告和jenkins构建日志)发送到邮箱,如下图所示:

 

转载自:接口自动化测试框架设计

 

1. 自动化测试碰到比较难解决的问题是什么?如果出现这些问题给出你的解决方案?

(重点引导到测试结果定位准确这个角度上来) 在自动化程度比较高,case很多,就会存在排查失败的case过程。

解决方案: case错误分类,有效的log日志,异常信息的抓取

2. 桌面自动化测试和Web自动化测试的区别?

驱动方式不同,C/S架构(或者桌面类型)界面自动化测试,采取的方式可以调用操作系统本身的API(windows桌面软件)来构建自动化测试或者可以采用虚拟机内(java swing程序)的事件处理机制来完成了。

Web自动化测试 B/S架构,原理就是依靠JS来进行客户端的操作,然后寻找对象是采用了DOM解析技术,将web方面的节点进行解析定位。

 

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值