当前位置: 首页 > news >正文

接口自动化测试操作流程

接口自动化大致步骤:

1、发送请求

2、解析结果

3、验证结果

定义三个和业务相关的类

1、一个用来封装HTTPclient,用来发送请求

2、解析结果xml的类

3、一个用于比较测试结果和期望值的类,用于验证

4、自动生成报告的类:自动发送报告之类的

(locust的python工具)

服务级:Web server(服务) Database(持久化工具-数据库)、Cache(短时间持久化工具-缓存)

接口测试:

1、构造数据

(1)通过接口构造

比如获取一个blog的文章信息,怎么构造数据呢?(文章哪里来??)—返回blog信息

通过添加文章的接口,临时构造数据(blog文章),然后断言的时候看看是不是自己造的数据——会造成接口耦合(两个程序模块有关联就叫做耦合。)—和造文章的接口耦合(如果创建文章的接口挂了,那返回blog信息的接口也就挂了)

公交卡充值依赖支付宝的支付接口服务,调用支付接口会有代价,所以模拟一个支付接口,所有通过mockserver(测试桩)去模拟支付接口的服务----不管输入是什么,返回一直成功或是固定的

(2)通过持久化层构造(更好)

意思就是在数据库直接插入数据

2、调用接口

postman/jmeter–win

CURL-linux

Paw–mac

3、对接口返回进行断言

通过不同的输入-判断不同的预期----数据驱动(输入数据)
断言参考方法:对比数据库值,code验证

4、接口测试的用例设计

功能测试用例
业务逻辑设计
业务逻辑方面的测试用例主要是针对服务端接口的处理逻辑进行的用例设计,这种用例设计不是针对某个功能点是否实现,而是对接口的处理逻辑以及一些相互依赖的业务进行验证,通常依照接口的逻辑流程图来进行。举一个例子,购物系统中的两个动作:登录和下单操作,这两个业务是相互依赖的,下单操作必须在登录完成后(登录状态下),否则无法完成下单,这个时候我们就可以设计这样一条case:没有登录的状态下进行下单操作,看服务端如何处理。

可以看到这一块有两个判断,我们需要对不同的判断分支都设计用例,以保证流程图中涉及到的分支我们都有测试用例覆盖。图中涉及到的不同的分支有:
1.abdf;
2.acg;
3.abdeg;
相应的,我们的用例就应该是:
1.userInfo != null && value(userGroup) != 0;
2.userInfo == null;
3.userInfo != null && value(userGroup) == 0;
业务逻辑的用例设计主要是以服务端接口内部的逻辑流程图为基础,针对流程图中的判断和分支进行用例设计,保证服务端接口的每一种逻辑下都有测试用例覆盖。

异常处理情况
服务端接口和客户端之间通常是通过HTTP请求来传递数据,在发送请求的时候,客户端会携带各种不同的参数,此时服务端会根据不同的参数进行不同的处理,所以异常处理主要是针对请求中的参数情况:比如参数增加和缺省、参数的数据类型错误,参数携带错误的值、参数为空等等,这需要我们根据接口文档中各种不同的参数去构造不同的参数异常,检查服务端的响应情况。

性能和安全性方面
服务器的性能往往是个非常重要的关注点,在实际的测试中我们主要关注的是接口的QPS数值,以及CPU和内存占用等性能指标,通常借助于其他工具比如LoadRunner进行性能测试。安全性方面,主要考虑一些常见的安全策略比如请求加密、sql注入等等。

二、接口测试实例

1、postman测试

2、python测试

1 # coding:utf-82 import requests,unittest3 class V2ETestCase(unittest.TestCase):4     def test_ger_node_api(self):5         python_node_id = 906         url = "https://www.v2ex.com/api/nodes/show.json"7         node_name = 'python'8         querystring = {"name":node_name}9         res = requests.request("GET", url, params=querystring).json()
10         print res
11         self.assertEqual(res['id'],python_node_id)
12         self.assertEqual(res['name'], node_name)
13 
14 if __name__=='__main__':
15     unittest.main()
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15

在命令行运行(以后做自动化测试用):

报告可以生成HTML形式的-加进去

python为例:

unittest库

Requests库

Json

Dict字典

assert断言

用postman做接口测试,选择get还是post,加入数据发送请求,查看返回的结果—然后给接口做断言(点右上角的code,选择js语言,写断言)

当接口返回的数据时动态的,比如一个网站文章的最新评论----还是测试环境问题,搭建一个专属的测试环境,不产生新的数据,一样的可以测试接口—相当于动态数据静态化

“怎么做接口测试”这个问题可以分解为两个问题:
怎么设计接口测试用例?
怎么执行接口测试?

