#proxy #end-to-end #testing-tools #run-command

app testproxy

代理服务器端到端测试工具

5个版本

使用旧的Rust 2015

0.0.5 2022年12月24日
0.0.4 2021年9月25日
0.0.3 2020年6月21日
0.0.2 2020年4月3日
0.0.1 2019年8月30日

#797 in 测试

24 每月下载次数

GPL-3.0 许可证

135KB
2K SLoC

TestProxy - 代理服务器端到端测试工具

Version Build Status

版权所有 (C) 2019-2022, Soner Tari. https://github.com/sonertari/TestProxy

概述

TestProxy旨在用于对任何程序进行端到端测试,例如运行在客户端和服务器之间的代理服务器,并通过网络数据包与它们通信。

代理服务器从客户端接受连接,并在客户端和另一侧的服务器之间传输数据包(它可能修改或可能不修改传输的数据包)。因此,TestProxy充当客户端和服务器以模拟此环境。它启动一个管理线程以运行测试,然后管理线程为每个测试启动一个客户端和服务器线程。管理器向这些客户端/服务器对发送命令以执行它启动的测试。

SSLproxy项目中使用TestProxy进行端到端测试。要了解如何使用TestProxy,请参阅SSLproxy源代码中的testproxy测试集。

Operation Diagram

TestProxy 测试步骤由测试端、命令和有效负载组成。例如,一个测试可以使用send命令,并带有以下有效负载来指示客户端向被测试的代理服务器发送HTTP请求:GET / HTTP/1.1\r\nHost: example.com\r\n\r\n。该测试的下一步可以指示配对服务器使用recv命令接收来自代理的相同HTTP请求,假设代理不会修改有效负载。这些发送和接收步骤称为状态,并按照编号顺序执行,如下所示。

"states": {
  "1": {
    "testend": "client",
    "cmd": "send",
    "payload": "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n"
  },
  "2": {
    "testend": "server",
    "cmd": "recv",
    "payload": "GET / HTTP/1.1\r\nHost: example.com\r\n\r\n",
  }
}

如果这两个命令都成功,则该测试成功,但如果任一命令失败或接收到的有效负载与recv命令的预期有效负载不匹配,则测试失败。此类测试可能还包含断言。有关可能的断言的更多信息,请参阅源代码中examples文件夹下的示例测试。

此类测试可以保存为JSON文件以形成测试集。测试集的协议和测试端在文件的开始处配置。可以使用多个配置执行测试集。例如,以下测试集指定了两个配置,这意味着测试集中的测试将执行两次,一次对应每个配置。请注意,第一个配置是用于TCP的,第二个是用于SSL测试的,并且每个配置中的客户端和服务器端口都不同。被测试的代理服务器应该已经配置为接受这些客户端端口的连接并将数据包转发到这些服务器端口。

"comment": "Tests for HTTP request/response",
"configs": {
  "1": {
    "proto": {
      "proto": "tcp"
    },
    "client": {
      "ip": "127.0.0.1",
      "port": "8181"
    },
    "server": {
      "ip": "127.0.0.1",
      "port": "9181"
    }
  },
  "2": {
    "proto": {
      "proto": "ssl",
      "crt": "server.crt",
      "key": "server.key"
    },
    "client": {
      "ip": "127.0.0.1",
      "port": "8444"
    },
    "server": {
      "ip": "127.0.0.1",
      "port": "9444"
    }
  }
},
"tests": {
  "1": {
    "comment": "Sends an HTTP request",
    "states": {
      ...
    }
  },
  "2": {
    "comment": "Receives an HTTP response",
    "states": {
      ...
    }
  }
}

此外,此类测试集可以打包成测试工具包。例如,一个示例测试工具包可能如下所示:

{
  "comment": "Proxy end-to-end tests",
  "testharnesses": {
    "1": {
      "comment": "HTTP tests",
      "testsets": {
        "1": "http_testset_1.json",
        "2": "http_testset_2.json"
      }
    }
  }
}

一个或多个测试工具包可以保存到JSON文件中。这是使用-f选项启动testproxy可执行文件时应使用的文件。例如,以下是在使用testharness.json文件和3级调试级别(默认值,但TestProxy还可以生成详细的调试日志和非常冗长的跟踪日志)启动testproxy时的输出截图。

Sample Output

总之,主要测试工具包文件可能由多个测试工具包组成。测试工具包可以分成多个测试集,这些测试集可能由测试集文件中定义的测试组成。每个测试可以包含多个称为状态的步骤,并且可以包含断言。

TestProxy 运行多线程。测试工具包顺序执行,从第一个开始,但TestProxy为测试工具包中的每个测试集启动一个管理线程。管理线程在其测试集中顺序运行测试,但为测试集中的每个测试启动一个客户端和服务器线程。管理线程通过消息通道与这些客户端和服务器线程通信,并期望返回执行结果。

TestProxy 目前支持TCP和SSL协议。

许可证

TestProxy 在GPLv3许可证下提供。

依赖项

~8–21MB
~307K SLoC