标签: test-environments

如何处理微服务架构中的共享状态?

在我们公司,我们正在从庞大的单片应用程序转变为微服务架构.这个决定的主要技术驱动因素是需要能够独立扩展服务和开发的可扩展性 - 我们有十个Scrum团队在不同的项目(或"微服务")工作.

过渡进程顺利,我们已经开始受益于这种新技术和组织结构的优势.另一方面,现在我们正在努力解决一个主要问题:如何管理这些微服务之间依赖关系的"状态".

让我们举一个例子:其中一个微服务处理用户和注册.这项服务(我们称之为X)负责维护身份信息,因此是用户'ID'的主要提供者.其余的微服务都非常依赖于这一点.例如,有一些服务负责依赖于这些用户ID的用户配置文件信息(A),用户权限(B),用户组(C)等,因此需要在这些服务之间维护一些数据同步(即服务A不应该具有未在服务X中注册的userId的信息).我们目前通过使用RabbitMQ通知状态更改(例如,新注册)来维持此同步.

可以想象,有许多 X:许多"主要"服务以及它们之间更复杂的依赖关系.

管理不同的开发/测试环境时出现了主要问题.每个团队(以及每个服务)都需要经历多个环境才能实现一些代码:持续集成,团队集成,验收测试和实时环境.

显然,我们需要在所有这些环境中工作的所有服务来检查系统是否整体运行.现在,这意味着为了测试依赖服务(A,B,C,...),我们不仅要依赖服务X,还要依赖服务状态.因此,我们需要以某种方式维护系统完整性并存储全局和连贯状态.

我们当前的方法是从实时环境获取所有数据库的快照,进行一些转换以缩小和保护数据隐私,并在特定环境中进行测试之前将其传播到所有环境.在组织和计算资源方面,这显然是一个巨大的开销:我们有十个持续集成环境,十个集成环境和一个验收测试环境,所有这些都需要使用来自实时和最新版本代码的共享数据进行"刷新"经常.

我们正在努力寻找一种更好的方法来缓解这种痛苦.目前我们正在评估两个选项:

  1. 使用类似docker的容器来处理所有这些服务
  2. 每个服务有两个版本(一个用于开发该服务,另一个用作沙箱,供其他团队在开发和集成测试中使用)

这些解决方案都没有减轻服务之间共享数据的痛苦.我们想知道其他一些公司/开发人员如何解决这个问题,因为我们认为这在微服务架构中必然是常见的.

你们是怎么做到的?你也有这个问题吗?有什么建议?

很抱歉很长的解释,非常感谢!

architecture deployment integration-testing test-environments microservices

19
推荐指数
2
解决办法
5239
查看次数

保持测试和生产服务器环境清洁,同步和一致

我工作的公司似乎总是在努力应对客户的服务器环境.

具体来说,我们几乎总是遇到测试服务器和生产服务器的问题,以及它们似乎总是以不同方式配置的事实.当我们测试我们开发的应用程序时,测试服务器以一种方式运行,因此我们调整和配置我们的应用程序以适应该特定行为.但是当我们在生产服务器上安装相同的应用程序时,我们会发现另一种与测试服务器不一致的行为,从而导致我们的调整和配置无效.最令人沮丧的是,这种情况一直在发生,似乎没有人知道如何处理它.

当然,我们大致了解为什么会发生这种情况.每个克隆环境都是以相同的方式开始,并且在前几天工作相同,但迟早有人只在一个服务器环境中重新配置某些东西(无论是数据库更新,组件库更新,Web文件更新,或其他配置),从而导致差异.随着时间的推移,越来越多的差异逐渐增大.但问题是:我们能做些什么呢?

我试过在网上搜索但是找不到任何关于该做什么的好答案.我也试图自己找出一些解决方案,但我的大部分想法在某些方面似乎都有问题.无论多么严谨,都可以规避新的惯例.定期克隆生产服务器以创建测试服务器是一个繁琐且通常非常缓慢的过程.自动复制并不总是可靠的甚至是可能的.那么我们应该对这个问题做些什么呢?我们如何保证测试时的体验与上线时的体验相匹配?

