测试以确保NGINX路由的一致性

时间:2019-01-28 12:12:21

标签: regex unit-testing docker nginx testing

我们正在从一个单一的站点迁移到一个相当标准的前端/后端体系结构,并且我们正在逐步进行。因此,NGINX conf中的路由非常复杂。当我们将新服务从旧系统迁移到新系统时,我们需要重定向路由,但是鉴于我们有成千上万个生成的url,这并不总是容易推论的。

以房间和登陆页面为例(但是我们有很多这样的冲突)

nginx-frontend.conf

  # landing pages - to (eg) match /meeting-rooms/paris-2e-arrondissment
    location ~* "^/([\p{L}\p{N}-]+)/([\p{L}\p{L}-]+)/?$" {
    proxy_pass http://new:3000;
  }

  # rooms - to (eg) match /rooms/12345
    location ~* "^/rooms/([\p{N}]+)/?$" {
    proxy_pass http://old:3000;
  }

老鹰眼会注意到,第一条路线(着陆页)也与/rooms/12345相匹配,这是意外的并会导致错误。捕获旧版CSS(/css/bobbins.js)和其他各种各样的东西也有类似的问题。

新旧服务然后在内部执行自己的路由以生成正确的数据。在旧服务器上,我们还有各种各样的遗留路由,这使得关闭其相应的路由同样危险/令人沮丧。

我想做的是列出带有预期服务的路由列表,并将其作为某种测试编写(不要在意哪种语言-python,node.js或php更可取,但我将采用一种新的语言。沿着这些行(伪代码)

[
  { 
     test: ['/rooms/12345/', '/rooms/12346', ...],
     expect: service.to.be(old)
  },
  {
     test: ['/meeting-rooms/paris-2e-arrondissment/', '/meeting-rooms/london', ...],
     expect: service.to.be(new)
  }
]

然后,当我们更改路线时,可以确定我们没有偶然引入问题

我们正在使用docker,而且我知道我可能必须构建一个完整的解决方案,而不是期望获得快速的代码行。

是否有实现此目标的标准方法,或者可以使用的服务?否则,我们将不胜感激地收到潜在解决方案的概述。

0 个答案:

没有答案