• 12
  • 12
分享
  • 0基础小白如何学习接口测试?——软件测试圈
  • 曼倩诙谐 2021-05-10 10:01:50 字数 3529 阅读 1856 收藏 12

  接口一般指发生在系统的多个子服务之间,本系统与外部系统之间的信息交换。接口也就是大家熟称的API。例如电商平台中订单服务子系统中,订单中商品sku详细信息需要到商品服务中获取,订单服务调取商品服务的商品信息接口。

  接口测试属于集成测试阶段,接口应用于多个系统或服务间的信息获取或者信息更新。这部分工作由于涉及到多个开发人员,测试人员通常站在系统全局或者系统端到端流程的立场,更容易发现问题和定位责任方。

  接口测试大家经常觉得难度很大,一般是两个方面的问题没得到解决:测试需求分析和测试手段。本篇文章详细为大家解决这两方面的问题,一方面提供测试需求分析方法和案例,另一方面讲解接口自动化测试之python案例脚本。

  一、测试需求分析方法

  要全面了解测试内容,需要掌握通用的信息收集方法。接口测试前,先学会问问题。问清楚如下问题:

  1、接口解决什么问题?

  2、接口的基本信息

  (1)接口的调度

  (2)输入数据

  (3)输出数据

  (4)接口的异常处理要求

  3、测试校验点有哪些呢?

  (1)接口的结果可以有哪些方法进行校验,如到数据库中的校验,到redis中获取值校验。

  (2)接口可在业务系统界面中校验吗?例如B系统查A系统的数据,可以直接打开A系统,看界面的信息。

  4、测试数据如何组织?

  (1)接口使用人员可能会输入的数据组合有哪些?成功的有哪些?失败的有哪些?例如接口使用者会不会传入错误的数据类型,必填项没给值,最小值为0的数,返回了负数。这一点就需要对开发常犯的错误有些基本的了解。才能够一下命中开发的数据问题。

  得到如上问题的答案,一个接口的测试内容和测试用例就组织出来了。

  二、接口测试分析案例

  为了便于大家理解,这里详细讲解电商系统中常见的一个接口。

  电商系统中有一个订单状态实时查询接口,用于获取电商各平台的订单当前状态。这是一个简化版的内部订单状态数据查询接口。

  接口测试第一步需要开发方提供详细的接口文档。接口文档的内容如下:

  订单状态实时查询接口

  场景说明:用于各子系统获取第三方电商平台的订单当前状态。

  接口地址:POST http://192.168.10.10:5000/order/query_order_status

  请求参数(json格式)

1-1.png

{
    "group": "aliExpress",
    "orderId": "996616"
}

  返回结果(json格式)

1-2.png

{"code":1,"error_message":"orderId error",}
{"code":0,"data":"delivered"}

  接口的返回值可参考如下内容。

  基于以上接口文档,我们分析出要测试的内容:

  1、接口解决订单状态的查询问题,即该接口处理合理的订单数据,并返回该订单当前的状态。

  2、接口的调度方式、输入、输出、异常判断在即可文档中给出了详细的说明。需要考虑如下测试场景:

  (1)调度接口的正常数据测试场景,测试标准是指使用正常的数据,查询到准确的订单状态数据。

  (2)调度接口的异常数据测试场景。测试标准是使用非正常数据,接口能返回预期的异常结果,不会出现奔溃。

  3、测试校验点主要包括code和data两个字段;对于正常值的预期结果,如果想做到自动化比对,可以通过代码查询db去进行比对(大家可作为扩展知识去学习)。这里我们直接给出预期结果。

  4、测试数据组织要考虑覆盖面,测试虽然不能做到百分百穷举,但是要在已有的信息上得到最大的覆盖率。测试以上接口,具体可以从三方面来思考:接口文档中明确了的正常数据,接口文档中明确了的异常数据,还有一类是基于经验得到的异常数据,例如开发过去的bug,条件判断的边界值。我们分别从这三方面来组织测试数据。

  (1)正常数据:平台名和订单状态是有限的,可以进行数据组合。订单号因为是唯一值,无法做到穷举测试。穷举平台名和订单状态的所有数据组合,使用自动化脚本进行测试。我这里只是举几个例子:

1-3.png

  (2)异常数据:字段不取可选值或者为空,字段值类型不符合要求等,根据接口文档组装所有出现的异常。

1-4.png

  (3)非预期的异常数据:这类数据可以组合很多,但是要根据系统以往的bug经验,去做一些开发经常忽略的校验点。我这里特意举出两个特殊字符的例子。大家可以去扩充更多的测试用例。

1-5.png

  (4)逆向思考一下,平台会增加吗?订单的状态只有这五类吗,是否还有其他不在这五类中的呢,如果有,也要增加数据去测试。甚至可以去反推需求的合理性,提出系统扩展性的bug。对一个接口测试是否完整,是在于你掌握的信息量是否充分。当你的视角比开发和需求更广阔,对信息掌握的粒度更细时,其实你已经主动引导大家提高接口的质量了。

  经过以上测试内容的梳理,大家对接口测试有了比较基础的认知。随着对项目的深入了解,接口的复杂度的增加,信息面会更广。那么基于以上方法收集信息、分析信息,增加测试覆盖面,甚至了解接口的应用范围,才能更进一步提升对软件技术的理解。

  三、自动化接口测试

  测试手段有很多种,单个的接口测试可以使用浏览器上的工具,如Chrome的postman。但是靠手工在工具上测试一两个接口效率低下,无法保证测试数据的覆盖面,也不利于技术能力的长期积累。我推荐系统地解决问题方式,即编程语言实现自动化测试。

  Python是一门非常容易入门的语言(python语言的学习建议大家去看最简单易懂的廖雪峰的官网)。有了编程思维,再去开展接口测试就具备了基本的技术视野了,对我们后期不断扩展自己的技术能力打下基础。接下来我使用python编程语言来完成接口的正常数据测试用例代码。

  关于订单状态查询接口,我们使用如下代码可以调度和测试:

import json
import requests
order_info = {
    "group": "aliExpress",
    "orderId": "996616"
}
response = requests.post(' http://192.168.10.10:5000/order/query_order_status', data=json.dumps(order_info))
assert response.status_code == 200
response_data = response.json()
assert response_data.get("code") == 0
assert response_data.get("data") == "shipped"

  接下来我对代码进行详细的讲解:

  第一步,导入两个必要的包json和requests。这里需要你对python基础知识、json信息格式的使用和第三方库requests有初步的了解,对web请求原理也要有简单了解,并且能组装出请求数据。

import json
import requests

  第二步,准备好请求数据,请求数据来源于我们设计的测试数据。

order_info = {
    "group": "aliExpress",
    "orderId": "996616"
}

  第三步,将测试数据组装,并采用POST方式发送web请求。注意要将json测试数据序列化后再进行网络传输,直接应用json的序列化方法dumps。

response = requests.post(
'http://192.168.10.10:5000/order/query_order_status', data=json.dumps(order)
)

  第四步,判断请求返回的实际结果同预期结果是否一致。使用assert来断言,判断实际结果和预期结果相等。

assert response.status_code == 200
response_data = response.json()
assert response_data.get("code") == 0
assert response_data.get("data") == "shipped"

  执行以上代码,执行通过,表示实际结果同预期结果一致,该测试用例执行通过。

  不同的测试用例,测试数据和测试结果校验,建议大家扩展以上方法去实践。

  随着大家对接口测试思路和工具的掌握,接下来,要系统化地组织大量接口的测试。那么我们就要考虑测试用例的组织框架,python的unittest框架。大家有兴趣可以继续了解该框架的知识。


作者:Phyllis   

来源:51Testing软件测试网原创

  • 【留下美好印记】
    赞赏支持
登录 后发表评论
+ 关注