怎么执行接口测试?
Fiddler、SOAPUI、PostMan等可以做半自动的接口自动化测试;
使用Robot Framework做全自动化的接口自动化测试;
自己用代码做全自动的接口自动化测试,如Java+testNG;

自动化接口测试+生成报告思路:
在接口的开始测试阶段,我用POSTMAN来手工测试接口,单一接口测试通过后,把测试用例Copy到Jmeter中,作为后续的定期执行的基础,在接口手工全部测完后,用Jmeter+Ant+Jenkins来定期检查每天的接口,并生成测试报告,再写一个爬虫每天监控测试报告,如果出现了异常,发邮件报警。

1、每天的历史报告肯定也是需要留存的
2、有案例失败时的邮件通知

Jenkins有邮件报警和report展示的插件~ 楼主不用自己写。。。

最后应该就是测试报告了,集成于自动化的接口测试,每天的接口测试报告也是挺重要的,Jmeter的测试报告虽然也很清楚,但是并不是我想要的东西,我理想的测试报告应该有一下那么两点

测试通过率
每条测试的过程展示
测试通过率是方便查看报告的人直观的了解本次测试的结果。

测试过程的展示需要展示如下内容:测试结果、请求地址、输入参数、输出结果、断言结果。并且成功和失败的标识需要非常明显。

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取 【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

  视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方进群即可自行领取。     

相关文章:

  • OpenCV中更稳更快的边缘检测方法,快速查找线、圆、椭圆--EdgeDrawing-C++代码
  • 【深度学习环境】windows安装 NVIDIA Docker
  • 【python】9个python进阶技巧(实用)
  • Outlook如何删除邮箱账户
  • 石英增强光声光谱气体传感技术中的高精密压力控制解决方案
  • Redis学习笔记10:基于spring的Lettuce redis客户端Pipelining管道
  • centos7 yum安装python3.9时报错【没有可用软件包 python3.9。 错误:无须任何处理】
  • 开放领域问答机器人2——开发流程和方案
  • 【避雷选刊】Springer旗下2/3区,2个月录用!发文量激增,还能投吗?
  • 使用matlab实现图像信号的色彩空间转换
  • HslCommunication模拟西门子读写数据
  • 压测必经之路,Jmeter分布式压测教程!
  • 响应式摄影科技传媒网站模板源码带后台
  • 《未来之路:技术探索与梦想的追逐》
  • IntelliJ IDEA 2023.2.1 (Ultimate Edition) 版本 Git 如何找回被 Drop Commit 的提交记录
  • android高仿小视频、应用锁、3种存储库、QQ小红点动画、仿支付宝图表等源码...
  • avalon2.2的VM生成过程
  • echarts花样作死的坑
  • GitUp, 你不可错过的秀外慧中的git工具
  • hadoop集群管理系统搭建规划说明
  • JavaScript设计模式之工厂模式
  • js写一个简单的选项卡
  • MySQL用户中的%到底包不包括localhost?
  • WePY 在小程序性能调优上做出的探究
  • 简单基于spring的redis配置(单机和集群模式)
  • 如何编写一个可升级的智能合约
  • 学习笔记:对象,原型和继承(1)
  • 一个JAVA程序员成长之路分享
  • 远离DoS攻击 Windows Server 2016发布DNS政策
  • 再谈express与koa的对比
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • ​sqlite3 --- SQLite 数据库 DB-API 2.0 接口模块​
  • ​人工智能之父图灵诞辰纪念日,一起来看最受读者欢迎的AI技术好书
  • # 20155222 2016-2017-2 《Java程序设计》第5周学习总结
  • (1)STL算法之遍历容器
  • (13)Hive调优——动态分区导致的小文件问题
  • (rabbitmq的高级特性)消息可靠性
  • (大众金融)SQL server面试题(1)-总销售量最少的3个型号的车及其总销售量
  • (二)springcloud实战之config配置中心
  • (附源码)ssm智慧社区管理系统 毕业设计 101635
  • (一)Java算法:二分查找
  • (一)kafka实战——kafka源码编译启动
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • .NET Core实战项目之CMS 第十二章 开发篇-Dapper封装CURD及仓储代码生成器实现
  • .NET处理HTTP请求
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net中生成excel后调整宽度
  • /*在DataTable中更新、删除数据*/
  • @staticmethod和@classmethod的作用与区别
  • [20171113]修改表结构删除列相关问题4.txt
  • [⑧ADRV902x]: Digital Pre-Distortion (DPD)学习笔记
  • [ACTF2020 新生赛]Include
  • [Angularjs]asp.net mvc+angularjs+web api单页应用
  • [BZOJ] 1001: [BeiJing2006]狼抓兔子