Gauge (software)

Last updated

Gauge
Developer(s) ThoughtWorks
Stable release
1.4.3 [1]   OOjs UI icon edit-ltr-progressive.svg / 22 January 2022;14 months ago (22 January 2022)
Repository
Written in Go
Operating system Platform-independent
Type Test automation tool
License Apache License 2.0
Website gauge.org OOjs UI icon edit-ltr-progressive.svg

Gauge is a light weight cross-platform test automation tool. It uses markdown to author test cases and scenarios. Its modular architecture makes it flexible and scalable.

Contents

Markdown

Gauge specifications [2] are written in the business language. For example,

Find movies playing near me===========================  The System Under Test in this example is a web application to find and book movie tickets  Search for movies-----------------* Specify location as "Bangalore" * Search for movie "Star Wars" * Verify that "INOX" is playing "Star Wars" at "7:30&nbsp;pm"  Book movie ticket-----------------* Sign up with email address <user@example.com> * Complete the verification * Select location as "Bangalore", the movie "Star Wars" and "3" seats * Confirm and pay * Verify the "e-ticket" has been sent to the registered email. 

This Gauge specification describes a feature of the System Under Test. The scenarios [3] Search for movies and Book movie ticket represent a flow in this specification. Steps [4] are executable parts of a specification.

Test Code

Specifications in Markdown abstracts code behind the steps.

For example, the step Specify location as "Bangalore" implementation in Java would look like

// This Method can be written in any java class as long as it is in classpath.publicclassStepImplementation{@Step("Specify location as <location>")publicvoidhelloWorld(Stringlocation){// Step implementation}}

Gauge has Support for writing test code in:

The Community contributed language runners are:

Execution

Gauge tests can be executed from the command line [5] or the supported IDEs. [6]

The default command gauge specs run the tests sequentially.

The command gauge -p specs will execute the tests in Parallel.

Reports

Gauge gives comprehensive test reports [7] that provides the required details of a given run.

IDE support

Gauge's IDE support [6] helps to write and maintain the test suite.

Related Research Articles

<span class="mw-page-title-main">Acceptance testing</span> Test to determine if the requirements of a specification or contract are met

In engineering and its various subdisciplines, acceptance testing is a test conducted to determine if the requirements of a specification or contract are met. It may involve chemical tests, physical tests, or performance tests.

<span class="mw-page-title-main">Java virtual machine</span> Java Virtual machine

A Java virtual machine (JVM) is a virtual machine that enables a computer to run Java programs as well as programs written in other languages that are also compiled to Java bytecode. The JVM is detailed by a specification that formally describes what is required in a JVM implementation. Having a specification ensures interoperability of Java programs across different implementations so that program authors using the Java Development Kit (JDK) need not worry about idiosyncrasies of the underlying hardware platform.

Software testing is the act of examining the artifacts and the behavior of the software under test by validation and verification. Software testing can also provide an objective, independent view of the software to allow the business to appreciate and understand the risks of software implementation. Test techniques include, but are not necessarily limited to:

In computer programming, unit testing is a software testing method by which individual units of source code—sets of one or more computer program modules together with associated control data, usage procedures, and operating procedures—are tested to determine whether they are fit for use.

<span class="mw-page-title-main">JAR (file format)</span> Java archive file format

A JAR file is a package file format typically used to aggregate many Java class files and associated metadata and resources into one file for distribution.

The Data Distribution Service (DDS) for real-time systems is an Object Management Group (OMG) machine-to-machine standard that aims to enable dependable, high-performance, interoperable, real-time, scalable data exchanges using a publish–subscribe pattern.

<span class="mw-page-title-main">Markdown</span> Plain text markup language

Markdown is a lightweight markup language for creating formatted text using a plain-text editor. John Gruber and Aaron Swartz created Markdown in 2004 as a markup language that is appealing to human readers in its source code form. Markdown is widely used in blogging, instant messaging, online forums, collaborative software, documentation pages, and readme files.

The Java Modeling Language (JML) is a specification language for Java programs, using Hoare style pre- and postconditions and invariants, that follows the design by contract paradigm. Specifications are written as Java annotation comments to the source files, which hence can be compiled with any Java compiler.

In software engineering, behavior-driven development (BDD) is an agile software development process that encourages collaboration among developers, quality assurance experts, and customer representatives in a software project. It encourages teams to use conversation and concrete examples to formalize a shared understanding of how the application should behave. It emerged from test-driven development (TDD). Behavior-driven development combines the general techniques and principles of TDD with ideas from domain-driven design and object-oriented analysis and design to provide software development and management teams with shared tools and a shared process to collaborate on software development.