我想其他人也有这个问题.或者他们呢?也许只是我的特定公司不称职?有没有人遇到过这个问题?如果是这样,你做了什么?

此致

Linus,瑞典系统开发人员

synchronization consistency production-environment test-environments

16
推荐指数
2
解决办法
8893
查看次数

如何改变Laravel 5.1中的环境?

我对Laravel环境工作的理解是,您在不同的环境中拥有不同的环境.因此,如果您在本地运行应用程序,则可以拥有一个.env.local文件.如果您正在测试或正在进行生产,您可以使用.env.testing.env.production.(如果我错了,请纠正我.)
默认情况下,我们获取.env可以编辑的文件.但任何人都可以告诉我在Laravel中改变环境的工作流程是什么.我尝试了文档,但我无法得到它.请帮我.

php environment-variables production-environment test-environments laravel

15
推荐指数
2
解决办法
2万
查看次数

测试和生产环境的最佳实践

在我工作的公司,我们有两个环境:测试和生产.由于成本原因,我们目前没有开始新的环境.

以下是我们遵循的流程:业务部门发布功能请求,开发实现并在测试环境中部署.然后进行业务测试(UAT),如果没问题,该功能将包含在下一个生产部署中.

问题显示在测试DB上.开发人员将测试环境视为他们的游乐场,有时他们将数据库保持在初始状态以进行测试.另一方面,商业人士认为测试数据库必须稳定,不应重置.我们希望解决此问题,并确定测试环境是否应属于开发团队或业务团队.(开发人员不希望企业在测试环境中嗤之以鼻,但业务团队正在为服务器付费.)

什么是环境的最佳实践?你能推荐一篇关于这个的文章吗?

production-environment test-environments

11
推荐指数
3
解决办法
3万
查看次数

如何使用自定义 environment.test.ts 设置运行 Angular 7 单元测试?

如何让 Angular CLI 在 Angular 7 中提供正确的环境/环境*.ts 文件?

我试过在三个不同的地方配置environment.tswith的替换,但environment.test.ts没有成功。

我试过用ng test和运行它ng test --configuration test

每次,如果我调试测试,我都会发现它使用environment.prod.ts(?!) 而不是environment.test.ts.

这是一个屏幕截图,显示了我尝试过的三个地方fileReplacements在此处输入图片说明 这是整个配置供参考:

