如何实现基于场景的接口自动化测试用例?

这篇具有很好参考价值的文章主要介绍了如何实现基于场景的接口自动化测试用例?。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

自动化本身是为了提高工作效率,不论选择何种框架,何种开发语言,我们最终想实现的效果,就是让大家用最少的代码,最小的投入,完成自动化测试的工作。

基于这个想法,我们的接口自动化测试思路如下:

1.不变的内容全部通过配置化来实现,比如:脚本执行的环境、请求的 HOST、URL 路径、测试数据等;

2.环境和数据关联变更:依据不同的环境,选择不同的配置及对应的测试数据;

3.抽取公共方法,避免冗余代码;

4.场景化的用例,实现可配置化;

5.数据驱动。

1.问题

在做自动化的过程中,不能只考虑单接口的脚本,也要考虑场景化的用例。场景化的用例不需要每个步骤都去校验所有的数据,可能更多看重串联后的最终效果。

那什么是场景用例?

其实就是多个接口组成的业务场景,常规写代码的做法是,先调用接口1,验证结果, 再调用接口2,再继续接口3,… 等等;在测试场景中,可能只是各个接口的入参不一样,或者是调用的接口不一样。这样代码写起来就会冗余。

比如:

def test_01(self):
    # step 01
    result1 = PackDemo().getTest()
    assert result1 == 4

    # step02
    result2 = PackDemo2().getTest2("name")
    assert result2 == 'name'
    
    # step03
    result3 = DemoApi().getTest()
    assert result3 == 2

这样的用例,对于简单的接口没什么问题,但是对于复杂的接口,校验逻辑比较多,或者入参比较多,实现的方式就过于单一了。且不同场景的话,每个都要更改调用的步骤和返回值,场景越多冗余越多。
如果使用配置化的方式,每次从配置文件中动态加载配置的场景用例, 而且能够做到加载后做对应的断言,那该多好。
怎么做呢?咱们看看一些核心的实现。

2.方案

2.1 项目结构
项目结构如下:

如何实现基于场景的接口自动化测试用例?,测试用例,运维,软件测试,程序人生,自动化测试

采用当前比较流行的 Python + Pytest + Allure 来实现,具体结构不做展开。

2.2 场景用例的配置数据

# test_scenario.json
{
  "test_01": {
    "step_1": {  ---- 步骤节点名称,可自定义
      "packagePath": "api", --- 这个步骤要运行的方法所属类的包路径
      "class": "DemoApi", --- 这个步骤要运行的方法所属类名称
      "method": "getTest", --- 这个步骤要运行的方法名称
      "request": null,  ---这个步骤运行的方法入参
      "response": 2, ---这个步骤运行的结果,可以是一个值,或者对象
      "verify": { --- 数据校验的节点
        "type": 1, ---数据校验的类型
        "keys": null  ---如果是校验的特定字段,这里需要输入部分校验的字段
      }
    },
    "step_2": {
      "packagePath": "api.demo",
      "class": "PackDemo",
      "method": "getTest2",
      "request": "request -> name",
      "response": 6,
      "verify": {
        "type": 1,
        "keys": null
      }
    },
    "step_3": {
      "packagePath": "api.demo",
      "class": "PackDemo2",
      "method": "getTest3",
      "request": {
        "name": "param-name",
        "num_list": ["a", "b", "c"]
      },
      "response": 8,
      "verify": {
        "type": 1,
        "keys": null
      }
    }
  }
}

2.3 动态加载类

在我们配置了以上的测试场景的数据后,我们希望在用例执行的过程中,通过获取我们的配置,能够动态的加载数据文件中提到的方法,并执行对应的方法,那这个过程的实现我们主要通过如下的动态加载类来实现。

# DynamicLoad.py 
# 部分主要的摘录如下
 def __load_module(self):
        """
        加载对应路径下的模块
        :param package_path: 包路径
        :param class_name: 类名称
        :return:
        """
        return importlib.import_module("." + self.class_name, package=self.package_path)

def __getClassInstance(self):
    """
    加载对应的模块下的类,并返回对应类的实例 
    :param module_name: 对应的模块
    :param class_name:
    :return:
    """
    self.my_module = self.__load_module()
    self.my_class = getattr(self.my_module, self.class_name)()
    return self.my_class

