• Stars
    star
    426
  • Rank 101,884 (Top 3 %)
  • Language
    Python
  • License
    MIT License
  • Created over 7 years ago
  • Updated 10 months ago

Reviews

There are no reviews yet. Be the first to send feedback to the community and the maintainers!

Repository Details

Docker-based integration tests

Docker-based integration tests

PyPI version Build Status Python versions Code style

Description

Simple pytest fixtures that help you write integration tests with Docker and docker-compose. Specify all necessary containers in a docker-compose.yml file and and pytest-docker will spin them up for the duration of your tests.

This package is tested with Python versions 3.6, 3.7, 3.8 and 3.9, and pytest version 4, 5 and 6. Python 2 is not supported.

pytest-docker was originally created by Andrรฉ Caron.

Installation

Install pytest-docker with pip or add it to your test requirements. It is recommended to install docker-compose python package directly in your environment to ensure that it is available during tests. This will prevent potential dependency conflicts that can occur when the system wide docker-compose is used in tests.

The default behavior is not to install docker-compose with pytest-docker. If you want to, you install pytest-docker with the docker-compose-v1 extra. You can use the following command:

pip install pytest-docker[docker-compose-v1]

Docker Compose v2 compatiblity

pytest-docker will work with Docker Compose v2 out of the box if compose-switch is installed.

If you want to use the real Docker Compose v2, it has to be installed system wide (more information) and you have to modify the docker-compose-command fixture (this behavior might change in the future versions).

Usage

Here is an example of a test that depends on a HTTP service.

With a docker-compose.yml file like this (using the httpbin service):

version: '2'
services:
  httpbin:
    image: "kennethreitz/httpbin"
    ports:
      - "8000:80"

You can write a test like this:

import pytest
import requests

from requests.exceptions import ConnectionError


def is_responsive(url):
    try:
        response = requests.get(url)
        if response.status_code == 200:
            return True
    except ConnectionError:
        return False


@pytest.fixture(scope="session")
def http_service(docker_ip, docker_services):
    """Ensure that HTTP service is up and responsive."""

    # `port_for` takes a container port and returns the corresponding host port
    port = docker_services.port_for("httpbin", 80)
    url = "http://{}:{}".format(docker_ip, port)
    docker_services.wait_until_responsive(
        timeout=30.0, pause=0.1, check=lambda: is_responsive(url)
    )
    return url


def test_status_code(http_service):
    status = 418
    response = requests.get(http_service + "/status/{}".format(status))

    assert response.status_code == status

By default this plugin will try to open docker-compose.yml in your tests directory. If you need to use a custom location, override the docker_compose_file fixture inside your conftest.py file:

import os
import pytest


@pytest.fixture(scope="session")
def docker_compose_file(pytestconfig):
    return os.path.join(str(pytestconfig.rootdir), "mycustomdir", "docker-compose.yml")

Available fixtures

All fixtures have session scope.

docker_ip

Determine the IP address for TCP connections to Docker containers.

docker_compose_file

Get an absolute path to the docker-compose.yml file. Override this fixture in your tests if you need a custom location.

docker_compose_project_name

Generate a project name using the current process PID. Override this fixture in your tests if you need a particular project name.

docker_services

Start all services from the docker compose file (docker-compose up). After test are finished, shutdown all services (docker-compose down).

docker_compose_command

Docker Compose command to use to execute Dockers. Default is to use Docker Compose v1 (command is docker-compose). If you want to use Docker Compose v2, change this fixture to return docker compose.

docker_setup

Get the docker_compose command to be executed for test spawn actions. Override this fixture in your tests if you need to change spawn actions. Returning anything that would evaluate to False will skip this command.

docker_cleanup

Get the docker_compose command to be executed for test clean-up actions. Override this fixture in your tests if you need to change clean-up actions. Returning anything that would evaluate to False will skip this command.

Development

Use of a virtual environment is recommended. See the venv package for more information.

First, install pytest-docker and its test dependencies:

pip install -e ".[tests]"

Run tests with

pytest -c setup.cfg

to make sure that the correct configuration is used. This is also how tests are run in CI.

Use black with default settings for formatting. You can also use pylint with setup.cfg as the configuration file.

Contributing

This pytest plug-in and its source code are made available to you under a MIT license. It is safe to use in commercial and closed-source applications. Read the license for details!

Found a bug? Think a new feature would make this plug-in more practical? We welcome issues and pull requests!

When creating a pull request, be sure to follow this projects conventions (see above).

