ReportPortal
ReportPortal is a modern test automation platform that provides a number of benefits for software development teams and organizations. Here are some of the key benefits of ReportPortal:
- Centralized Test Management: ReportPortal provides a centralized platform for managing all aspects of your software testing process, including test planning, execution, and reporting. This helps to streamline test management and ensures that all team members have access to the same information and data.
- Scalability: ReportPortal is designed to be highly scalable, allowing it to handle large volumes of test data and results from multiple sources. This makes it ideal for enterprise-level organizations with complex testing requirements.
- Integrations: ReportPortal integrates with a wide range of testing tools and frameworks, making it easy to incorporate it into your existing testing workflow. It also supports integrations with popular development and collaboration tools like JIRA, Slack, and GitHub.
- Customizable Dashboards and Reports: ReportPortal provides customizable dashboards and reports that allow you to visualize your test data in a way that makes sense for your team. This helps you to quickly identify trends, patterns, and issues in your testing process.
- AI-Powered Analysis: ReportPortal uses advanced machine learning algorithms to analyze your test data and provide insights into your testing process. This helps you to identify areas for improvement and optimize your testing process over time.
- Open-Source Community: ReportPortal is an open-source platform, which means that it has a large and active community of developers andusers who contribute to its ongoing development and support. This community provides a wealth of resources and knowledge for users, including documentation, tutorials, and forums for sharing best practices and troubleshooting issues.
- Cost-Effective: ReportPortal is a cost-effective solution for test automation, as it is free to use and only requires minimal infrastructure and resources to set up and maintain. This makes it an ideal choice for small and medium-sized organizations with limited budgets for testing tools and resources.
Overall, ReportPortal offers a powerful and flexible test automation platform that can help improve the efficiency and effectiveness of your software testing process. Its centralized test management, scalability, integrations, customizable dashboards and reports, AI-powered analysis, open-source community, and cost-effectiveness make it a compelling choice for teams and organizations of all sizes.
Below is the docker-compose file for ReportPortal
## You can generate a custom docker compose file automatically on http://reportportal.io/download (Step 2)
## This is example of Docker Compose for ReportPortal
## Do not forget to configure data volumes for production usage
## Execute 'docker-compose -f docker-compose.yml -p reportportal up -d --force-recreate' --build
## to start all containers in daemon mode
## Where:
## '-f docker-compose.yml' -- specifies this compose file
## '-p reportportal' -- specifies container's prefix (project name)
## '-d' -- enables daemon mode
## '--force-recreate' -- forces re-recreating of all containers
version: '2.4'
services:
gateway:
image: traefik:v2.0.7
ports:
- "8080:8080" # HTTP exposed
- "8081:8081" # HTTP Administration exposed
volumes:
- /var/run/docker.sock:/var/run/docker.sock
command:
- --providers.docker=true
- --providers.docker.constraints=Label(`traefik.expose`, `true`)
- --entrypoints.web.address=:8080
- --entrypoints.traefik.address=:8081
- --api.dashboard=true
- --api.insecure=true
restart: always
elasticsearch:
image: docker.elastic.co/elasticsearch/elasticsearch:7.10.1
volumes:
- ./data/elasticsearch:/usr/share/elasticsearch/data
environment:
- "ES_JAVA_OPTS=-Dlog4j2.formatMsgNoLookups=true"
- "bootstrap.memory_lock=true"
- "discovery.type=single-node"
- "logger.level=INFO"
- "xpack.security.enabled=true"
- "ELASTIC_PASSWORD=elastic1q2w3e"
ulimits:
memlock:
soft: -1
hard: -1
nofile:
soft: 65536
hard: 65536
# ports:
# - "9200:9200"
healthcheck:
test: ["CMD", "curl","-s" ,"-f", "http://elastic:elastic1q2w3e@localhost:9200/_cat/health"]
restart: always
## An analyzer instance for main functionality, don't forget to use the same storage settings (either MinIO, or filesystem) for analyzer_train
analyzer:
image: reportportal/service-auto-analyzer:5.7.4
environment:
LOGGING_LEVEL: info
AMQP_EXCHANGE_NAME: analyzer-default
AMQP_VIRTUAL_HOST: analyzer
AMQP_URL: amqp://rabbitmq:rabbitmq@rabbitmq:5672
ES_HOSTS: http://elastic:elastic1q2w3e@elasticsearch:9200
MINIO_SHORT_HOST: minio:9000
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123
depends_on:
elasticsearch:
condition: service_started
rabbitmq:
condition: service_healthy
restart: always
## An analyzer instance for training, don't forget to setup the same storage (either MinIO, or filesystem) as for main analyzer
analyzer_train:
image: reportportal/service-auto-analyzer:5.7.4
environment:
LOGGING_LEVEL: info
AMQP_EXCHANGE_NAME: analyzer-default
AMQP_VIRTUAL_HOST: analyzer
AMQP_URL: amqp://rabbitmq:rabbitmq@rabbitmq:5672
ES_HOSTS: http://elastic:elastic1q2w3e@elasticsearch:9200
MINIO_SHORT_HOST: minio:9000
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123
INSTANCE_TASK_TYPE: train
UWSGI_WORKERS: 1
depends_on:
elasticsearch:
condition: service_started
rabbitmq:
condition: service_healthy
restart: always
## Metrics service for analyzing how analyzer is working and manage retrained models
metrics-gatherer:
image: reportportal/service-metrics-gatherer:5.7.3
environment:
LOGGING_LEVEL: info
ES_HOST: http://elasticsearch:9200
ES_USER: elastic
ES_PASSWORD: elastic1q2w3e
POSTGRES_USER: "rpuser"
POSTGRES_PASSWORD: "rppass"
POSTGRES_DB: "reportportal"
POSTGRES_HOST: "postgres"
POSTGRES_PORT: 5432
ALLOWED_START_TIME: "22:00"
ALLOWED_END_TIME: "08:00"
#TZ: Europe/Minsk you can change a timezone like this to specify when metrics are gathered
AMQP_URL: amqp://rabbitmq:rabbitmq@rabbitmq:5672
AMQP_VIRTUAL_HOST: analyzer
depends_on:
- elasticsearch
restart: always
## Initial reportportal db schema. Run once.
db-scripts:
image: reportportal/migrations:5.7.3
depends_on:
postgres:
condition: service_healthy
environment:
POSTGRES_SERVER: postgres
POSTGRES_PORT: 5432
POSTGRES_DB: reportportal
POSTGRES_USER: rpuser
POSTGRES_PASSWORD: rppass
restart: on-failure
postgres:
image: postgres:12-alpine
shm_size: '512m'
environment:
POSTGRES_USER: rpuser
POSTGRES_PASSWORD: rppass
POSTGRES_DB: reportportal
volumes:
## For unix host
- ./data/postgres:/var/lib/postgresql/data
## For windows host
# - postgres:/var/lib/postgresql/data
## If you need to access the DB locally. Could be a security risk to expose DB.
# ports:
# - "5432:5432"
command:
-c checkpoint_completion_target=0.9
-c work_mem=96MB
-c wal_writer_delay=20ms
-c synchronous_commit=off
-c wal_buffers=32MB
-c min_wal_size=2GB
-c max_wal_size=4GB
## Optional, for SSD Data Storage. If you are using the HDD, set up this command to '2'
# -c effective_io_concurrency=200
## Optional, for SSD Data Storage. If you are using the HDD, set up this command to '4'
# -c random_page_cost=1.1
## Optional, can be scaled. Example for 4 CPU, 16GB RAM instance, where only the database is deployed
# -c max_worker_processes=4
# -c max_parallel_workers_per_gather=2
# -c max_parallel_workers=4
# -c shared_buffers=4GB
# -c effective_cache_size=12GB
# -c maintenance_work_mem=1GB
healthcheck:
test: ["CMD-SHELL", "pg_isready -d $$POSTGRES_DB -U $$POSTGRES_USER"]
interval: 10s
timeout: 120s
retries: 10
restart: always
rabbitmq:
image: rabbitmq:3.7.16-management
# ports:
# - "5672:5672"
# - "15672:15672"
environment:
RABBITMQ_DEFAULT_USER: "rabbitmq"
RABBITMQ_DEFAULT_PASS: "rabbitmq"
healthcheck:
test: ["CMD", "rabbitmqctl", "status"]
retries: 5
restart: always
uat:
image: reportportal/service-authorization:5.7.4
# ports:
# - "9999:9999"
environment:
RP_DB_HOST: postgres
RP_DB_USER: rpuser
RP_DB_PASS: rppass
RP_DB_NAME: reportportal
RP_BINARYSTORE_TYPE: minio
RP_BINARYSTORE_MINIO_ENDPOINT: http://minio:9000
RP_BINARYSTORE_MINIO_ACCESSKEY: minio
RP_BINARYSTORE_MINIO_SECRETKEY: minio123
RP_SESSION_LIVE: 86400 #in seconds
labels:
- "traefik.http.middlewares.uat-strip-prefix.stripprefix.prefixes=/uat"
- "traefik.http.routers.uat.middlewares=uat-strip-prefix@docker"
- "traefik.http.routers.uat.rule=PathPrefix(`/uat`)"
- "traefik.http.routers.uat.service=uat"
- "traefik.http.services.uat.loadbalancer.server.port=9999"
- "traefik.http.services.uat.loadbalancer.server.scheme=http"
- "traefik.expose=true"
restart: always
depends_on:
postgres:
condition: service_healthy
index:
image: reportportal/service-index:5.7.3
depends_on:
gateway:
condition: service_started
environment:
- LB_URL=http://gateway:8081
- TRAEFIK_V2_MODE=true
labels:
- "traefik.http.routers.index.rule=PathPrefix(`/`)"
- "traefik.http.routers.index.service=index"
- "traefik.http.services.index.loadbalancer.server.port=8080"
- "traefik.http.services.index.loadbalancer.server.scheme=http"
- "traefik.expose=true"
restart: always
api:
image: reportportal/service-api:5.7.4
depends_on:
rabbitmq:
condition: service_healthy
gateway:
condition: service_started
postgres:
condition: service_healthy
environment:
## Double entry moves test logs from PostgreSQL to Elastic-type engines
## Ref: https://reportportal.io/blog/double-entry-in-5.7.2
RP_ELASTICSEARCHLOGMESSAGE_HOST: "true"
RP_DB_HOST: postgres
RP_DB_USER: rpuser
RP_DB_PASS: rppass
RP_DB_NAME: reportportal
RP_AMQP_USER: rabbitmq
RP_AMQP_PASS: rabbitmq
RP_AMQP_APIUSER: rabbitmq
RP_AMQP_APIPASS: rabbitmq
RP_AMQP_ANALYZER-VHOST: analyzer
RP_BINARYSTORE_TYPE: minio
RP_BINARYSTORE_MINIO_ENDPOINT: http://minio:9000
RP_BINARYSTORE_MINIO_ACCESSKEY: minio
RP_BINARYSTORE_MINIO_SECRETKEY: minio123
LOGGING_LEVEL_ORG_HIBERNATE_SQL: info
RP_REQUESTLOGGING: "false"
MANAGEMENT_HEALTH_ELASTICSEARCH_ENABLED: "false"
JAVA_OPTS: -Xmx1g -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=/tmp -Dcom.sun.management.jmxremote.rmi.port=12349 -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=0.0.0.0
labels:
- "traefik.http.middlewares.api-strip-prefix.stripprefix.prefixes=/api"
- "traefik.http.routers.api.middlewares=api-strip-prefix@docker"
- "traefik.http.routers.api.rule=PathPrefix(`/api`)"
- "traefik.http.routers.api.service=api"
- "traefik.http.services.api.loadbalancer.server.port=8585"
- "traefik.http.services.api.loadbalancer.server.scheme=http"
- "traefik.expose=true"
restart: always
jobs:
image: reportportal/service-jobs:5.7.4
depends_on:
rabbitmq:
condition: service_healthy
gateway:
condition: service_started
postgres:
condition: service_healthy
environment:
## Double entry moves test logs from PostgreSQL to Elastic-type engines
## Ref: https://reportportal.io/blog/double-entry-in-5.7.2
RP_ELASTICSEARCH_HOST: http://elasticsearch:9200
RP_ELASTICSEARCH_USERNAME: elastic
RP_ELASTICSEARCH_PASSWORD: elastic1q2w3e
RP_DB_HOST: postgres
RP_DB_USER: rpuser
RP_DB_PASS: rppass
RP_DB_NAME: reportportal
RP_AMQP_USER: rabbitmq
RP_AMQP_PASS: rabbitmq
RP_AMQP_APIUSER: rabbitmq
RP_AMQP_APIPASS: rabbitmq
RP_AMQP_ANALYZER-VHOST: analyzer
DATASTORE_TYPE: minio
DATASTORE_MINIO_ENDPOINT: http://minio:9000
DATASTORE_MINIO_ACCESSKEY: minio
DATASTORE_MINIO_SECRETKEY: minio123
RP_ENVIRONMENT_VARIABLE_CLEAN_ATTACHMENT_CRON: 0 0 */24 * * *
RP_ENVIRONMENT_VARIABLE_CLEAN_LOG_CRON: 0 0 */24 * * *
RP_ENVIRONMENT_VARIABLE_CLEAN_LAUNCH_CRON: 0 0 */24 * * *
RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CRON: 0 0 */24 * * *
RP_ENVIRONMENT_VARIABLE_STORAGE_PROJECT_CRON: 0 */5 * * * *
RP_ENVIRONMENT_VARIABLE_CLEAN_STORAGE_CHUNKSIZE: 1000
RP_PROCESSING_LOG_MAXBATCHSIZE: 2000
RP_PROCESSING_LOG_MAXBATCHTIMEOUT: 6000
RP_AMQP_MAXLOGCONSUMER: 1
labels:
- traefik.http.middlewares.jobs-strip-prefix.stripprefix.prefixes=/jobs
- traefik.http.routers.jobs.middlewares=jobs-strip-prefix@docker
- traefik.http.routers.jobs.rule=PathPrefix(`/jobs`)
- traefik.http.routers.jobs.service=jobs
- traefik.http.services.jobs.loadbalancer.server.port=8686
- traefik.http.services.jobs.loadbalancer.server.scheme=http
- traefik.expose=true
restart: always
ui:
image: reportportal/service-ui:5.7.4
environment:
- RP_SERVER_PORT=8080
labels:
- "traefik.http.middlewares.ui-strip-prefix.stripprefix.prefixes=/ui"
- "traefik.http.routers.ui.middlewares=ui-strip-prefix@docker"
- "traefik.http.routers.ui.rule=PathPrefix(`/ui`)"
- "traefik.http.routers.ui.service=ui"
- "traefik.http.services.ui.loadbalancer.server.port=8080"
- "traefik.http.services.ui.loadbalancer.server.scheme=http"
- "traefik.expose=true"
restart: always
minio:
image: minio/minio:RELEASE.2020-10-27T04-03-55Z
#ports:
# - '9000:9000'
volumes:
## For unix host
- ./data/storage:/data
## For windows host
# - minio:/data
environment:
MINIO_ACCESS_KEY: minio
MINIO_SECRET_KEY: minio123
command: server /data
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:9000/minio/health/live"]
interval: 30s
timeout: 20s
retries: 3
restart: always
## Docker volume for Windows host
# volumes:
# postgres:
# minio: