写点什么

云计算自动化测试系统环境自动识别实现方案

作者:李开亮
  • 2023-11-17
    浙江
  • 本文字数:2156 字

    阅读完需:约 7 分钟

云计算自动化测试系统环境自动识别实现方案

背景描述

为了满足云计算的弹性和高可用性,往往会在不同 Region(区域)或 Availability Zone(可用区)部署多套集群。因此在云计算自动化测试中,测试环境的自动识别非常重要。测试环境是指用于执行自动化测试的硬件、软件和网络配置等。测试环境的自动识别可以帮助团队准确地确定可用的资源和配置,并快速部署测试环境。

自动化测试项目在环境管理方面通常会存在以下两种问题

  1. 安全问题:通常因为配置文件以明文形式存储在自动化测试项目中,并托管在 GitLab、girret 等仓库。该配置文件包含了所有云计算集群的信息,因此一旦代码泄露,可能导致云环境集群遭受攻击。为了提高安全性,应考虑采取更加安全的方式来存储和管理云计算集群的配置信息。

  2. 测试环境配置和部署问题:自动化测试流程需要用户根据当前集群信息进行手动配置和部署。这种半自动化的方式降低了测试效率和易用性。为了提高流程的效率和用户体验,应考虑实现自动化配置和部署的解决方案,使得测试可以在一键式执行中自动适应当前的集群信息。

方案调研

  • 方案一:解耦测试环境配置和测试代码的依赖关系,通过动态加载被测系统环境变量的方式实现测试环境自动识别。

  • 方案二:采用安全的配置管理和存储方案,例如使用加密技术来保护配置文件中的敏感信息,并将其存储在安全的存储系统中,如密码管理工具或加密存储。

  • 方案三:建立集中化的测试环境管理平台,该平台可以集成云计算集群的信息,并提供用户友好的界面和 API,实现自动化的环境配置和管理。用户可以通过该平台进行环境选择、配置项设置和部署操作,以实现一键式的测试环境准备。

  • 方案四:实施访问控制和权限管理措施,确保只有授权的人员能够访问和修改测试环境的配置信息。通过细粒度的权限控制,限制对敏感配置信息的访问,降低潜在的安全风险。

其中,方案一通过解耦测试环境配置和测试代码可以提高代码的可移植性和复用性,使得测试环境的配置更加灵活和可扩展。动态加载环境变量可以实现测试环境的自动识别,减少手动配置的工作量。这种方案可能需要对测试代码进行修改,以适应动态加载环境变量的方式。方案二采用安全的配置管理和存储方案,但是实施安全配置管理和存储需要额外的开发和维护工作。方案三建立集中化的测试环境管理平台需要一定的开发和维护工作,杀鸡焉用牛刀。方案四适用于强化测试环境安全性的场景。

综合四种方案的优劣势,考虑结合方案一和方案四,解耦测试环境配置和测试代码同时加强访问控制和权限管理,限制对测试环境配置信息的访问和修改。

解决方案

技术栈

  • Django

  • pytest

  • envparse

实现方案

通过使用 Django 的 settings 配置,可以优化测试项目中与环境配置相关信息。这种方案改变了环境变量的注入方式,允许动态加载变量,不必修改测试代码本身的逻辑。避免将配置信息硬编码在测试代码中会导致代码的不灵活性和可维护性下降。通过使用 Django 的 settings 配置,可以将配置信息从代码中分离出来,使其更易于管理和修改。

在 Django 中,可以通过动态加载变量来修改 settings 中的配置项。一种常见的方法是使用 envparse 库,该库可用于将环境变量解析为 Python 对象。

实践案例

下面是一个简单的示例,在其中使用 envparse 将环境变量加载到 Django settings 中:

  1. 安装 envparse 库:pip install envparse

  2. 在 Django 项目的 settings 中导入 envparse

  3. settings 中定义需要从环境变量中加载的变量和默认值:

   zookeeper_servers=env.str('zookeeper_servers')   keystone_server=env.str('keystone_server')   keystone_admin_name=env.str('keystone_admin_name')   keystone_admin_password=env.str('keystone_admin_password')   keystone_admin_tenant=env.str('keystone_admin_tenant')   server=env.str('server')   auth_tenant=env.str('auth_tenant')   user=env.str('user')   password=env.str('password')   az=env.str('az')   key_filename=env.str('key_filename')   ssh_port=env.int('ssh_port', default=22),   username=env.str('username')   emu_server=env.str('emu_server')
复制代码

在上面的代码中,我们使用了 env.str()env.int() 方法来加载字符串和整数类型的环境变量。这些方法接受两个参数:要加载的环境变量的名称和默认值(如果环境变量不存在时使用的值)。

  1. 启动 Django 项目之前,确保已设置了相应的环境变量。例如,在 Linux 或 macOS 系统上,可以使用以下命令设置环境变量

   export zookeeper_servers=xxx   export keystone_server=xxx   export keystone_admin_name=xxx   export keystone_admin_password=xxx   export keystone_admin_tenant=xxx   export server=xxx   export auth_tenant=xxx   export user=xxx   export password=xxx   export az=xxx   export key_filename=xxx   export ssh_port=xxx   export username=xxx   export emu_server=xxx
复制代码

在生产环境中可以考虑将每个集群的环境变量放置在.bashrc文件中,这样当用户登录并执行测试用例时,测试服务即可自动索引并加载系统环境变量。

  1. 启动 Django 项目,变量就会被动态加载到 settings 中。

在这个示例中,我们使用了 envparse 库来解析环境变量并将其加载到 Django settings 中。通过这种方式,我们可以在不修改 settings 文件的情况下修改配置项,并且可以轻松地在不同环境之间切换配置。


发布于: 刚刚阅读数: 5
用户头像

李开亮

关注

脚踏实地,仰望星空 2020-06-22 加入

还未添加个人简介

评论

发布
暂无评论
云计算自动化测试系统环境自动识别实现方案_云计算_李开亮_InfoQ写作社区