More Repositories

1

retdec

RetDec is a retargetable machine-code decompiler based on LLVM.
C++
7,957
star
2

android-butterknife-zelezny

Android Studio plug-in for generating ButterKnife injections from selected layout XML.
Java
3,383
star
3

retry-go

Simple golang library for retry mechanism
Go
2,380
star
4

android-styled-dialogs

Backport of Material dialogs with easy-to-use API based on DialogFragment
Java
2,147
star
5

retdec-idaplugin

RetDec plugin for IDA
C++
753
star
6

gradle-docker-compose-plugin

Simplifies usage of Docker Compose for integration testing in Gradle environment.
Groovy
412
star
7

ioc

Threat Intel IoCs + bits and pieces of dark matter
C
368
star
8

scala-server-toolkit

Functional programming toolkit for building server applications in Scala.
Scala
198
star
9

hdfs-shell

HDFS Shell is a HDFS manipulation tool to work with functions integrated in Hadoop DFS
Java
150
star
10

apkparser

APK manifest & resources parsing in Golang.
Go
123
star
11

yaramod

Parsing of YARA rules into AST and building new rulesets in C++.
C++
114
star
12

topee

Google Chrome Extension API for Safari
JavaScript
104
star
13

yari

YARI is an interactive debugger for YARA Language.
Rust
85
star
14

apkverifier

APK Signature verification in Go. Supports scheme v1, v2 and v3 and passes Google apksig's testing suite.
Go
81
star
15

gradle-dependencies-viewer

A simple web UI to analyze dependencies for your project based on the text data generated from "gradle dependencies" command.
JavaScript
78
star
16

yls

YARA Language Server
Python
67
star
17

yarang

Alternative YARA scanning engine
C++
66
star
18

pelib

PE file manipulation library.
C++
62
star
19

datadog4s

Making great monitoring easy in functional Scala
Scala
62
star
20

pe_tools

A cross-platform Python toolkit for parsing/writing PE files.
Python
62
star
21

k8s-admission-webhook

A general-purpose Kubernetes admission webhook to aid with enforcing best practices within your cluster.
Go
54
star
22

grpc-java-jwt

JWT based authentication for gRPC-Java.
Java
46
star
23

yaracpp

C++ wrapper for YARA.
C++
45
star
24

hexrays-demo

IDA SDK tech demo
C++
35
star
25

rabbitmq-scala-client

Scala wrapper over standard RabbitMQ Java client library
Scala
35
star
26

marathon-vault-plugin

Marathon plugin which injects Vault secrets via environment variables
Scala
30
star
27

android-lectures

Class material for lectures about Android development
Kotlin
27
star
28

avast-ctu-cape-dataset

Jupyter Notebook
25
star
29

retdec-regression-tests-framework

A framework for writing and running regression tests for RetDec and related tools.
Python
24
star
30

capstone-dumper

Utility for dumping all the information Capstone has on given instructions.
C++
24
star
31

libdwarf

Library to provide access to DWARF debugging information.
C
23
star
32

PurpleDome

Simulation environment for attacks on computer networks
Python
21
star
33

llvm

An LLVM clone modified for use in RetDec and associated tools.
LLVM
19
star
34

wanna-ml

Complete MLOps framework for Vertex-AI
Python
18
star
35

grpc-json-bridge

Library for exposing gRPC endpoints via HTTP (JSON) API
Scala
18
star
36

authenticode-parser

Authenticode-parser is a simple C library for Authenticode format parsing using OpenSSL.
C
16
star
37

ep-stats

Statistics for Experimentation Platform
Python
15
star
38

elfio

Library for reading and generating ELF files.
C++
14
star
39

vuei18n-po

transform gettext .po files for vue-i18n
JavaScript
14
star
40

retdec-regression-tests

A collection of regression tests for RetDec and associated tools.
Python
12
star
41

safariextz

Safari extension packer for node.js
JavaScript
9
star
42

cactus

Library for easy conversion between GPB and Scala case classes.
Scala
9
star
43

hermes

SMTP honeypot built on top of the Salmon mail server
Python
8
star
44

kafka-tests

Integration test of Apache Kafka 0.9.0+ and Java clients.
Java
8
star
45

bytes

Library providing universal interface for having an immutable representation of sequence of bytes.
Java
7
star
46

genrex

Generator of regular expressions
Python
7
star
47

ctf-aca-brno-2020

Tasks from Avast Cyber Adventure 2020 Brno
Objective-C
6
star
48

metrics

