如何使用RESTAPI测试对多个微服务进行版本控制/标记testframework?

如何使用RESTAPI测试对多个微服务进行版本控制/标记testframework?,rest,testing,microservices,versioning,tagging,Rest,Testing,Microservices,Versioning,Tagging,我们有很多不同的微服务,我们测试这些不同微服务的其他API。这些自动化REST API测试不包括在Microservice项目/Repo中。相反,我们有一个包含所有不同测试的testautomation项目,比如API测试和end2end测试,因为我们希望将所有测试都作为一个黑盒进行测试 现在的问题是,可以在测试环境中测试无限多个不同微服务版本的组合(示例:今天针对版本1.0的微服务A和版本2.0的微服务B执行测试与明天针对版本1.1的微服务A和版本2.1的微服务B执行相同的测试不同)因此,我们

我们有很多不同的微服务,我们测试这些不同微服务的其他API。这些自动化REST API测试不包括在Microservice项目/Repo中。相反,我们有一个包含所有不同测试的testautomation项目,比如API测试和end2end测试,因为我们希望将所有测试都作为一个黑盒进行测试

现在的问题是,可以在测试环境中测试无限多个不同微服务版本的组合(示例:今天针对版本1.0的微服务A和版本2.0的微服务B执行测试与明天针对版本1.1的微服务A和版本2.1的微服务B执行相同的测试不同)因此,我们需要对我们的testautomation项目或执行的测试进行某种版本控制或标记,以便我们能够识别不同微服务版本的哪些组合是有效的,哪些组合是无效的/工作的,因为例如,一些测试将失败


对于实现和集成这样的版本控制/标记机制,有什么建议或经验吗?

对我来说,实际的问题已经建立在您的实际设计基础上。您声明您维护了一些基于REST体系结构的微服务,尽管在这样的环境中,您不需要将任何端点版本化为Fielding自己回答了REST环境中的API应该如何版本化,只需回答:

但这是为什么呢?剩下的几个限制之一是HATEOAS(或者像我说的那样恨我们)它代表作为应用程序状态引擎的超文本。这个首字母缩略词基本上只是描述了Web中使用的交互模型,它不会预先消费要接收的内容,只向用户呈现它接收到的内容,包括服务器返回的任何URI。浏览器会在调用用户调用的URI指向的数据点。这可能是链接、图像或表单按钮(或其他)。这里的核心思想是,API或服务器将为客户端提供采取进一步操作所需的所有信息,并将结果显示给用户

浏览首选制造商或供应商的网页时,您可能会注意到,您很可能会收到一个包含图像、链接和其他内容的HTML页面。浏览器本身不知道该网站上提供的产品,但它能够向用户呈现结果,因为它知道如何呈现HTML。如果您访问无论页面提供的内容如何,浏览器仍可以呈现HTML的其他页面。但是,如果其中一个页面以某种方式发生更改,则浏览器仍可以向您呈现结果,除非服务器响应的媒体类型是您的浏览器尚不知道的,这在Web上是不太可能的

最自诩的“休息”是什么然而,API返回是特定于某个API的一些任意内容,即使其中大多数使用
application/json
作为表示格式。一个定制的客户机,对内置API有一定的了解,通常与这样一个API交互,但不太可能与外部的任何其他API交互因此,如果API级别上的某些内容发生更改,则在不进行任何额外更新的情况下破坏该客户端的可能性很高。这在类似RPC的系统(如SOAP、RMI和CORBA)中非常常见

这类客户端通常假定某些端点(如
/api/users/12345
)以最可能的JSON表示形式返回关于特定用户的数据。负载稍后被编组到基础编程语言的对象,可能会忽略任何未知字段,并将指定字段中不可用的字段置零虽然这里的根本问题是客户认为“聪明”开发人员现在将对端点引入版本控制,以便上述URI将更改为
/api/v1/users/12345
,用于包含旧字段的JSON表示,而
/api/v2/users/12345
将返回新字段。但是,两个版本仍然描述同一用户。sam具有两个不同的URIe user本身已经是一个糟糕的设计,尽管通常端点的版本控制并不是唯一的。通常整个API本身都是版本控制的,因此,如果您遇到突破性的更改,您将被迫引入一个全新的API版本,要么复制其他未修改的资源,要么在内部进一步重用相同的模型再次在多个URI下操作

客户端和服务器应该协商内容,而不是假设端点返回具有预定义表示格式的特定类型。这里的HTTP特别支持客户端通知服务器其功能,服务器应该以客户端理解的表示格式响应。这可能是例如
application/vnd.acmee用户+json
application/vcard+xml
或诸如此类。理解
application/vnd.acmee用户.v2+json
的客户机可能会得到服务器的新表示,而老客户机仍会通知服务器他们只理解
application/vnd.acmee用户+json
并由这样的表示提供服务。客户端对服务器如何在内部处理更改不感兴趣。它只对它可以处理的表示格式感兴趣

尽管版本控制媒体类型也不是某些架构师的首选版本控制更改方式,因为您基本上仍然使用稍有不同的语法或稍有不同的语义来描述相同的内容。HTML即仍然随
application/HTML
(很少随
text/HTML