接口测试自动化生成框架

简介:

接口测试这个词语,相信大家都不陌生了吧。目前我个人的理解,接口测试应该属于白盒测试的范畴,也是很多测试工程师很想从事和向往的一个测试手段。大家都觉得白盒测试深不可测,但实际上是怎么样的呢。

  接口测试的实施优先级

  对于 Web 应用来说,接口测试就是对某一个接口进行测试代码的编写和执行。一般情况下,实施接口测试的优先级是:对暴露在外面的接口(该接口会给第三方调用)进行接口测试;内部的核心功能接口也会做接口测试;内部非核心功能接口的接口测试(很多时候就是单元测试)。当然这个实施的具体细节,还需要根据项目的情景和人员的能力来确定如何实施接口测试、在哪里做接口测试、为什么要做接口测试、做到什么程度等。

  接口测试的实施条件

  接下来说下,接口测试实施需要的一些条件。第一个就是测试人员的能力,代码的熟悉能力、接口测试框架的使用能力、接口测试环境的搭建能力、接口测试设计的能力、基础代码的编写能力、基础 Debug 能力等。第二个就是接口测试框架,框架是否定制化一些功能(比如自动加载 java bean、方便初始化数据、方便校验数据库数据等)。第三个就是测试团队和测试流程的支持,测试团队需要支持测试人员对核心接口进行接口测试(包括时间上、精力上、技术上等支持);测试流程上需要保证接口测试的效率和项目接入性(在项目当中实施接口测试,充分考虑开发团队和功能测试团队合作等)。

  接口测试的实例

  接下来会通过一个案例来说明接口测试的一些基本考虑点,这里不涉及到详细的接口测试流程和注意点,只会把接口测试的一些想象展示给大家。

