All Projects → pysys-test → pysys-test

pysys-test / pysys-test

Licence: LGPL-2.1 license
PySys System Test Framework

Programming Languages

python
139335 projects - #7 most used programming language

Projects that are alternatives of or similar to pysys-test

Automation Arsenal
Curated list of popular Java and Kotlin frameworks, libraries and tools related to software testing, quality assurance and adjacent processes automation.
Stars: ✭ 105 (+650%)
Mutual labels:  qa, integration-testing, test-automation, testing-framework
Dredd
Language-agnostic HTTP API Testing Tool
Stars: ✭ 3,770 (+26828.57%)
Mutual labels:  integration-testing, test-framework, testing-framework
Wasmite
Now WebAssembly has proper testing, unit-testing and debugging 🤗
Stars: ✭ 20 (+42.86%)
Mutual labels:  test-automation, test-framework, testing-framework
IO-TESTER
A functional test framework
Stars: ✭ 32 (+128.57%)
Mutual labels:  test-automation, test-framework, testing-framework
page-content-tester
Paco is a Java based framework for non-blocking and highly parallelized Dom testing.
Stars: ✭ 13 (-7.14%)
Mutual labels:  test-automation, test-framework, testing-framework
eat
Json based scenario testing tool(which can have test for functional and non-functional)
Stars: ✭ 41 (+192.86%)
Mutual labels:  test-automation, test-framework, testing-framework
Recheck Web
recheck for web apps – change comparison tool with local Golden Masters, Git-like ignore syntax and "Unbreakable Selenium" tests.
Stars: ✭ 224 (+1500%)
Mutual labels:  test-automation, test-framework, testing-framework
test junkie
Highly configurable testing framework for Python
Stars: ✭ 72 (+414.29%)
Mutual labels:  qa, test-automation, testing-framework
DeepfakeHTTP
DeepfakeHTTP is a web server that uses HTTP dumps as a source for responses.
Stars: ✭ 373 (+2564.29%)
Mutual labels:  qa, test-automation
Ghpr.nunit
Adapter for NUnit 3 (generate HTML report for NUnit 3)
Stars: ✭ 33 (+135.71%)
Mutual labels:  qa, test-automation
Test Data Supplier
Extended TestNG DataProvider
Stars: ✭ 105 (+650%)
Mutual labels:  qa, test-automation
Python-Test-Automation-Framework
Test Automation Framework using selenium and Python
Stars: ✭ 41 (+192.86%)
Mutual labels:  qa, test-automation
request-baskets
HTTP requests collector to test webhooks, notifications, REST clients and more ...
Stars: ✭ 149 (+964.29%)
Mutual labels:  qa, test-automation
NBi
NBi is a testing framework (add-on to NUnit) for Business Intelligence and Data Access. The main goal of this framework is to let users create tests with a declarative approach based on an Xml syntax. By the means of NBi, you don't need to develop C# or Java code to specify your tests! Either, you don't need Visual Studio or Eclipse to compile y…
Stars: ✭ 102 (+628.57%)
Mutual labels:  test-automation, test-framework
lemoncheesecake
Python framework for end-to-end / QA testing
Stars: ✭ 37 (+164.29%)
Mutual labels:  qa, testing-framework
SeLite
Automated database-enabled navigation ✔️ of web applications
Stars: ✭ 34 (+142.86%)
Mutual labels:  qa, test-automation
Skrape.it
A Kotlin-based testing/scraping/parsing library providing the ability to analyze and extract data from HTML (server & client-side rendered). It places particular emphasis on ease of use and a high level of readability by providing an intuitive DSL. It aims to be a testing lib, but can also be used to scrape websites in a convenient fashion.
Stars: ✭ 231 (+1550%)
Mutual labels:  integration-testing, test-automation
tau
A Micro (1k lines of code) Unit Test Framework for C/C++
Stars: ✭ 121 (+764.29%)
Mutual labels:  test-framework, testing-framework
portman
Port OpenAPI Specs to Postman Collections, inject test suite and run via Newman 👨🏽‍🚀
Stars: ✭ 530 (+3685.71%)
Mutual labels:  integration-testing, test-framework
pry-test
A small test framework that supports debugging test failures & errors when they happen
Stars: ✭ 24 (+71.43%)
Mutual labels:  test-framework, testing-framework