热门文章

    最新讲堂

      • 推荐阅读
      • 换一换
          • 一、测试过程拆解针对BI报表测试,一般情况下,我们需要自己准备数据,来验证报表统计的准确性。由于系统的构成不一样,简单把报表测试过程分解为两个层次:数据收集汇总、数据统计展。在做数据收集汇总验证时,我们需要了解数据从哪里来,如何汇总,数据入库的规则是什么,如何存放,在什么时间点进行汇总。把这些问题弄清楚了,才可以针对性的做测试策略,来验证数据入库的准确性。这步很重要,因为这个是报表测试的数据来源,如果这里的数据出错,后面的一切都没有意义。针对数据统计展现,我们需要了解页面上展现的数据来源于库中的哪些表哪些字段,根据什么样的规则来统计。把所有需要展现的数据集对应清楚,这样才能有效的进行数据准备,...
            1 1 1838
            分享
          •   美国司法部对苹果应用程序商店(App Store)规则的反垄断调查仍在继续,对这家数字店面主导地位的审查显然已全面展开,并有可能接近对这家 iPhone 制造商提起诉讼。  自 2020 年以来,司法部一直在对苹果 App Store 的行为进行调查,审查开发者所说的反竞争行为。时隔多年,调查仍在进行中,司法部可能面临着时间紧迫的问题。  自 2021 年 11 月起担任司法部反垄断部门主管的乔纳森-坎特(Jonathan Kanter)向《金融时报》声称,App Store 政策调查现在"火力全开"。尽管坎特此前曾表示,他希望对苹果等美国大公司提起诉讼,但到目前为止,...
            0 0 689
            分享
          •   1、什么是白盒测试  定义:按照程序内部结构,逻辑驱动测试程序。  目的:检测产品内部动作是否按照设计说明书的规范进行,检验程序的每条路径是否都能按照预定要求进行工作。  对象:源程序。  用代码内部的分支,路径,条件,使程序设计的控制结构导出测试用例。  2、白盒测试方法分类  ①、静态测试  ②、动态测试  3、白盒测试的原则  ①、保证一个模块中所有路径至少被测试一次  ②、所有逻辑值都要测试真和假两种情况  ③、检查程序内部的数据结构是否有效  ④、检查上下边界及可操作范围内运行所有循环  4、白盒测试的类别  ①、软件共用问题的测试  ②、语言测试  ③、sql语句测试  ④、数...
            0 0 855
            分享
          •   据报道,当地时间周四,谷歌宣布,将在其加拿大平台上封锁加拿大新闻。在此之前,Facebook也采取了类似的措施,以此对抗该国强制要求互联网平台向当地新闻机构付费的新规。  当该法律大约6个月后生效时,谷歌将在其加拿大搜索结果及其他产品中删除指向加拿大新闻的网络链接。  Facebook母公司Meta上周也宣布了类似的声明,以此抗议加拿大刚刚通过的C-18法案,即《在线新闻法案》。  加拿大媒体行业呼吁对互联网巨头加强监管,以使新闻机构能够挽回多年来因为Facebook和谷歌等在广告市场攻城拔寨而遭受的损失。  加拿大独立预算监管机构去年估计,新闻企业每年可以从该法律强制的交易中获得3.3亿...
            0 0 1200
            分享
          • 如果碰到这种题目,我们可以从以下几个方面来分析:功能、界面/易用性、中断、网络、兼容性、安全性、性能测试功能测试1、朋友圈发送功能1)只发送文本考虑文本长度:1-1500字符(该数据为百度数据)、超出最大字符长度;考虑文本类型:纯中文、纯数字、纯字母、纯字符、纯表情(微信表情/手机自带表情)、混合类型、包含url链接;因为过长纯类型需要换行很容易出现超出边框问题,所以这里先考虑过长纯类型情况;文本是否支持复制粘贴;为空验证。2)只发送图片本地相册选择/拍摄;图片数量验证:1-9张图片、超出9张;图片格式验证:常见图片格式jpg、png(以实际微信需求支持的格式为准)、动态gif图片、不支持的图...
            11 14 3278
            分享
      • 51testing软件测试圈微信