Python 中的黑盒测试器

简介: Python 中的黑盒测试器

问题简介

想象一下这样的情况:你(一个 Python 开发人员)开始了一份新工作或加入一个新项目,你被告知文档不是最新的,甚至不存在,而那些编写代码的人很久以前就辞职了。此外,代码是用您不熟悉的语言(或“您不知道的”)编写的。你打开代码,开始检查它,发现也没有测试。此外,该服务已经在 Prod 上工作了很长时间,以至于您害怕更改某些内容。

我不是在谈论任何特定的项目或公司。我至少经历过三次。

黑盒子

好吧,你有一个黑匣子,它有 API 方法(从代码判断),你知道它会拉取一些东西并写入数据库。还有接收请求的服务的文档。

image.png

优点包括它从那里开始,它拉取的 API 上有文档,并且服务代码非常可读。至于缺点,它想通过API获得一些东西。有些东西可以在容器中运行,有些东西可以在开发人员环境中使用,但不是所有的东西。

另一个问题是,对黑匣子的请求以及从黑匣子到其他一些服务的请求都是加密和签名的。

同时,您需要更改此服务中的某些内容,而不是破坏正在工作的内容。

在这种情况下,Postman 或 cURL 使用起来很不方便。您需要在每种特定情况下准备每个请求,因为存在动态输入数据和签名,具体取决于请求的时间。

几乎没有现成的测试,如果你不太了解这门语言,就很难写出来。

市场提供的解决方案允许您在此类服务中运行测试。但是,我从未使用过它们,因此尝试理解它们会比创建自己的解决方案更加困难,并且花费更多的时间。

创建的解决方案

我想出了一个简单方便的选择。我用 Python 编写了一个简单的脚本来拉动这个应用程序。

我使用了请求和一个简单的签名,这是我为预先准备的请求快速创建的。

接下来,我需要模拟后端。

第一选择

为此,我刚刚在 Python 中运行了一个模拟服务。就我而言,Django 被证明是最快、最简单的工具。

我决定尽可能简单快速地实现所有内容,并使用最新版本的 Django。结果相当不错,但这只是一种方法,尽管我想节省时间,但我还是花了几个小时才使用。有几十种这样的方法。

image.png

配置文件示例

最后,我摆脱了所有不需要的东西,只是简单地生成了带有请求和响应的 JSON。我描述了应用程序前端的每个请求、向其发送请求的服务的预期响应,以及检查对主请求的响应的规则。

对于每种方法,我都编写了一个单独的 URL。

但是,手动将一种方法的响应从正确更改为不正确,反之亦然,然后拉动每种方法既困难又耗时。

JSON的

1
{
2
  "id": 308,
3
  "front": {
4
    "method": "/method1",
5
    "request": {
6
      "method": "POST",
7
      "data": {
8
        "from_date": "dfsdsf",
9
        "some_type": "dfsdsf",
10
        "goods": [
11
          {
12
            "price": "112323",
13
            "name": "123123",
14
            "quantity": 1
15
          }
16
        ],
17
        "total_amount": "2113213"
18
      }
19
    },
20
    "response": {
21
      "code": 200,
22
      "body": {
23
        "status": "OK",
24
        "data": {
25
          "uniq_id": "sdfsdfsdf",
26
          "data": [
27
            {
28
              "number": "12223",
29
              "order_id": "12223",
30
              "status": "active",
31
              "code": "12223",
32
              "url": "12223",
33
              "op_id": "12223"
34
            }
35
          ]
36
        }
37
      }
38
    }
39
  },
40
  "backend": {
41
    "response": {
42
      "code": 200,
43
      "method": "POST",
44
      "data": {
45
        "body": {
46
          "status": 1,
47
          "data": {
48
            "uniq_id": "sdfsdfsdf",
49
            "data": [
50
              {
51
                "number": "12223",
52
                "order_id": "12223",
53
                "status": "active",
54
                "code": "12223",
55
                "url": "12223",
56
                "op_id": "12223"
57
              }
58
            ]
59
          }
60
        }
61
      }
62
    }
63
  }
64
}

