Code Monkey home page Code Monkey logo

perf-ui's Introduction

PERF-UI

FOSSA Status

Tool for UI Performance testing

Quick and easy start

These simple steps will run Perf-UI container for test which described in ExampleTest.yaml

  1. Install Docker

  2. Start container and pass 3 config options and mount reports folder:

    n - number of test executions

    t - test file name

    e - test suite or scenario from test file

    your_local_path_to_reports - path on your local filesystem where you want to store reports from this execution

For example:

    docker run -t -v <your_local_path_to_reports>:/tmp/reports \
    --rm --name perfui \
    getcarrier/perf-ui -n 1 -t ExampleTest.yaml -e Demo 

Results of test example you can find at your_local_path_to_reports as Lighthouse html reports, Screenshots of opened and failed pages (if any) and JUnit xml report.

Configuration

To receive all the benefits from Perf-UI you should use InfluxDB container as data storage for page timing API data and Grafana for data visualization using our dashboard.

Also you could use the ReportPortal as storage of screenshots, lighthouse results and error logs of failed pages, as auto analyzer for failed pages.

However neither Report Portal or InfluxDB with Grafana are not required inside test config, without them you will receive Lighthouse html reports, Screenshots of opened and failed pages (if any) and JUnit xml report at your_local_path_to_reports.


Test scenarios can be configured as yaml (e.g. ExampleTest.yaml) file following the config description below:

ExampleTest.yaml structure example:

# InfluxDB config (not required)
# Required fields:
#  - url
#  - db_name 
# User and password are required If your InfluxDB using auth

# InfluxDB config example:
influxdb:                                   
   url: http://your_influx_url:port/        # Path to InfluxDB
   db_name: your_database                   # Database name
   user:                                    # User name, if you enabled auth in InfluxDB
   password:                                # User password for above user name
   
   
# ReportPortal tool config (not required)
# Required fields:
#  - rp_host
#  - rp_token
#  - rp_project_name
#  - rp_launch_name

# ReportPortal config example:
reportportal:                               
   rp_host: rp_url                          # ReportPortal API url
   rp_token: your-rp-uuid-token             # Long-living auth token (UUID) for ReportPortal
   rp_project_name: your_project_name       # ReportPortal project name where results will be send
   rp_launch_name: UI_Google_Test           # Launch name for your test
   rp_launch_tags:                          # Launch tags to filter existing launches and show them on RP dashboard
     - Google Test
     - www.google.com

# Lighthouse tool config (not required)
# Lighthouse config example:
lighthouseDeviceEmulate:                                   
   mobile: (false|true)                     # Enable or disable audit for mobile version               
   desktop: (false|true)                    # Enable or disable audit for desktop device

# Test Config
# For test config is required: 
#  - Test Suite name (e.g. Demo). Name should not contain spaces.
#  - Test Case name (e.g. SearchWithParameters). Name should not contain spaces.
#  - url (e.g.  https://www.etsy.com/ ) Required only for first Test Case. 
#                                       Next Test Case will be executing with this parameter automatically.
#                                       You have opportunity to use "Open URL Action" instead this block

# Test Config Structure (example)
Demo:                                         # Test Suite

  SearchWithParameters:                         # Test Case

    url: https://www.etsy.com/                      # Page URL (Starting URL) 
    parameters:                                     # URL parameters. (Each parameter is for different page)
      - search?q=shoes                               
      - search?q=hats

    steps:                                          # Test Case Step (List of action which needs to be executed. Each action is executed consequentially)

      - url: https://www.etsy.com                       # Open URL Action (Navigate to a specified page.)

      - input:                                        # Input Action (Entering data into specified field)
          xpath: //input[@id='search-query']            # locator for WebElement (You can use "xpath,css,id,name,class" type of locators)
          value: shirt                                  # data which you want to enter

      - check:                                        # Check Action (check page state or WebElement state)
          xpath: //button[@value='Search']              # locator for WebElement (You can use "xpath,css,id,name,class" type of locators)

      - checkIsNot:                                     # Check Element is Not Visible Action (check page state or WebElement state)
          xpath: //button[@value='Search']              # locator for WebElement (You can use "xpath,css,id,name,class" type of locators)

      - click:                                        # Click Action (Click specified WebElement)
          xpath: //button[@value='Search']              # locator for WebElement (You can use "xpath,css,id,name,class" type of locators)

      - switchToFrame:                                # Switch To Frame Action (Switch to specified frame) 
          id: 2                                         # locator for Frame (You can use "xpath","css","id" type of locators)

      - switchToDefault: true                         # Switch To Default Action (Switch to default content) 

      - executeJS:                                    # ExecuteJS Action
          value: window.location.replace("./");         # type here your javascript

    check:                                         # Same as Check Action, you would using when you need simple condition check in open page
        xpath: //div[@class='a-section a-spacing-small a-spacing-top-small']

InfluxDB configuration cases:

  1. For using InfluxDB, you should have accessible web link to it.
  2. If your InfluxDB and Perf-UI containers located on the same host and you do not have accessible web link to InfluxDB, use link to InfluxDB container as described below:
    • Change db_url at YourTest.yaml to http://influx_db_link:<your_db_port>/
    • At perf-ui startup command, before --name perfui parameter add --link <your_influxdb_name_or_id>:influx_db_link
    • Your run command should looks like:
          docker run -t -v <your_local_path_to_reports>:/tmp/reports \ 
          -v <your_local_path_to_test>/ExampleTest.yaml:/tmp/tests/ExampleTest.yaml \
          --rm --link <your_influxdb_name_or_id>:influx_db_link --name perfui \
          getcarrier/perf-ui -n 1 -t ExampleTest.yaml -e Demo 
      

To run your configured scenario, mount it to getcarrier/perf-ui container as:

-v <your_local_path_to_test>/ExampleTest.yaml:/tmp/tests/ExampleTest.yaml

When you configured your own test file run command should looks example below (where ExampleTest.yaml and other parameters described above should be yours):

    docker run -t -v <your_local_path_to_reports>:/tmp/reports \ 
    -v <your_local_path_to_test>/ExampleTest.yaml:/tmp/tests/ExampleTest.yaml \
    --rm --name perfui \
    getcarrier/perf-ui -n 1 -t ExampleTest.yaml -e Demo

To run your test in debug mode use argument:

-d


Minimal requirements

  1. Grafana version not higher then 5.3.4
  2. Minimum 2 GB RAM to start container without errors

License

FOSSA Status

perf-ui's People

Contributors

arozumenko avatar fossabot avatar hunkom avatar zhenyaderyaka avatar

Stargazers

 avatar  avatar

Watchers

 avatar  avatar  avatar

perf-ui's Issues

Don't support "wait until an element disappears" function

The function should work properly even if an element disappears from the DOM tree.
And it shouldn't wait for default webDriver timeout (e.g. 60 seconds) to make an assumption that element has disappeared.
The webDriver should check for element state every 0.5 - 1 second.

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.