TIL: Testcontainers에서 호스트에 연결
4857 단어 todayilearnedjavakotlintesting
TL;DR: Testcontainers allows you to expose a host's port to containers using
Testcontainers.exposeHostPorts(localServerPort);
.
짧은 알림: 석사 논문의 경우 Twitter 계정을 자동화하기 위해 Selenium 도커 컨테이너로 작업해야 합니다. 최근 작업은 컨테이너 내부에서 실행되는 Chrome 브라우저에서 사용해야 하는 프록시를 지정할 수 있도록 하는 것이었습니다. 그렇게 하면 계정의 진정한 출처에 대해 Twitter를 속이려고 합니다. 이는 특히 동일한 시스템에서 동시에 여러 계정을 자동화하려는 경우에 유용합니다.
프록시 설정은 Proxy API for Extensions에 액세스하는 JavaScript 코드와 함께 Selenium의
JavascriptExecutor.executeScript(..)
메서드를 사용하여 수행해야 하지만(자세한 내용은 spring-selenium-pool의 예제를 참조하십시오), 마침내 내 설정을 테스트하고 싶었습니다.모의 프록시 서버로 MockServer을 사용하기로 결정했습니다. 스텁 응답을 정의하는 것처럼 Java/Kotlin과의 통합이 쉽습니다. 그러나 마지막 질문은 다음과 같습니다. Selenium 컨테이너 내부에서 호스트에서 실행 중인 MockServer에 어떻게 연결할 수 있습니까?
운 좋게도 Testcontainers 사람들이 나를 덮었습니다. documentation이 답을 제공했습니다:
Testcontainers.exposeHostPorts(localServerPort);
.그게 우리에게 필요한 전부입니다. 컨테이너가 시작되기 전에 해당 행을 실행해야 하지만 모의 서버가 실행된 후에 실행하십시오.
그러면 호스트는
host.testcontainers.internal
+ 임의의 로컬 포트의 컨테이너 내부에서 사용할 수 있습니다.내가 이해한 것은 ssh-컨테이너를 통해 관심 컨테이너의 모든 TCP 트래픽을 호스트로 라우팅하기 위해 port forwarding을 사용하는 ssh-server로 다른 Docker 컨테이너를 시작하는 것입니다.
결국 결과 테스트의 골격은 다음과 같습니다.
@SpringBootTest(classes = [TaskWithProxyTest.App::class],
webEnvironment = SpringBootTest.WebEnvironment.NONE,
properties = ["selenium.pool.size=1"])
class TaskWithProxyTest {
// causes the container from spring-selenium-pool to come up
@SpringBootApplication
class App
companion object {
lateinit var mockProxy: ClientAndServer
@BeforeAll
@JvmStatic
fun first() {
val mockServerPort = SocketUtils.findAvailableTcpPort()
mockProxy = startClientAndServer(mockServerPort)
// necessary to access mockserver from container
Testcontainers.exposeHostPorts(mockServerPort)
}
@AfterAll
@JvmStatic
fun tearDown() {
mockProxy.stop(true)
}
}
@Test
fun `your test`() {
// ...
}
}
Reference
이 문제에 관하여(TIL: Testcontainers에서 호스트에 연결), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/alxgrk/til-connecting-to-the-host-from-testcontainers-55if텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)