Java/Scala library defining API for metrics publishing
Java
6
star
49

slog4s

Structured and contextual logging for Scala
Scala
6
star
50

Stor

HTTP API for SHA256 objects
Perl
5
star
51

clockwork

An adoption of the map-reduce paradigm based on the concept of coroutines to the world of stream data processing.
Java
5
star
52

covid-19-ioc

HTML
5
star
53

asio-mutex

Awaitable Mutex compatible with Boost.Asio
C++
5
star
54

tlshc

TLSH library in C
C
5
star
55

decryptor-keys

Decryption keys for our ransomware decryptors
5
star
56

scala-hashes

Case-classes representing MD5, SHA1 and SHA256.
Scala
5
star
57

bytecompressor

Java and Scala abstractions for some compression algorithms.
Java
5
star
58

retdec-support

Support packages for the RetDec decompiler.
5
star
59

hackcambridge-ccleaner-app

A custom build of CCleaner that enables the integration of Avast Secure Browser
Visual Basic
5
star
60

mongodb-oplog-stats

A tool for obtaining statistics about a MongoDB replica-set oplog
Rust
5
star
61

hackcambridge-ccleaner-extension

A stub for the CCleaner extension for Avast Secure Browser
JavaScript
5
star
62

machine-learning-python

Machine learning in Python Workshop
Jupyter Notebook
4
star
63

syringe

Syringe - Dependency Injection and Configuration Library from AVAST Software
Java
4
star
64

labmanager-unit-vsphere

REST service for vmWare vSphere virtual machine control
Python
4
star
65

syringe-maven-plugin

Supporting Maven plugin for Syringe
Java
3
star
66

cargo-depdiff

Inspecting what changed around dependencies between versions
Rust
3
star
67

ndisdump

A no-dependencies network packet capture tool for Windows
C++
3
star
68

webtrails

Svelte
3
star
69

BigMap

Scala Map that uses binary search in memory mapped sorted file. It makes possible usage of data sets bigger than available memory as a Map.
Scala
3
star
70

management-console-config

Sample configuration for Avast Business management console
2
star
71

hackcambridge-challenge

Integrate the Avast Secure Browser (ASB) and CCleaner products to improve user privacy, prevent website tracking, and reduce the userโ€™s online footprint.
2
star
72

storage-client

Scala
2
star
73

boost-python-examples

Examples that show capabilities of Boost Python
C++
2
star
74

docker-centos_perl_cpanm

2
star
75

adblock

JavaScript
2
star
76

retdec-build-system-tests

Tests of RetDec build system. This can also serve as RetDec component usage examples.
C++
2
star
77

eslint-plugin-apklab-frida

ESLint plugin & config for the Frida scripts used in the apklab.io platform.
JavaScript
2
star
78

VSArchConv

Converts .sln/.vcxproj to support different architecture
C++
2
star
79

stor-client

Go
2
star
80

stepdance

Functional iterators for easy and elegant parsing, scanning, iterating etc. Written Scala.
Scala
1
star
81

docker-flume-hdfs

Shell
1
star
82

vsphere-instaclone

Really quickly clone machines to be used as TeamCity agents
Kotlin
1
star
83

jmx-publisher

Tool to get properties and methods published via JMX easily.
Java
1
star
84

browser-extension-messaging-sample

JavaScript
1
star
85

continuity

Library for passing context between threads in multi-threaded applications
Scala
1
star
86

instaprofiles-sync

application is used to regularly synchronize defined cloud profiles for [TeamCity plugin vsphere-instaclone](https://github.com/avast/vsphere-instaclone)
Java
1
star
87

jasmine-class-mock

Create a mock class for the Jasmine framework
JavaScript
1
star
88

jfrog-verisign

JFrog plugin to verify deploying artifacts signatures. It supports both JAR and RPM (PGP) verification
Java
1
star
89

https-encryption

Avast HTTPS Encryption powered by HTTPSEverywhere
JavaScript
1
star
90

kluzo

Library for passing tracing ID between threads in multi-threaded applications
Scala
1
star
91

firefox-xpi

Firefox extension packer for node.js
JavaScript
1
star
92

fairy-tale

Toolbox for functional programming in Scala using Finally Tagless approach
Scala
1
star
93

ResolveTest

Simple dns resolve utility.
C++
1
star
94

mdevcamp-workshop

Kotlin Multiplatform - Unleash the Power of Shared Code
Kotlin
1
star
95

gossip-bot

Find out what is happening within the company
Go
1
star