public interface IdleItemService {
Result<ExtraItem> publish (ExtraItem extraItem);
/**
* taobao.idlesell.item.update
* 编辑闲置宝贝
*/
Result<ExtraItem> update (ExtraItem extraItem);
/**
* taobao.idlesell.item.get
* 查询闲置宝贝
*/
Result<ExtraItem> query (Long itemId,Boolean hasDesc,Boolean hasPic,String appKey);
}

  上面的代码是淘宝的提供出去的某个 Top 接口代码,测试人员需要针对这个 Top 接口做最严格的接口测试,那他该怎么做呢,需要持续关注什么呢。

  接口测试之前,需要充分的了解接口的实现功能的业务逻辑、接口参数、接口返回值。功能业务逻辑:外部可以通过该接口发布一个闲置二手的宝贝,具体细节不做说明。

  接口参数: 一个宝贝的所有信息参数。见图:

  接口返回值:Result<IdleItemResult>,其中包含一些 errorcode 等基本属性。

  接口的测试设计主要关注点

  1. 接口中所有的入参都要写测试用例。
  2. 每个入参的每个错误类型都要准备一个异常用例。如必须参数缺省、参数类型错误、参数范围错误、参数超过最大位数、参数没有达到最小指定位数、参数的无效值(有效状态外)、参数的小数点超过规定长度、参数含有非法字、参数含有违禁字、参数的关联性检查(如所在省、市,所在地不匹配)等等。
  3. 对于正常系的用例,要把所有入参的各种合法的有效值都执行到。所有入参的最大位可以用一个测试用例执行掉。所有可缺省的参数不要(只输入必须参数)的测试用例也要做一个。
  4. 对于搜索接口,应该把每个参数单独作为搜索条件来确认搜索结果是否正确,然后再确认多条件输入后的结果。

  如下是部分参数的接口测试设计的截图:

  接口的测试代码的编写

  大家应该发现了对于所有的参数,我们都需要校验一下参数的基本特征,如前面讲到的异常用例一样。那么接口测试代码又是什么样的呢。

  • step1: 编写测试基类(加载资源、初始化环境)(可选)。
  • step2: 编写测试类。
  • step3: 在该测试类中编写测试方法。
  • step4: 在测试方法中调用被测方法。
  • step5: 验证预期结果与返回的结果是否一致。
  • step6: 执行测试查看测试结果。

  那么针对所有的接口测试用例写接口测试代码,可以看到的是,我们的接口测试代码主要是入参的不同,校验结果的不同,其他区域的测试代码都是一样的。我们要做的是不断的 copy 前一个测试用例代码,然后修改某个参数、修改某个验证点就搞定了。

  接口测试自动化生成框架

  对于这些比较重复的测试代码编写工作,大家肯定想到是否可以自动生成这些脚本,还会想到自动生成的脚本是否可以和测试数据一起自动运行测试代码呢。这里可没想象那么简单,需要考虑业务逻辑、接口环境、测试数据、接口测试框架等一系列的组合。

  我们来简单点吧,我们的目的,在一定的测试范围内,充分利用工具来自动化生成测试用例,保证测试用例的覆盖率。 两种程度的复用该测试套件,一种是测试用例的生成和复用,一种是测试代码的生成和复用。 请看下面的自动化生成框架的架构图:

  模板引擎架构图如下:

  相关术语解释:

  1. All Pairs:利用参数来定制化生成测试用例的攻击,入口是 Excel 准备的参数文件;出口是 txt 文件的测试用例。这个工具是开源的,可以自己定制化开发,具体请见:http://www.infoq.com/cn/news/2011/08/combination-test
  2. 业务 API 库:由于需要生成测试代码,需要知道业务逻辑所涉及到的接口和类,比如 IC 中的发布宝贝的发布接口。
  3. 模板:根据业务逻辑规则制定的逻辑描述,可以利用因果图分析法中的“或与非”来描述接口业务功能逻辑(需要抽象出相应的关键因子,也就是部分的接口入参)
  4. 测试用例分析器:将 txt 文件格式的测试用例进行分析,分析每个用例的参数和参数值和业务逻辑。
  5. 测试数据分析器:将 xml 文件格式的测试数据进行分析,与生成的每个测试用例代码进行组合和处理,生成带数据的测试代码。

  那么接下来我们需要做什么呢。迭代去开发我们需要的组件就行,第一步考虑自动生成接口测试框架代码,定制化的选择接口来自动生成框架代码(包括集成了现成的接口测试框架);接下来考虑如何让我们的用户(测试人员)来输入我们的测试数据,并考虑与框架代码生成进行集成融合;另外一块就是测试环境的 API 的调用了,如何能自动运行自动生成的测试代码并反馈结果给测试人员等一系列的问题需要进一步深入挖掘。

  这里还需要说明的是,我们不期望这个框架能解决所有接口功能接口测试代码的自动生成(有些接口实现业务逻辑较复杂),我们能解决掉一部分重复工作(某个接口的 60% 的测试代码),且能告诉大家我们可以做一些事情更智能化和简单化。








====================================分割线================================



最新内容请见作者的GitHub页:http://qaseven.github.io/