第二种选择

然后,我将模拟对象链接到脚本。结果,似乎有一个脚本调用来拉取我的应用程序,并且有一个模拟对象响应其所有请求。脚本保存所选请求的 ID,mock 对象会根据此 ID 生成响应。

image.png

因此,我收集了不同选项中的所有请求:正确和错误。

我得到了什么

结果,我得到了一个简单的视图,所有 URL 都有一个函数。此函数采用特定的请求标识符,并基于该标识符查找响应规则 — 模拟对象。同时,在请求之前拉取服务的脚本会将此请求标识符写入存储。

这个脚本只是轮流处理每个案例,写入一个标识符,并发出正确的请求,然后检查响应是否正确,仅此而已。

image.png

中间连接

但是,我不仅需要生成对这些请求的响应,还需要测试模拟对象的请求。毕竟,该服务可能会发送不正确的请求,因此也有必要检查它们。结果,有大量的配置文件,我的几个 API 方法变成了数百个大型配置文件进行检查。

连接数据库

我决定将所有内容都转移到数据库中。

我的服务不仅开始写入控制台,还开始写入数据库,以便可以生成报告。这似乎更方便:每个案例在数据库中都有自己的条目。

案例被合并到项目中,并具有允许您禁用不相关选项的标志。在设置中,我添加了请求和响应修饰符,这些修饰符应应用于所有级别的每个请求和响应。

为了尽可能简化这一点,我使用了SQLite。Django 默认拥有它。我已将所有配置文件传输到数据库中,并将所有测试结果保存在其中。

算法

因此,我找到了一个非常简单灵活的解决方案。它已经可以作为三个微服务的外部集成测试,但我是唯一一个使用它的人。它当然不会覆盖单元测试,但它很好地补充了它们。当我需要验证服务时,我使用这个 Django 测试器来执行此操作。

配置文件示例

设置变得更简单,并使用 Django Admin 进行管理。我可以轻松地关闭它们、更改和观看历史记录。我可以走得更远,制作一个完整的 UI,但这对我来说已经绰绰有余了。

请求正文 JSON

JSON的

1
{
2
  "from_date": "dfsdsf",
3
  "some_type": "dfsdsf",
4
  "goods": [
5
    {
6
      "price": "112323",
7
      "name": "123123",
8
      "quantity": 1
9
    }
10
  ],
11
  "total_amount": "2113213"
12
}

响应正文 JSON

JSON的

1
{
2
  "uniq_id": "sdfsdfsdf",
3
  "data": [
4
    {
5
      "number": "12223",
6
      "order_id": "12223",
7
      "status": "active",
8
      "code": "12223",
9
      "url": "12223",
10
      "op_id": "12223"
11
    }
12
  ]
13
}

后端响应正文 JSON

JSON的

1
{
2
  "status": 1,
3
  "data": {
4
    "uniq_id": "sdfsdfsdf",
5
    "data": [
6
      {
7
        "number": "12223",
8
        "order_id": "12223",
9
        "status": "active",
10
        "code": "12223",
11
        "url": "12223",
12
        "op_id": "12223"
13
      }
14
    ]
15
  }
16
}

它给你什么

这项服务在哪些方面有用?有时,即使进行测试,也需要从外部拉取服务,或者从链中拉取多个服务。服务也可以是黑匣子。数据库可以在 Docker 中运行。至于API...API 也可以在 Docker 中运行。您需要设置主机、端口和配置文件并运行它。

为什么选择这种不寻常的解决方案?

有人可能会说,您可以使用第三方工具集成测试或其他一些测试。当然可以!但是,由于资源有限,通常没有时间应用所有这些,需要快速有效的解决方案。这里出现了满足所有要求的最简单的 Django 服务。