{
  "$schema": "./node_modules/@angular/cli/lib/config/schema.json",
  "version": 1,
  "newProjectRoot": "projects",
  "projects": {
    "mms": {
      "root": "",
      "sourceRoot": "src",
      "projectType": "application",
      "prefix": "mms",
      "schematics": {},
      "architect": {
        "build": {
          "builder": "@angular-devkit/build-angular:browser",
          "options": {
            "outputPath": "dist/mms",
            "index": "src/index.html",
            "main": "src/main.ts",
            "polyfills": "src/polyfills.ts",
            "tsConfig": "src/tsconfig.app.json",
            "assets": [
              "src/favicon.ico",
              "src/assets",
              "src/web.config"
            ],
            "styles": [
              "src/styles.scss", …
Run Code Online (Sandbox Code Playgroud)

unit-testing command-line-interface test-environments angular

11
推荐指数
1
解决办法
7840
查看次数

如何在 Rails 5 中为测试数据库运行 db:migrate?

我用 postgresql db 创建了一个新的 rails 5 应用程序并修改了 database.yml 文件。我成功地创建了开发和测试数据库,但是在运行迁移时只更新开发数据库,​​测试数据库保持不变。

这是我使用的命令列表:

rails db:create                     # Created both development and test
rails db:migrate                    # Migrated only to development
rails db:migrate RAILS_ENV=test     # Does nothing (no error output)
rake db:migrate RAILS_ENV=test      # Same result as above
Run Code Online (Sandbox Code Playgroud)

我的 database.yml 文件:

default: &default
  adapter: postgresql
  encoding: unicode
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>

development:
  <<: *default
  database: myapp_development
  username: myapp_admin
  password:
  host: localhost
  port: 5432

test:
  <<: *default
  database: myapp_test
  username: myapp_admin
  password:
  host: localhost …
Run Code Online (Sandbox Code Playgroud)

test-environments dbmigrate ruby-on-rails-5

7
推荐指数
1
解决办法
5494
查看次数

如何在Flutter中设置不同的Firebase环境

我试图弄清楚如何在Flutter项目中设置不同的Firebase环境。

我了解如何在Firebase中执行此操作,我创建了两个项目,一个用于生产,一个用于测试。然后,在iOS或Android项目中,我可以使用各种方法使用单独的google-services.jsonGoogleServices-Info.plist文件在这两种环境之间切换。

在扑我发现这个如何独立的环境的描述,但它只是说明如何在扑代码环境区分。

如何在编译时更改iOS和Android构建的环境?仅在构建时允许文件复制挂钩就足够了。

test-environments environments firebase flutter

7
推荐指数
1
解决办法
1359
查看次数

如何减少 tox 文件中的重复

目标:成功执行特定的 tox 命令,并让它为“仅”匹配的特定命令运行。

例子: tox -e py35-integration

tox应该只为 py35-integration 运行,包括默认或独立py35定义。

我尝试了两种不同的方法,据我所知,这是尝试做我想做的事情的两种方法。

  • 请注意,该flake8命令是为了轻松隔离不同的命令并向我指示正在运行的内容。这并不是我真正想要运行的命令的指示。

此外,ini 文件仅显示相关部分。

第一种方法

[tox]
envlist = {py27,py35}, {py27,py35}-integration

[testenv]
commands =
    py27: python -m testtools.run discover
    py35: python -m testtools.run discover
    py27-integration: flake8 {posargs}
    py35-integration: flake8 {posargs}
Run Code Online (Sandbox Code Playgroud)

使用这种方法,这里的理解是我希望在tox -e py27-integration不运行为py27命令定义的内容的情况下运行。这不是正在发生的事情。相反,它将同时运行py27py27-integration

第二种方法

[tox]
envlist = {py27,py35}, {py27,py35}-integration

[testenv]
commands =
    python -m testtools.run discover

[testenv:integration]
commands = 
    flake8 {posargs}
Run Code Online (Sandbox Code Playgroud)

现在,我在这里明确地隔离了一个“子”环境,它有自己的命令来运行“集成”。

但是,不幸的是,我遇到了与正在执行的所有匹配模式“py27”完全相同的行为。 …

python testing test-environments tox

6
推荐指数
1
解决办法
105
查看次数

Firebase 身份验证暂存环境

在使用 Firebase 身份验证时,我在文档中找不到如何设置单独的开发(预生产、暂存等)环境。我不想创建和删除任意用户帐户,也不想在开发或测试时使用我的实时提供商发送电子邮件。那有意义吗?

staging test-environments firebase firebase-authentication

6
推荐指数
0
解决办法
158
查看次数

RequireJS:根据环境加载不同的文件

是否有任何功能可以根据当前项目环境(例如开发或生产)加载不同的文件?我的意思是,这有助于我透明地加载缩小或完整的文件.我读到了关于多版本加载的内容,但是多版本化意味着我需要指定文件的版本.
例如,我的模块有module.js文件.在这个文件中我需要加载jQuery:

require(['jquery]);
Run Code Online (Sandbox Code Playgroud)

但我有jQuery的缩小版和完整版,我想加载不同的文件.我在配置中考虑这样的事情:

   require.config({
        paths: {
            'jquery' : function(){
                if( MODE == 'DEV' ){
                    return 'jquery';
                }else{
                    return 'jquery.min'
                }
            }
        }
    });
Run Code Online (Sandbox Code Playgroud)

或者,也许,类似的东西.

javascript test-environments requirejs

5
推荐指数
1
解决办法
2531
查看次数