def execMethod(self, method, *args):
    """
    加载对应类下的方法 
    :param instance: 对应的实例
    :param method: 要执行的方法
    :return:
    """
    result = getattr(self.__getClassInstance(), method)(*args)
    return result

有了以上动态加载的方法后,在执行场景用例时,依据上述的方法,就可以执行测试文件中提到的方法。

2.4 场景分析类

在场景用例的测试数据中,除了需要解析需要执行的类、方法外,还要解析文件中涉及到的出入参及数据比对方式,因此,这里还需要一个场景分析类,来解析数据文件中关于具体执行过程的配置。

 #ScenariosAnalyze.py
 def analyse_exe_scenario(self, case_data):
        step_result = {}
        summary = True
        for i in case_data:
            instance = DynamicLoad(case_data[i]['packagePath'], case_data[i]['class'])
            if case_data[i]['request'] is not None:
                result = instance.execMethod(case_data[i]['method'], case_data[i]['request'])
            else:
                result = instance.execMethod(case_data[i]['method'])
            if case_data[i]['verify'] is not None:
                compare_type = case_data[i]['verify']['type']
                keys = case_data[i]['verify']['keys']
                step_compare_result = DataCompare().compare_type(compare_type=compare_type, actual=result,
                                                                 expect=case_data[i]['response'], keys=keys)
                if not step_compare_result:
                    summary = False
            step_result[i] = step_compare_result
        step_result['summary'] = summary
        return step_result

2.5 用例实现

# @File : test_scenario.py

class TestScenario:

    @allure.story('场景用例01')
    @allure.severity(allure.severity_level.BLOCKER)
    @pytest.mark.smoke
    def test_01(self):
        result = None
        case_data = self.test_data_json['test_01']
        result = self.scenario_analyze.analyse_exe_scenario(case_data)
        assert result['summary'] is True

通过上述简单的脚本调用,就可以完成一个场景用例的测试了。

3.小结

以上就是场景用例配置化的实现思路。

它的优点是:

1.配置化: 一切固定不变的内容全部配置化,最终达到:一个环境配置文件,一套脚本,几套测试数据,依据环境的不同选择不同的测试数据执行对应的测试脚本;

2.门槛低:因为配置化,测试同学只要把测试数据文件中的关键节点配置好,然后在脚本中写下调用方法,就完成用例编写了;

3.好扩展:在后续的实现中,可以将这些配置全部页面化,包括环境、数据、脚本,达到无代码开发的目的;

缺点当然是不够灵活,所以没有完美的方案,只有合适的,以上,仅供大家参考。


          【下面是我整理的2023年最全的软件测试工程师学习知识架构体系图】


一、Python编程入门到精通

二、接口自动化项目实战  

如何实现基于场景的接口自动化测试用例?,测试用例,运维,软件测试,程序人生,自动化测试

三、Web自动化项目实战

四、App自动化项目实战 

如何实现基于场景的接口自动化测试用例?,测试用例,运维,软件测试,程序人生,自动化测试

五、一线大厂简历

六、测试开发DevOps体系 

如何实现基于场景的接口自动化测试用例?,测试用例,运维,软件测试,程序人生,自动化测试

七、常用自动化测试工具

八、JMeter性能测试 

如何实现基于场景的接口自动化测试用例?,测试用例,运维,软件测试,程序人生,自动化测试

九、总结(尾部小惊喜)

生命不息,奋斗不止。每一份努力都不会被辜负,只要坚持不懈,终究会有回报。珍惜时间,追求梦想。不忘初心,砥砺前行。你的未来,由你掌握!

生命短暂,时间宝贵,我们无法预知未来会发生什么,但我们可以掌握当下。珍惜每一天,努力奋斗,让自己变得更加强大和优秀。坚定信念,执着追求,成功终将属于你!

只有不断地挑战自己,才能不断地超越自己。坚持追求梦想,勇敢前行,你就会发现奋斗的过程是如此美好而值得。相信自己,你一定可以做到!

                                     如何实现基于场景的接口自动化测试用例?,测试用例,运维,软件测试,程序人生,自动化测试文章来源地址https://www.toymoban.com/news/detail-633436.html