目录
相关文章
|
4天前
|
测试技术 持续交付
探索软件测试中的自动化测试策略
随着软件开发周期的加速和市场需求的不断增长,传统的手动软件测试方法已难以满足现代软件开发的高效性和准确性要求。本文旨在探讨自动化测试在软件测试中的重要性、实施策略及其对提高软件质量的影响。通过分析自动化测试的优势与挑战,以及提供实用的自动化测试工具和框架选择指南,旨在帮助读者理解并应用自动化测试以提升软件开发效率和产品质量。
|
8天前
|
人工智能 监控 测试技术
探索软件测试中的自动化框架选择与优化策略####
【10月更文挑战第21天】 本文深入剖析了软件测试领域面临的挑战,聚焦于自动化测试框架的选择与优化这一核心议题。不同于传统摘要的概述方式,本文将以一个虚拟案例“X项目”为线索,通过该项目从手动测试困境到自动化转型的成功历程,生动展现如何根据项目特性精准匹配自动化工具(如Selenium、Appium等),并结合CI/CD流程进行深度集成与持续优化,最终实现测试效率与质量的双重飞跃。读者将跟随“X项目”团队的视角,直观感受自动化框架选型的策略性思考及实践中的优化技巧,获得可借鉴的实战经验。 ####
25 0
|
1天前
|
jenkins 测试技术 持续交付
软件测试中的自动化与持续集成
在现代软件开发过程中,自动化测试和持续集成已成为不可或缺的组成部分。本文将深入探讨自动化测试和持续集成的重要性、优势以及如何有效实施它们以提升软件质量和开发效率。通过具体案例分析,我们将展示这些技术如何在实际项目中发挥作用,并讨论其面临的挑战及应对策略。
17 3
|
4天前
|
测试技术 持续交付 API
探索软件测试中的自动化:从新手到专家
在软件开发的世界中,测试是确保产品质量的关键步骤。本文将通过一个初学者的视角,介绍如何从零开始构建自动化测试框架,并逐步深入到更复杂的测试场景。我们将探讨自动化测试的优势、工具选择、以及如何有效地实施和扩展自动化测试策略。无论你是刚入门的软件测试新手,还是希望提升自动化测试技能的开发人员,这篇文章都将为你提供实用的指导和启示。
|
2天前
|
测试技术 持续交付 数据安全/隐私保护
软件测试的艺术与科学:探索自动化测试框架
在软件开发的世界中,测试是确保产品质量的关键环节。本文将深入探讨自动化测试框架的重要性和实现方法,旨在为读者揭示如何通过自动化测试提升软件测试效率和准确性。我们将从测试的基本概念出发,逐步引导读者了解自动化测试框架的设计和实施过程,以及如何选择合适的工具来支持测试活动。文章不仅提供理论知识,还将分享实用的代码示例,帮助读者将理论应用于实践。无论你是测试新手还是经验丰富的开发者,这篇文章都将为你打开一扇通往更高效、更可靠软件测试的大门。
|
7天前
|
机器学习/深度学习 人工智能 自然语言处理
智能化软件测试:AI驱动的自动化测试策略与实践####
本文深入探讨了人工智能(AI)在软件测试领域的创新应用,通过分析AI技术如何优化测试流程、提升测试效率及质量,阐述了智能化软件测试的核心价值。文章首先概述了传统软件测试面临的挑战,随后详细介绍了AI驱动的自动化测试工具与框架,包括自然语言处理(NLP)、机器学习(ML)算法在缺陷预测、测试用例生成及自动化回归测试中的应用实例。最后,文章展望了智能化软件测试的未来发展趋势,强调了持续学习与适应能力对于保持测试策略有效性的重要性。 ####
|
11天前
|
JavaScript 安全 编译器
TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法
本文深入探讨了 TypeScript 与 Jest 测试框架的结合使用,从 TypeScript 的测试需求出发,介绍了 Jest 的特点及其与 TypeScript 结合的优势,详细讲解了基本测试步骤、常见测试场景及异步操作测试方法,并通过实际案例展示了其在项目中的应用效果,旨在提升代码质量和开发效率。
30 6
|
6天前
|
机器学习/深度学习 人工智能 Java
探索软件测试中的自动化框架选择与优化策略####
本文深入探讨了在软件测试领域,面对众多自动化测试框架时,如何根据项目特性、团队技能及长远规划做出最佳选择,并进一步阐述了优化这些框架以提升测试效率与质量的策略。通过对比分析主流自动化测试框架的优劣,结合具体案例,本文旨在为测试团队提供一套实用的框架选型与优化指南。 ####
|
6天前
|
敏捷开发 前端开发 Java
软件测试中的自动化测试框架选择与实践
在当今软件开发生命周期中,自动化测试已成为提升软件质量和开发效率的关键手段。本文旨在探讨自动化测试框架的选择标准及其在实际项目中的应用实践。通过对主流自动化测试框架的分析比较,结合具体案例,本文将阐述如何根据项目需求和团队特点选择合适的自动化测试工具,并分享实施过程中的经验教训。
16 1
|
20天前
|
JSON Java 测试技术
SpringCloud2023实战之接口服务测试工具SpringBootTest
SpringBootTest同时集成了JUnit Jupiter、AssertJ、Hamcrest测试辅助库,使得更容易编写但愿测试代码。
52 3