例如: 有这么一个场景
A 版本提测, 域名 banana.cc.com 1.1.1.1
B 版本提测,域名 banana.cc.com 2.2.2.2
这样一来如果是在同一个服务器上面运行的话, 就要排队, 不能同时执行
我的想法是直接通过 IP 来访问(不考虑多服务器的情况下), 如果是通过域名切换 host 方式的话, 没办法做到同一个服务器上同时运行二个版本,必须要等跑完一个再执行一个
通过 IP 直接访问就是可能会一个问题,例如当前服务依赖其他服务的话不知道会不会出现什么问题?
A 版本提测, 域名 banana.cc.com 1.1.1.1
B 版本提测,域名 banana.cc.com 2.2.2.2
这样一来如果是在同一个服务器上面运行的话, 就要排队, 不能同时执行
我的想法是直接通过 IP 来访问(不考虑多服务器的情况下), 如果是通过域名切换 host 方式的话, 没办法做到同一个服务器上同时运行二个版本,必须要等跑完一个再执行一个
通过 IP 直接访问就是可能会一个问题,例如当前服务依赖其他服务的话不知道会不会出现什么问题?
10F
有个点不大理解,为何必须要绑定域名这个东西?是有什么特殊需要吗?
本来域名就是为了避免 ip 难记所以才弄的。如果既要有域名,又要有 ip ,何不直接用 ip ?
我们目前做法是,框架提供一个环境名称配置项,可以根据这个配置项的值调整,选用不同环境的配置文件,配置文件里再具体写这个环境里各个服务的地址信息。这样启动命令里面给不同的环境名称,就可以切换不同环境了。为了方便不改代码加配置,也支持通过环境变量或者直接写具体配置项名称,覆盖配置文件里面的值。
spring boot config 在这方面可以说是做到了极致,支持 17 种配置方式,甚至还支持配置的继承,推荐看下:https://docs.spring.io/spring-boot/docs/current/reference/html/boot-features-external-config.html
9F
其实我就是想知道,同一套代码,一台机器,怎么做到区分多个环境同时执行,目前我用的是切换 host 方式,那自然是 A 任务在运行时, B 任务因为环境不同(B 任务域名和 A 任务域名一样,但 IP 不一样)就要等 A 完了才能执行,目前想到的就是只能通过 IP 隔离
8F
蒽 ,你看我 #7 的回复,准确来说是代码没有做到环境隔离吧,直接用 IP 请求不用域名不知道会不会出问题
7F
您好, 工具采用的是 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 可能有很多几十个, 不知道还有没有其他的更好的方法
6F
这有啥影响的? 难道是测试数据的问题?
5F
看不懂你的问题,到底是在一台机器上不能同时部署两套被测试的系统导致测试排队,还是测试代码不支持同时测在一台机器上的两套被测系统。
4F
直接脚本配置里配置被测应用以及其依赖应用的 ip ,会有什么困难?或者说你用的是哪个接口测试工具,分享下,大家说不定可以告诉你对应的方案?
用 host ,作用域都是整个服务器,所以会出问题。但如果是脚本里配置,那作用域就只有单次执行的进程,可以做到相互独立。
3F
不用排队啊,你启动测试的时候传一个环境的变量进去,然后根据这个变量切换对应的 IP 就可以了啊
2F
这种做法我也试过, 目前是没发现有什么问题, 只是不清楚这种方式会带来什么影响?
既然是自动化,如果出现环境要排队的情况,总感觉有点浪费时间
1F
前两天刚好看了个这方面的帖子
https://www.cnblogs.com/toops/p/8228133.html