到了这里,关于如何实现基于场景的接口自动化测试用例?的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 基于Python简单实现接口自动化测试(详解)

    本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势,然后简单讨论了一下接口测试框架的要点,最后介绍了一下我们目前正在使用的接口测试框架pithy。期望读者可以通过本文对接口自动化测试有一个大致的了解。 为什么要做接口自动化测试? 在当前互联网

    2024年01月20日
    浏览(48)
  • 基于 Junit 的接口自动化测试框架实现

    目录 前言: 分层的自动化测试 接口测试的意义 接口测试框架选型 我们封装的接口测试框架 接口测试关键实践 测试代码规范 (仅供参考) 前言: 基于JUnit的接口自动化测试框架可以实现对接口进行自动化测试,并提供了丰富的断言和报告功能。JUnit是一个流行的Java单元测试

    2024年02月16日
    浏览(54)
  • 接口自动化测试实践指导(中):接口测试场景有哪些

    在第一篇文章 接口自动化测试实践指导(上):接口自动化需要做哪些准备工作中详细给小伙伴们讲解了一下接口自动化需要做哪些准备工作,准备工作中最后一步接口测试用例设计是非常重要的一个环节,用例设计的好不好,直接关系到我们的测试质量,那如何进行测试用

    2023年04月08日
    浏览(44)
  • 简单实现接口自动化测试(基于python+unittest)

    本文通过从Postman获取基本的接口测试Code简单的接口测试入手,一步步调整优化接口调用,以及增加基本的结果判断,讲解Python自带的Unittest框架调用,期望各位可以通过本文对接口自动化测试有一个大致的了解。 为什么要做接口自动化测试? 在当前互联网产品迭代频繁的背景

    2024年02月07日
    浏览(70)
  • 【Java】接口自动化测试是什么,如何实现?

    接口自动化测试是一种自动检查接口功能、性能和可靠性的测试方法。它可以帮助开发人员快速发现接口中的问题,提高开发速度和质量。 接口自动化测试的实现主要包括以下几个步骤: 选择合适的工具:首先,你需要选择一个合适的自动化测试工具,如Postman、JMeter、Res

    2024年02月08日
    浏览(51)
  • python实现基于RPC协议的接口自动化测试

    RPC(Remote Procedure Call)远程过程调用协议是一个用于建立适当框架的协议。从本质上讲,它使一台机器上的程序能够调用另一台机器上的子程序,而不会意识到它是远程的。 RPC 是一种软件通信协议,一个程序可以用来向位于网络上另一台计算机的程序请求服务,而不必了解

    2024年02月04日
    浏览(70)
  • 基于RPC协议的接口自动化测试可以用Python语言实现

    基于RPC协议的接口自动化测试可以用Python语言实现。下面是实现步骤: 1、安装依赖库,如protobuf、grpc。 2、编写.proto文件定义接口参数和返回值。 3、使用protoc编译.proto文件生成Python代码。 4、编写客户端代码调用远程接口进行测试。 具体实现步骤如下: 1、安装依赖库 在终

    2024年02月08日
    浏览(47)
  • 【测试】MeterSphere单接口用例、自动化场景用例测试教程

    1、在对应的模块下创建接口 2、接口的详细信息填写 3、为该接口添加测试用例 设置断言规则 4、调试单接口测试用例通过(若不通过,根据请求内容、响应体和断言结果排查错误) 1、根据测试场景将单接口自动化用例进行组合,形成场景自动化测试用 输入场景用例名称,

    2024年02月13日
    浏览(52)
  • 基于 python 的接口自动化测试,让你轻松掌握接口自动化

    目录 目录 一、简介                ​编辑二、引言 三、环境准备 四、测试接口准备 接口信息 五、编写接口测试 六、优化 封装接口调用   本文从一个简单的登录接口测试入手,一步步调整优化接口调用姿势; 然后简单讨论了一下接口测试框架的要点; 最后介绍了一下

    2023年04月19日
    浏览(72)
  • 软件测试Pytest实现接口自动化应该如何在用例执行后打印日志到日志目录生成日志文件?

    Pytest可以使用内置的logging模块来实现接口自动化测试用例执行后打印日志到日志目录以生成日志文件。以下是实现步骤: 1、在pytest配置文件(conftest.py)中,定义一个日志输出路径,并设置logging模块。 2、在测试用例中调用logging模块,输入需要生成的日志信息。 3、运行p

    2024年02月10日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包