Runtime verification is a computing system analysis and execution approach based on extracting information from a running system and using it to detect and possibly react to observed behaviors satisfying or violating certain properties. Some very particular properties, such as datarace and deadlock freedom, are typically desired to be satisfied by all systems and may be best implemented algorithmically. Other properties can be more conveniently captured as formal specifications. Runtime verification specifications are typically expressed in trace predicate formalisms, such as finite state machines, regular expressions, context-free patterns, linear temporal logics, etc., or extensions of these. This allows for a less ad-hoc approach than normal testing. However, any mechanism for monitoring an executing system is considered runtime verification, including verifying against test oracles and reference implementations. When formal requirements specifications are provided, monitors are synthesized from them and infused within the system by means of instrumentation. Runtime verification can be used for many purposes, such as security or safety policy monitoring, debugging, testing, verification, validation, profiling, fault protection, behavior modification, etc. Runtime verification avoids the complexity of traditional formal verification techniques, such as model checking and theorem proving, by analyzing only one or a few execution traces and by working directly with the actual system, thus scaling up relatively well and giving more confidence in the results of the analysis, at the expense of less coverage. Moreover, through its reflective capabilities runtime verification can be made an integral part of the target system, monitoring and guiding its execution during deployment.

In computer programming, a programming language specification is a documentation artifact that defines a programming language so that users and implementors can agree on what programs in that language mean. Specifications are typically detailed and formal, and primarily used by implementors, with users referring to them in case of ambiguity; the C++ specification is frequently cited by users, for instance, due to the complexity. Related documentation includes a programming language reference, which is intended expressly for users, and a programming language rationale, which explains why the specification is written as it is; these are typically more informal than a specification.

Jakarta PersistenceAPI is a Jakarta EE application programming interface specification that describes the management of relational data in enterprise Java applications.

<span class="mw-page-title-main">Functional specification</span>

A functional specification in systems engineering and software development is a document that specifies the functions that a system or component must perform.

A specification often refers to a set of documented requirements to be satisfied by a material, design, product, or service. A specification is often a type of technical standard.

XPath is an expression language designed to support the query or transformation of XML documents. It was defined by the World Wide Web Consortium (W3C) and can be used to compute values from the content of an XML document. Support for XPath exists in applications that support XML, such as web browsers, and many programming languages.

The ANSI/ISO C Specification Language (ACSL) is a specification language for C programs, using Hoare style pre- and postconditions and invariants, that follows the design by contract paradigm. Specifications are written as C annotation comments to the C program, which hence can be compiled with any C compiler.

Concordion is a specification by example framework originally developed by David Peterson, and now maintained by a team of contributors, led by Nigel Charman.

Specification by example (SBE) is a collaborative approach to defining requirements and business-oriented functional tests for software products based on capturing and illustrating requirements using realistic examples instead of abstract statements. It is applied in the context of agile software development methods, in particular behavior-driven development. This approach is particularly successful for managing requirements and functional tests on large-scale projects of significant domain and organisational complexity.

Web IDL is an interface description language (IDL) format for describing application programming interfaces (APIs) that are intended to be implemented in web browsers. Its adoption was motivated by the desire to improve the interoperability of web programming interfaces by specifying how languages such as ECMAScript should bind these interfaces.

Acceptance test–driven development (ATDD) is a development methodology based on communication between the business customers, the developers, and the testers. ATDD encompasses many of the same practices as specification by example (SBE), behavior-driven development (BDD), example-driven development (EDD), and support-driven development also called story test–driven development (SDD). All these processes aid developers and testers in understanding the customer's needs prior to implementation and allow customers to be able to converse in their own domain language.

References

  1. "Release 1.4.3". January 22, 2022. Retrieved October 5, 2022.
  2. "Long Start – Gauge 0.8.3 documentation". Archived from the original on March 7, 2017. Retrieved April 28, 2017.
  3. "Long Start – Gauge 0.8.3 documentation". Archived from the original on March 7, 2017. Retrieved April 28, 2017.
  4. "Long Start – Gauge 0.8.3 documentation". Archived from the original on March 7, 2017. Retrieved April 28, 2017.
  5. "Using Gauge – Gauge 0.8.3 documentation". Archived from the original on March 6, 2017. Retrieved April 28, 2017.
  6. 1 2 "Using Gauge – Gauge 0.8.3 documentation". Archived from the original on March 6, 2017. Retrieved April 28, 2017.
  7. "Reports – Gauge 0.8.3 documentation". Archived from the original on March 6, 2017. Retrieved April 28, 2017.