大家在做接口自动化时,怎么做到同一个服务器下同时运行多个环境的?

random
random
random
订阅者
10318
文章
0
粉丝
测试交流19222字数 172阅读0分34秒阅读模式
例如: 有这么一个场景

A 版本提测, 域名 banana.cc.com 1.1.1.1
B 版本提测,域名 banana.cc.com 2.2.2.2
这样一来如果是在同一个服务器上面运行的话, 就要排队, 不能同时执行

我的想法是直接通过 IP 来访问(不考虑多服务器的情况下), 如果是通过域名切换 host 方式的话, 没办法做到同一个服务器上同时运行二个版本,必须要等跑完一个再执行一个

通过 IP 直接访问就是可能会一个问题,例如当前服务依赖其他服务的话不知道会不会出现什么问题?

 
评论  19  访客  19
    • 陈恒捷
      陈恒捷 9

      有个点不大理解,为何必须要绑定域名这个东西?是有什么特殊需要吗?

      本来域名就是为了避免 ip 难记所以才弄的。如果既要有域名,又要有 ip ,何不直接用 ip ?

      我们目前做法是,框架提供一个环境名称配置项,可以根据这个配置项的值调整,选用不同环境的配置文件,配置文件里再具体写这个环境里各个服务的地址信息。这样启动命令里面给不同的环境名称,就可以切换不同环境了。为了方便不改代码加配置,也支持通过环境变量或者直接写具体配置项名称,覆盖配置文件里面的值。

      spring boot config 在这方面可以说是做到了极致,支持 17 种配置方式,甚至还支持配置的继承,推荐看下:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html

      • 冷月醉夕阳
        冷月醉夕阳 9

        其实我就是想知道,同一套代码,一台机器,怎么做到区分多个环境同时执行,目前我用的是切换 host 方式,那自然是 A 任务在运行时, B 任务因为环境不同(B 任务域名和 A 任务域名一样,但 IP 不一样)就要等 A 完了才能执行,目前想到的就是只能通过 IP 隔离

        • 冷月醉夕阳
          冷月醉夕阳 9

          蒽 ,你看我 #7 的回复,准确来说是代码没有做到环境隔离吧,直接用 IP 请求不用域名不知道会不会出问题

          • 冷月醉夕阳
            冷月醉夕阳 9

            您好, 工具采用的是 python+requests 库自己二次封装,你说到重点了,我目前能想到的就是利用 requests 的 dns 解释,例如:
            def dns_resolve(env, domain): # 域名解析函数,解析成功IP将追加到iplist
            try:
            hosts = {
            “A”: { # A环境
            “banana.cc.com”: ‘11.112.1.1’
            } ,
            “B”:{ # B环境
            “banana.cc.com”: ‘12.11.10.28’
            }
            }
            if domain in hosts:
            return hosts[env][domain]
            except Exception as e:
            print(“dns resolver error. %s” % e)
            return

            调用:
            r = requests.request(‘post’, ‘https://’ + dns_resolve(“A”, domain) + _url, data=body, headers=headers(), verify=False)

            这样我就可以不需要配置 host 了,直接通过进程来隔离了,有时 host 可能有很多几十个, 不知道还有没有其他的更好的方法

            • 徐汪成
              徐汪成 9

              这有啥影响的? 难道是测试数据的问题?

              • hellohell
                hellohell 9

                看不懂你的问题,到底是在一台机器上不能同时部署两套被测试的系统导致测试排队,还是测试代码不支持同时测在一台机器上的两套被测系统。

                • 陈恒捷
                  陈恒捷 9

                  直接脚本配置里配置被测应用以及其依赖应用的 ip ,会有什么困难?或者说你用的是哪个接口测试工具,分享下,大家说不定可以告诉你对应的方案?

                  用 host ,作用域都是整个服务器,所以会出问题。但如果是脚本里配置,那作用域就只有单次执行的进程,可以做到相互独立。

                  • Ark
                    Ark 9

                    不用排队啊,你启动测试的时候传一个环境的变量进去,然后根据这个变量切换对应的 IP 就可以了啊

                    • 冷月醉夕阳
                      冷月醉夕阳 9

                      这种做法我也试过, 目前是没发现有什么问题, 只是不清楚这种方式会带来什么影响?

                      既然是自动化,如果出现环境要排队的情况,总感觉有点浪费时间

                      • Ark
                        Ark 9

                        前两天刚好看了个这方面的帖子
                        https://www.cnblogs.com/toops/p/8228133.html

                      匿名

                      发表评论

                      匿名网友
                      确定

                      拖动滑块以完成验证