Welcome to PySys!

PySys is a powerful cross-platform framework for writing great system/integration tests.

It provides a comprehensive package of methods to make all the common system/integration testing operations a breeze, with all the flexibility and power of the Python language at your fingertips. PySys is a framework that gives you a single unified way to control the selection, ordering and reporting of every type of test including system correctness, performance, soak/robustness testing, unit testing and manual testing.

Whatever language the application you're testing is written in, and whatever platforms it needs to run on, PySys can help!

Key features include:

  • A comprehensive library of assertion methods appropriate for system-level testing, such as checking for error/success messages in log files and comparing the contents of output files.
  • A comprehensive library of methods to automate platform-independent process starting, orchestration, and cleanup, for both Windows and Unix-based systems. Includes common operations such as:
    • dynamically picking a free TCP/IP port,
    • waiting until a server is running on a specified port,
    • waiting until a file contains a specified message,
    • powerful primitives for pre-processing text files (e.g. configuration input files, or output logs)
    • aborting early with a clear failure messages if an error is detected in a log file
  • Support for executing tests in parallel to significantly speed up execution time, with a flexible mechanism for controlling execution order.
  • Ability to cycle a test many times (and in parallel) to reproduce rare race conditions.
  • Support for executing the same test in several modes during your test run (for example against different web browsers, databases, or for writing parameterized tests). Python expressions give the power to easily create complex and dynamic lists of modes that combine multi-dimensional sets of parameters.
  • A performance monitoring framework for recording and aggregating latency, throughput and other performance metrics.
  • A process memory monitoring framework to monitor memory usage when soak testing your application.
  • A pluggable "writers" framework for recording test outcomes in any format. Includes a test output archiver, a writer for the ubiquitous JUnit/Ant(TM) XML file format, and built-in support for running tests under CI providers such as GitHub(R) Actions and Travis CI(R).
  • Integrated support for running PyUnit tests and doctests, in case your application is also written in Python.
  • Integrated support for executing manual/interactively driven test cases.
  • Test categorization and selective include/exclude execution, using per-test classification groups.
  • Support for Windows, Linux and macOS.

PySys was created by Moray Grieve. The maintainer is now Ben Spiller. This is a community project so we welcome your contributions, whether enhancement issues or GitHub pull requests!

Project Links

https://img.shields.io/pypi/v/PySys https://img.shields.io/badge/license-LGPL-blue

Installation

PySys can be installed into any Python version from 3.6 to 3.10.

The best way to install PySys is using the standard pip installer which downloads and install the binary package for the current PySys release, by executing:

> python -m pip install PySys

Alternatively, you can download the binary .whl package from https://github.com/pysys-test/pysys-test/releases and use python -m pip install PySys-<VERSION>.whl instead.

Make sure you have an up-to-date pip using python -m pip install --upgrade pip. See https://packaging.python.org/tutorials/installing-packages for more information about using pip.

Windows

On Windows, pip will automatically install the pywin32 and colorama libraries that PySys depends upon.

The executable launcher script pysys.py is installed into the Scripts\ directory of the Python installation, e.g. c:\Python\Scripts\pysys.py. To allow easy invocation of PySys from any test directory you may wish to add the Scripts directory to your PATH or copy the script to a location that is already on PATH. Alternatively you can run PySys using python -m pysys.

Unix

The executable launcher script pysys.py is installed into Python's binary directory, e.g. /usr/local/bin, and hence should be on the current user's PATH automatically; if not, just add it. Alternatively you can run PySys using python -m pysys.

Those wishing to use the manual tester should ensure they have installed the tcl/tk libraries on the host machine and are using a Python version that was compiled with tcl/tk support.

Getting Started

After installation, to see the available options to the pysys.py script use:

> pysys.py --help

The script has four main commands:

  • makeproject to create your top-level testing project configuration file,
  • make to create individual testcases,
  • run to execute them, and
  • clean to delete testcase output after execution.

For detailed information, see the --help command line.

To get started, create a new directory to hold your tests. Then run the makeproject command from that directory to add a pysysproject.xml file which will hold default settings for your tests:

> mkdir test
> cd test
> pysys.py makeproject

Then to create your first test, run:

> pysys.py make MyApplication_001

This will create a MyApplication_001 subdirectory with a pysystest.py file that contains both "descriptor" metadata about the test such as its title, and a Python class where you can add the logic to execute your test, and to validate that the results are as expected.

To run your testcases, simply execute:

> pysys.py run

To give a flavour for what's possible, here's a system test for checking the behaviour of a server application called MyServer, which shows of the most common PySys methods:

__pysys_title__   = r""" MyServer startup - basic sanity test (+ demo of PySys basics) """

__pysys_purpose__ = r""" To demonstrate that MyServer can startup and response to basic requests.
  """

class PySysTest(pysys.basetest.BaseTest):
  def execute(self):
    # Ask PySys to allocate a free TCP port to start the server on (this allows running many tests in
    # parallel without clashes)
    serverPort = self.getNextAvailableTCPPort()

    # A common system testing task is pre-processing a file, for example to substitute in required
    # testing parameters
    self.copy(self.input+'/myserverconfig.json', self.output+'/', mappers=[
      lambda line: line.replace('@SERVER_PORT@', str(serverPort)),
    ])

    # Start the server application we're testing (as a background process)
    # self.project provides access to properties in pysysproject.xml, such as appHome which is the
    # location of the application we're testing
    server = self.startProcess(
      command   = self.project.appHome+'/my_server.%s'%('bat' if IS_WINDOWS else 'sh'),
      arguments = ['--configfile', self.output+'/myserverconfig.json', ],
      environs  = self.createEnvirons(addToExePath=os.path.dirname(PYTHON_EXE)),
      stdouterr = 'my_server', displayName = 'my_server<port %s>'%serverPort, background = True,
      )

    # Wait for the server to start by polling for a grep regular expression. The errorExpr/process
    # arguments ensure we abort with a really informative message if the server fails to start
    self.waitForGrep('my_server.out', 'Started MyServer .*on port .*', errorExpr=[' (ERROR|FATAL) '], process=server)

    # Run a test tool (in this case, written in Python) from this test's Input/ directory.
    self.startPython([self.input+'/httpget.py', f'http://localhost:{serverPort}/data/myfile.json'],
      stdouterr='httpget_myfile')

  def validate(self):
    # This method is called after execute() to perform validation of the results by checking the
    # contents of files in the test's output directory. Note that during test development you can
    # re-run validate() without waiting for a full execute() run using "pysys run --validateOnly".

    # It's good practice to check for unexpected errors and warnings so they don't go unnoticed
    self.assertGrep('my_server.out', ' (ERROR|FATAL|WARN) .*', contains=False)

    # Checking for exception stack traces is also a good idea; and joining them into a single line with a mapper will
    # give a more descriptive error if the test fails
    self.assertGrep('my_server.out', r'Traceback [(]most recent call last[)]', contains=False,
      mappers=[pysys.mappers.JoinLines.PythonTraceback()])

    self.assertThat('message == expected',
      message=pysys.utils.fileutils.loadJSON(self.output+'/httpget_myfile.out')['message'],
      expected="Hello world!",
      )

    self.logFileContents('my_server.out')

If you're curious about any of the functionality demonstrated above, there's lots of helpful information on these methods and further examples in the documentation:

  • pysys.basetest.BaseTest.getNextAvailableTCPPort()
  • pysys.basetest.BaseTest.copy()
  • pysys.basetest.BaseTest.startProcess() (+ pysys.basetest.BaseTest.createEnvirons() and pysys.basetest.BaseTest.startPython())
  • pysys.basetest.BaseTest.waitForGrep()
  • pysys.basetest.BaseTest.assertGrep()
  • pysys.basetest.BaseTest.assertThat()
  • pysys.basetest.BaseTest.logFileContents()
  • pysys.mappers

Now take a look at pysys.basetest to begin exploring more of the powerful functionality PySys provides to help you implement your own pysystest.py system tests.

The sample projects under https://github.com/pysys-test are a great starting point for learning more about PySys, and for creating your first project.

License

PySys System Test Framework

Copyright (C) 2006-2022 M.B. Grieve

This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version.

This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details.

Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].