Coder Social home page Coder Social logo

lineup's Introduction

Lineup

Logo

Lineup is doing automated testing of webpage designs, eg. in continious delivery. If you push new code to production, you can evaluate the design of your page compared to a defined base design and get an analysis about the difference of the designs:

For all images that you want to compare, you will receive information about how many pixel are different between the two image version and an image, that contains only the parts, that changed, a "difference image".

Example view of base (left), new (right) as well as diff image. Picture: Example view of base (left), new (right) as well as diff image. In this example, the margin around the bottom headline increased, thus some of the elements moved down.

Requirements

A firefox browser must be installed, as well as phantomjs.

Usage

Add it into your Gemfile:

gem "lineup"

Or install it manually with the following command:

gem install lineup

Do a base reference screenshot of you application:

require 'lineup'
lineup = Lineup::Screenshot.new('https://www.otto.de')
lineup.record_screenshot('base')

Do something (deployment of your new code) and take a new screenshot

lineup.record_screenshot('new')

Analyse the results:

lineup.compare('new', 'base')
 => [{:url => 'sport', :width => 600, :difference => 0.7340442722738748,
    :base_file => '/home/name/lineup/screenshots/frontpage_600_base.png'
    :new_file =>  '/home/name/lineup/screenshots/frontpage_600_new.png'
    :diff_file => '/home/name/lineup/screenshots/frontpage_600_DIFFERENCE.png' }]

You can save it for later use:

lineup.save_json('/home/name/lineup/results/')
 => '/home/name/lineup/results/log.json'

More configuration:

There are multiple ways to specify what to lineup and compare.

By specifying different urls via #urls:

lineup = Lineup::Screenshot.new('https://www.otto.de')
lineup.urls('/, /multimedia, /sport')

This will do analysis of otto.de root (frontpage), otto.de/multimedia and otto.de/sport. It requires a comma separated string. Default value is only root.

By specifying different resolutions via #resolutions:

lineup = Lineup::Screenshot.new('https://www.otto.de')
lineup.resolutions('600, 800, 1200')

The values are the browser width in pixel. For each size an analysis is done. It require a comma separated string. Default values are 640px, 800px and 1180px.

By specifying a wait time for asychron elements on a page via #wait_for_asynchron_pages:

lineup = Lineup::Screenshot.new('https://www.otto.de')
lineup.wait_for_asynchron_pages(5)

The wait time is the time in seconds lineup will wait after the page load before it takes a screenshot. In this time third party tools, AJAX or js as well as fonts can be (lazy) loaded. The wait time has no upper limit.

By specifying a filepath for the screenshots via #filepath_for_images:

lineup = Lineup::Screenshot.new('https://www.otto.de')
lineup.filepath_for_images('/home/myname/lineup/screenshots')

Creates a file and saves the screenshots in the file. Default is "#{Dir.pwd}/screenshots"

By specifying a filepath for the difference image via #difference_path:

lineup = Lineup::Screenshot.new('https://www.otto.de')
lineup.difference_path('/home/myname/lineup/result')

Creates a file and saves the difference image in the file. Default is "#{Dir.pwd}/screenshots"

By specifying wether or not to use phantomjs via #use_phantomjs:

lineup = Lineup::Screenshot.new('https://www.otto.de')
lineup.use_phantomjs(true)

If false the screenshots are taken in Firefox. #load_json_config:

Load all above configs from a json file via

lineup = Lineup::Screenshot.new('https://www.otto.de')
lineup.load_json_config('/home/myname/lineup/config.json')

While my file contains all relevant information

{
  "urls":"/multimedia, /sport",
  "resolutions":"600,800,1200",
  "filepath_for_images":"~/images/",
  "use_phantomjs":true,
  "difference_path":"#/images/diff",
  "wait_for_asynchron_pages":5
}

However, if the configuration is done with a json object, it needs to contain all information, there is no optional parameter.

Example:

base_name = 'name-for-base-screenshot'
new_name = 'name-for-new-screenshot'
urls = '/, multimedia, sport'
resolutions = '600, 800, 1200'
images_path = '/home/myname/lineup/screenshots'
difference_path = '/home/myname/lineup/results'
json_path = 'home/myname/lineup/results'
phantomjs = true

lineup = Lineup::Screenshot.new('https://www.otto.de')
lineup.urls(urls)
lineup.resolutions(resolutions)
lineup.filepath_for_images(images_path
lineup.difference_path(difference_path)
lineup.use_phantomjs(phantomjs)
    
lineup.record_screenshot(base_name)
# do sth. (eg. deploy new software)
lineup.record_screenshot(new_name)
lineup.save_json(json_path)

Now open home/myname/lineup/results and find: the difference files and a log.json with all information about what images are not the same.

Contribute

Please do!

lineup's People

Contributors

mediamarco avatar redvox avatar simonmonecke avatar stefandenner avatar

Watchers

 avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.