目录
相关文章
|
1月前
|
Web App开发 前端开发 JavaScript
探索Python科学计算的边界:利用Selenium进行Web应用性能测试与优化
【10月更文挑战第6天】随着互联网技术的发展,Web应用程序已经成为人们日常生活和工作中不可或缺的一部分。这些应用不仅需要提供丰富的功能,还必须具备良好的性能表现以保证用户体验。性能测试是确保Web应用能够快速响应用户请求并处理大量并发访问的关键步骤之一。本文将探讨如何使用Python结合Selenium来进行Web应用的性能测试,并通过实际代码示例展示如何识别瓶颈及优化应用。
104 5
|
1月前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
【10月更文挑战第1天】Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
131 3
|
2月前
|
测试技术 数据库 UED
Python 性能测试进阶之路:JMeter 与 Locust 的强强联合,解锁性能极限
【9月更文挑战第9天】在数字化时代,确保软件系统在高并发场景下的稳定性至关重要。Python 为此提供了丰富的性能测试工具,如 JMeter 和 Locust。JMeter 可模拟复杂请求场景,而 Locust 则能更灵活地模拟真实用户行为。结合两者优势,可全面评估系统性能并优化瓶颈。例如,在电商网站促销期间,通过 JMeter 模拟大量登录请求并用 Locust 模拟用户浏览和购物行为,可有效识别并解决性能问题,从而提升系统稳定性和用户体验。这种组合为性能测试开辟了新道路,助力应对复杂挑战。
111 2
|
13天前
|
Java 测试技术 持续交付
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
本文重点讲解如何搭建App自动化测试框架的思路,而非完整源码。主要内容包括实现目的、框架设计、环境依赖和框架的主要组成部分。适用于初学者,旨在帮助其快速掌握App自动化测试的基本技能。文中详细介绍了从需求分析到技术栈选择,再到具体模块的封装与实现,包括登录、截图、日志、测试报告和邮件服务等。同时提供了运行效果的展示,便于理解和实践。
51 4
【入门思路】基于Python+Unittest+Appium+Excel+BeautifulReport的App/移动端UI自动化测试框架搭建思路
|
16天前
|
测试技术 持续交付 Apache
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
Python性能测试新风尚:JMeter遇上Locust,性能分析不再难🧐
42 3
|
15天前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
31 1
|
14天前
|
Web App开发 测试技术 数据安全/隐私保护
自动化测试的魔法:使用Python进行Web应用测试
【10月更文挑战第32天】本文将带你走进自动化测试的世界,通过Python和Selenium库的力量,展示如何轻松对Web应用进行自动化测试。我们将一起探索编写简单而强大的测试脚本的秘诀,并理解如何利用这些脚本来确保我们的软件质量。无论你是测试新手还是希望提升自动化测试技能的开发者,这篇文章都将为你打开一扇门,让你看到自动化测试不仅可行,而且充满乐趣。
|
1月前
|
缓存 测试技术 Apache
告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
【10月更文挑战第1天】告别卡顿!Python性能测试实战教程,JMeter&Locust带你秒懂性能优化💡
61 4
|
2月前
|
SQL JavaScript 前端开发
基于Python访问Hive的pytest测试代码实现
根据《用Java、Python来开发Hive应用》一文,建立了使用Python、来开发Hive应用的方法,产生的代码如下
70 6
基于Python访问Hive的pytest测试代码实现
|
1月前
|
测试技术 数据安全/隐私保护 开发者
自动化测试的奥秘:如何用Selenium和Python提升软件质量
【9月更文挑战第35天】在软件开发的海洋中,自动化测试是那艘能引领我们穿越波涛的帆船。本文将揭开自动化测试的神秘面纱,以Selenium和Python为工具,展示如何构建一个简单而强大的自动化测试框架。我们将从基础出发,逐步深入到高级应用,让读者能够理解并实现自动化测试脚本,从而提升软件的质量与可靠性。