testcontainers / testcontainers/testcontainers-python
Provide generic DockerContainer with init attributes
Chưa có ai nhận issue này.
- Ngôn ngữ chính
- Python
- Star
- 2.3k
- Fork
- 386
- Merge trung bình
- 4 giờ 40 phút
- Pull request đã merge (30 ngày)
- 1
Mô tả
First I want to thank you for this very nice and convenient library.
Background
I am using the library for smoke tests for microservices. In these tests I spin up a container and make sure I can e.g., fetch an endpoint and see that the container is built and starts correctly.
The library provides all convenient methods, except for a way to set e.g., ports and env variables in the context manager. To solve this I have subclassed testcontainers.core.container.DockerContainer into a class as below:
from typing import Any
import testcontainers.core.container
class ContainerContext(testcontainers.core.container.DockerContainer):
def __init__(
self, image: str, ports: list[int], env_vars: dict[str, str], **kwargs: Any
) -> None:
super().__init__(image, **kwargs)
self.with_exposed_ports(*ports)
for env, value in env_vars.items():
self.with_env(env, value)
and use it as
import requests
def test_smoke():
with container_context(
"my_service_image",
ports=[8000],
env_vars={"SOME_ENV_SETTINGS": "some_value", "SOME_ENV_SETTINGS2": "other_value"},
) as con:
r = requests.get(
f"http://{con.get_container_host_ip()}:{con.get_exposed_port(8000)}"
)
assert r
Proposal
- Include a generic container class where all
name,ports,env,volumes, … can be set as init variables.
I saw #114 that removed the previous GenericContainer but I don't see a motivation why it was done and why it could not be extended.
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Hướng nghiên cứu
Xem xét testcontainers.core.container.DockerContainer và việc loại bỏ GenericContainer trước đây được thảo luận trong #114. So sánh các thuộc tính khởi tạo được yêu cầu —name, ports, env và volumes— với API container hiện có, và coi đề xuất là hoàn tất khi một container generic có thể cấu hình các giá trị này lúc khởi tạo mà không cần subclass.
Do mô hình lập chỉ mục viết ra từ nội dung của issue.
Đánh giá
- Công nghệ
- docker, python
- Lĩnh vực
- devops, testing
- Loại issue
- Tính năng
- Độ khó
- 4/5
- Thời gian dự kiến
- 3-5 ngày
- Mức độ hoạt động
- Đình trệ
- Độ rõ ràng
- Khá rõ ràng
- Mức phù hợp với người mới
- 35/100