Coder Social home page Coder Social logo

multi-mechanize's Introduction

Multi-Mechanize - Performance Test Framework

  • Copyright: (c) 2010-2013 Corey Goldberg (cgoldberg _at_ gmail.com)
  • License: GNU LGPLv3
  • Requires: Python 2.6 or 2.7

PyPI:multi-mechanize
Dev:git repo

Docs / Instructions

Install / Setup

Multi-Mechanize can be installed from PyPI using pip:

pip install multi-mechanize

... or download the source distribution from PyPI, unarchive, and run:

python setup.py install

... then use multimech-newproject and multimech-run to create and run your performance test projects.

Detailed Install / Setup

These instructions are for Debian/Ubuntu Linux. For other platforms, the setup is generally the same, with the exeption of installing system dependencies.

system-wide install

  • install dependencies on Debian/Ubuntu:

    $ sudo apt-get install python-pip python-matplotlib
    
  • install multi-mechanize from PyPI using Pip:

    $ sudo pip install -U multi-mechanize
    
  • create a new project:

    $ multimech-newproject my_project
    
  • run a project:

    $ multimech-run my_project
    

virtualenv + pip install (with matplotlib system package)

  • install dependencies on Debian/Ubuntu:

    $ sudo apt-get install python-virtualenv python-matplotlib
    
  • install multi-mechanize from PyPI in a virtualenv:

    $ virtualenv --system-site-packages ENV
    $ cd ENV
    $ source bin/activate
    (ENV)$ pip install multi-mechanize
    

virtualenv + pip install (with --no-site-packages)

  • install dependencies on Debian/Ubuntu:

    $ sudo apt-get install build-essential libfreetype6-dev libpng-dev
    $ sudo apt-get install python-dev python-virtualenv
    
  • install multi-mechanize and matplotlib from PyPI in a virtualenv:

    $ virtualenv ENV
    $ cd ENV
    $ source bin/activate
    (ENV)$ pip install multi-mechanize
    (ENV)$ pip install matplotlib
    

pip install latest dev branch from git repo

pip install -e git+http://github.com/cgoldberg/multi-mechanize.git#egg=multimechanize

multi-mechanize's People

Contributors

amjith avatar cgoldberg avatar chrisburr avatar hexdump42 avatar jenisys avatar msabramo avatar oleynikandrey avatar richleland avatar sharov avatar thomasvandoren avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

multi-mechanize's Issues

Traceback output while running

I got a traceback just in the middle of running the tests:

user_groups: 1
threads: 5

[============ 32% ] 97s/300s transactions: 49 timers: 0 errors: 0
Process UserGroup-1:
Traceback (most recent call last):
File "/usr/lib/python2.7/multiprocessing/process.py", line 258, in _bootstrap
self.run()
File "/opt/virtenvs/django_slice/local/lib/python2.7/site-packages/multimechanize/core.py", line 54, in run
agent_thread.join()
File "/usr/lib/python2.7/threading.py", line 667, in join
self.__block.wait()
File "/usr/lib/python2.7/threading.py", line 243, in wait
waiter.acquire()
[================100%==================] 300s/300s transactions: 248 timers: 0 errors: 0
waiting for all requests to finish...

multimech-run v1.2.0 does not work under Windows

Multi-mechanize does currently not work under Windows when multimech-run MY_PROJECT is used.
The same project runs fine under UNIX/MACOSX.

The problem appears in the Agent.run() method where the script Transaction should be created.
The real problem seems to be related w/ the multiprocessing package under Windows and/or the way how exec()/eval() is used.
The imported scripts (modules), that are imported in the multimech.core.init() part of the parent process,
are no longer present in the globals of the forked UserGroup process that tries to create and start the Agent threads.

Also note that the exec()/eval() logic mentioned above worked fine in the past w/ multi-mechanize 1.010, Python 2.5 and manually installed multiprocessing package on the Windows platform. But it does no longer work w/ the built-in multiprocessing package when Python 2.6 is used.

NOTE:
The exec()/eval() semantic that is currently used should be replaced w/ import-logic (IMHO) in a script_loader module.
But this also does not solve the problem from above (I tried it).

VERSION-INFO:

  • Windows XP SP3
  • Python 2.6.6
  • multi-mechanize 1.2.0

Wrong couting

[user_group-reader6]
threads = 250
script = cms_reader.py

[user_group-reader5]
threads = 250
script = cms_reader.py

[user_group-reader4]
threads = 250
script = cms_reader.py

[user_group-reader3]
threads = 250
script = cms_reader.py

[user_group-reader2]
threads = 250
script = cms_reader.py

[user_group-reader1]
threads = 250
script = cms_reader.py

[user_group-writer]
threads = 10
script = cms_writer.py

When i start the test i get the following output.

user_groups: 7
threads: 70

[ 1% ] 223s/36000s transactions: 29 timers: 29 errors: 0

but 70 threads is not correct.

Create transaction object with params defined in general config

For example, scripts are sending request to http://www.xyz.zxy?xxx=any_phrase on develop environment and any outher address on product environment. My url include any words from huge file so i cant add it to git repo. The file is preset on product environment but not the same place like develop environment. To change the addresses an intervention in the test scripts is required so, set all path in to config file will useful but now it is impossible.

Solution is rebuild "configure" method from utilities/run.py. This method need to read more params like args=[] or somethig like that. Methods "run" from core.UserGroup and core.Agent must take one more argument and core.Agent need to create transaction object with this one param.

Issue with directory creation on Windows

In issue #4 @bgoldfedder mentioned a problem with creating directories:

The issue on makedir failing is if there are multiple user-groups in the config
That said, still having problems running on windows. It just makes lots of results_ directories....

I think this may have to do with the way output directories are defined using some strings with hardcoded / forward slashes.

Fix simple typo: exeption -> exception

Issue Type

[x] Bug (Typo)

Steps to Replicate

  1. Examine README.rst, docs/setup.rst.
  2. Search for exeption.

Expected Behaviour

  1. Should read exception.

Semi-automated issue generated by
https://github.com/timgates42/meticulous/blob/master/docs/NOTE.md

To avoid wasting CI processing resources a branch with the fix has been
prepared but a pull request has not yet been created. A pull request fixing
the issue can be prepared from the link below, feel free to create it or
request @timgates42 create the PR. Alternatively if the fix is undesired please
close the issue with a small comment about the reasoning.

https://github.com/timgates42/multi-mechanize/pull/new/bugfix_typo_exception

Thanks.

Website URL not working

The recommended URL for the documentation (http://multimechanize.com) doesn't actually lead anywhere. It just redirects back to the author's Github page. Is there an alternate location where there is starter documentation?

'NoneType' object has no attribute 'Empty'

I get these errors (not all the time):

Exception in thread Thread-1 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 551, in __bootstrap_inner
File "/opt/virtenvs/django_slice/src/multimechanize/multimechanize/resultswriter.py", line 51, in run
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'Empty'

The config is the default config that is created with a new project.
[global]
run_time = 30
rampup = 0
results_ts_interval = 10
progress_bar = on
console_logging = off
xml_report = off

[user_group-1]
threads = 3
script = v_user.py

[user_group-2]
threads = 3
script = v_user.py

Create settings file

What do you think about creating a settings.py that handles the reading and parsing of the config file? I think it would be nice to separate that logic into another location and allow it to be used anywhere by any of the other files. An example of this would be:

from multimechanize.settings import configure
config = configure(config_file)

That could then return a config object with the following:

config.run_time
config.rampup
config.restuls_ts_interval
config.console_logging
config.progress_bar
config.results_database
config.post_run_script
config.xml_report
config.user_group_configs

A separate file would also give us a place to put any configuration-related utility methods.

Project Dead?

Is this project no longer being maintained? Is there an alternative?

Problem w/ sqlite database result storage.

Running simple test w/ non-existing database results storage fails.

$ multimech-run my_project
...
loading results into database: sqlite:///results.db

Traceback (most recent call last):
  File "/Library/Frameworks/Python.framework/Versions/Current/bin/multimech-run", line 9, in <module>
    load_entry_point('multi-mechanize==1.2.0', 'console_scripts', 'multimech-run')()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/multimechanize/utilities/run.py", line 64, in main
    run_test()
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/multimechanize/utilities/run.py", line 144, in run_test
    import multimechanize.resultsloader
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/multimechanize/resultsloader.py", line 69, in <module>
    class ResultRow(Base):
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/sqlalchemy/ext/declarative.py", line 1336, in __init__
    _as_declarative(cls, classname, cls.__dict__)
  File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/sqlalchemy/ext/declarative.py", line 1104, in _as_declarative
    "__table_args__ value must be a tuple, "
sqlalchemy.exc.ArgumentError: __table_args__ value must be a tuple, dict, or None

VERSION-INFO:

  • multi-mechanize 1.2.0
  • SQLAlchemy 0.7.5
  • OS: MACOSX 10.7

CONFIG-FILE:
results_database = sqlite:///results.db

multimech-run causes infinite loop

When I use multimech-run my_project I see unending stream of console output printing the number of user groups and threads. I am running on Python 2.7 32bit on Win 7 64bit.

I added the following code to the start of run.py to perform some inspection about the caller.
frm = inspect.stack()[1]
mod = inspect.getmodule(frm[0])
print frm

Here is the output:

C:\Users\c_gokulr>multimech-run my_project
(<frame object at 0x02377F88>, 'C:\Python27\lib\site-packages\pkg_resources.
py', 1954, 'load', [" entry = import(self.module_name, globals(),glob
als(), ['name'])\n"], 0)
[pkg_resources] caller!

user_groups: 1
threads: 2

(<frame object at 0x0253DC40>, 'C:\Python27\lib\site-packages\pkg_resources.
py', 1954, 'load', [" entry = import(self.module_name, globals(),glob
als(), ['name'])\n"], 0)
[pkg_resources] caller!

user_groups: 1
threads: 2

(<frame object at 0x0233DC40>, 'C:\Python27\lib\site-packages\pkg_resources.
py', 1954, 'load', [" entry = import(self.module_name, globals(),glob
als(), ['name'])\n"], 0)
[pkg_resources] caller!

user_groups: 1
threads: 2

(<frame object at 0x0242DC40>, 'C:\Python27\lib\site-packages\pkg_resources.
py', 1954, 'load', [" entry = import(self.module_name, globals(),glob
als(), ['name'])\n"], 0)
[pkg_resources] caller!

user_groups: 1
threads: 2

(<frame object at 0x0233DC40>, 'C:\Python27\lib\site-packages\pkg_resources.
py', 1954, 'load', [" entry = import(self.module_name, globals(),glob
als(), ['name'])\n"], 0)
[pkg_resources] caller!

user_groups: 1
threads: 2

(<frame object at 0x0245DC40>, 'C:\Python27\lib\site-packages\pkg_resources.
py', 1954, 'load', [" entry = import(self.module_name, globals(),glob
als(), ['name'])\n"], 0)
[pkg_resources] caller!

user_groups: 1
threads: 2

(<frame object at 0x0240DC40>, 'C:\Python27\lib\site-packages\pkg_resources.
py', 1954, 'load', [" entry = import(self.module_name, globals(),glob
als(), ['name'])\n"], 0)
[pkg_resources] caller!

user_groups: 1
threads: 2

(<frame object at 0x0242DC40>, 'C:\Python27\lib\site-packages\pkg_resources.
py', 1954, 'load', [" entry = import(self.module_name, globals(),glob
als(), ['name'])\n"], 0)
[pkg_resources] caller!

user_groups: 1
threads: 2

(<frame object at 0x0239DC40>, 'C:\Python27\lib\site-packages\pkg_resources.
py', 1954, 'load', [" entry = import(self.module_name, globals(),glob
als(), ['name'])\n"], 0)
[pkg_resources] caller!
^C
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
File "", line 1, in
File "", line 1, in
File "", line 1, in
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
Traceback (most recent call last):
C:\Users\c_gokulr> File "C:\Python27\lib\multiprocessing\forking.py", line 346,
in main
File "C:\Python27\lib\multiprocessing\forking.py", line 346, in main
Traceback (most recent call last):
File "C:\Python27\lib\multiprocessing\forking.py", line 346, in main
File "", line 1, in
File "", line 1, in
File "", line 1, in
File "", line 1, in
File "C:\Python27\Scripts\multimech-run-script.py", line 8, in
File "", line 1, in
File "C:\Python27\lib\multiprocessing\forking.py", line 346, in main
File "C:\Python27\lib\multiprocessing\forking.py", line 346, in main
File "C:\Python27\lib\multiprocessing\forking.py", line 346, in main
File "C:\Python27\lib\multiprocessing\forking.py", line 346, in main
prepare(preparation_data)
prepare(preparation_data)
prepare(preparation_data)
File "C:\Python27\lib\multiprocessing\forking.py", line 346, in main
load_entry_point('multi-mechanize==1.2.0', 'console_scripts', 'multi
mech-run')()
File "C:\Python27\lib\multiprocessing\forking.py", line 461, in prepare
File "C:\Python27\lib\multiprocessing\forking.py", line 461, in prepare
File "C:\Python27\lib\multiprocessing\forking.py", line 461, in prepare
prepare(preparation_data)
prepare(preparation_data)
prepare(preparation_data)
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 69, in main
prepare(preparation_data)
prepare(preparation_data)
File "C:\Python27\lib\multiprocessing\forking.py", line 461, in pr
epare
File "C:\Python27\lib\multiprocessing\forking.py", line 461, in prepare
File "C:\Python27\lib\multiprocessing\forking.py", line 461, in prepare
File "C:\Python27\lib\multiprocessing\forking.py", line 461, in prepare
File "C:\Python27\lib\multiprocessing\forking.py", line 461, in prepare
'parents_main', file, path_name, etc
'parents_main', file, path_name, etc
'parents_main', file, path_name, etc
run_test()
File "C:\Python27\Scripts\multimech-run-script.py", line 8, in <module

  File "C:\Python27\Scripts\multimech-run-script.py", line 8, in <module>

File "C:\Python27\Scripts\multimech-run-script.py", line 8, in
'parents_main', file, path_name, etc
'parents_main', file, path_name, etc
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 128, in run_test
'parents_main', file, path_name, etc
'parents_main', file, path_name, etc
'parents_main', file, path_name, etc
File "C:\Python27\Scripts\multimech-run-script.py", line 8, in <module

File "C:\Python27\Scripts\multimech-run-script.py", line 8, in
File "C:\Python27\Scripts\multimech-run-script.py", line 8, in
File "C:\Python27\Scripts\multimech-run-script.py", line 8, in
load_entry_point('multi-mechanize==1.2.0', 'console_scripts', 'multimech-run')()

load_entry_point('multi-mechanize==1.2.0', 'console_scripts', 'multimech-run')()

load_entry_point('multi-mechanize==1.2.0', 'console_scripts', 'multimech-run')()

File "C:\Python27\Scripts\multimech-run-script.py", line 8, in
time.sleep(.5)
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 69, in main
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multim
echanize\utilities\run.py", line 69, in main
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multim
echanize\utilities\run.py", line 69, in main
load_entry_point('multi-mechanize==1.2.0', 'console_scripts', 'multimech-run')()

load_entry_point('multi-mechanize==1.2.0', 'console_scripts', 'multimech-run')()

load_entry_point('multi-mechanize==1.2.0', 'console_scripts', 'multimech-run')()

KeyboardInterruptload_entry_point('multi-mechanize==1.2.0', 'console_scripts

', 'multimech-run')()
load_entry_point('multi-mechanize==1.2.0', 'console_scripts', 'multimech-run')()

File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 69, in main
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\mu
ltimechanize\utilities\run.py", line 69, in main
run_test()
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 69, in main

File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 69, in main
File "C:\Python27\lib\site-packages\pkg_resources.py", line 318, in load_entry
_point
run_test()
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multim
echanize\utilities\run.py", line 128, in run_test
run_test()
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-
py2.7.egg\multimechanize\utilities\run.py", line 128, in run_test
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 128, in run_test
time.sleep(.5)
return get_distribution(dist).load_entry_point(group, name)
KeyboardInterruptrun_test()
run_test()
run_test()
run_test()

File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 128, in run_test
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 128, in run_test
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 128, in run_test
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 128, in run_test
File "C:\Python27\lib\site-packages\pkg_resources.py", line 2221, in load_entr
y_point
time.sleep(.5)
time.sleep(.5)
time.sleep(.5)
time.sleep(.5)
time.sleep(.5)
time.sleep(.5)
KeyboardInterruptKeyboardInterrupt

KeyboardInterruptKeyboardInterruptKeyboardInterruptKeyboardInterrupt

return ep.load()

File "C:\Python27\lib\site-packages\pkg_resources.py", line 1954, in load
entry = import(self.module_name, globals(),globals(), ['name'])
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\utilities\run.py", line 38, in
import multimechanize.results as results
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\results.py", line 14, in
import reportwriterxml
File "C:\Python27\lib\site-packages\multi_mechanize-1.2.0-py2.7.egg\multimecha
nize\reportwriterxml.py", line 10, in
from xml.etree import ElementTree as ET
File "C:\Python27\lib\xml\etree\ElementTree.py", line 59, in
"Comment",
KeyboardInterrupt

list index out of range when writing results

There are a few situations that lead to the results.py hitting a list index out of range. It can be easily produced by just setting the run_time in the examples/config.cfg time to 1 second and this will trigger the issue. I tried figuring out exactly why it was happening but was unable to diagnose the issue quickly so I came up with an easy to reproduce scenario to hopefully have this figured out as it actually affects a different scenario that I've developed for work.

can not find test script: v_user.py

multimech-newproject my_project
multimech-run my_project
i don't change everything, ( v_user.py config.cfg ) but also meet this problem.

ERROR: can not find test script: v_user.py. aborting user group: user_group-1
ERROR: can not find test script: v_user.py. aborting user group: user_group-1
ERROR: can not find test script: v_user.py. aborting user group: user_group-1

multi-mechanize still doesn't work on Windows

Hi,

i can't run multi-mechanize successfully on Windows 7.

When i run the project, i get two issues (after applied the "import sys" to the resultswriter.py):

ERROR: Can not create output directory

and

Traceback (most recent call last):
  File "C:\Python26\Scripts\multimech-run-script.py", line 8, in <module>
    load_entry_point('multi-mechanize==1.2.0.1', 'console_scripts', 'multimech-run')()
  File "C:\Python26\lib\site-packages\multimechanize\utilities\run.py", line 67, in main
    run_test(project_name, cmd_opts)
  File "C:\Python26\lib\site-packages\multimechanize\utilities\run.py", line 139, in run_test
    results.output_results(output_dir, 'results.csv', run_time, rampup, results_ts_interval, user_group_configs, xml_report)
  File "C:\Python26\lib\site-packages\multimechanize\results.py", line 19, in output_results
    results = Results(results_dir + results_file, run_time)
  File "C:\Python26\lib\site-packages\multimechanize\results.py", line 253, in __init__
    self.epoch_start = self.resp_stats_list[0].epoch_secs
IndexError: list index out of range

The first problem raises when the program tries to recreate the folder that has already created. I believe that this problem is connected to some thread-problem.

All i get is a result folder with an empty csv.

System:
Windows 7 64-bit
Python 2.6 32-bit
multi-mechanize last master commit (pip install git+)

config

[global]
run_time = 30
rampup = 1
results_ts_interval = 10

[user_group-1]
threads = 10
script = v2_user.py
import requests

class Transaction(object):
    def run(self):
        r = requests.get('https://github.com/timeline.json')
        r.raw.read()

Files are really similar or equal to the docs.

What can the problem be?

I'm not so good at python to work out a solution.

ReportsWriter missing import of sys

Causes error when line 29 sys.stderr hit since sys is not imported

Bigger question: Why is makedirs (and rest of system) failing on WIndows 7

Errors not reported correctly in results.csv

All I see in the results.csv error column is " Message: '' ". For example:

1273,260.942,1375823160,user_group-1,16.754579,Message: '' ,{'load': 1375823142.8310008, 'total': 2.2913360595703125, 'get': 1.105006217956543}

However, the exception is being printed in the shell. For example:

Exception in thread Thread-51:
Traceback (most recent call last):
File "/usr/lib64/python2.7/threading.py", line 552, in bootstrap_inner
self.run()
File "/devel/baas/tools/perf/selenium/env/src/multimechanize/multimechanize/core.py", line 98, in run
trans = self.script_module.Transaction()
File "/devel/baas/tools/perf/selenium/test_scripts/v_user.py", line 52, in __init

self._webdriver = Remote(self._service.service_url, _CAPABILITIES)
File "/devel/baas/tools/perf/selenium/env/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 72, in init
self.start_session(desired_capabilities, browser_profile)
File "/devel/baas/tools/perf/selenium/env/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 114, in start_session
'desiredCapabilities': desired_capabilities,
File "/devel/baas/tools/perf/selenium/env/lib/python2.7/site-packages/selenium/webdriver/remote/webdriver.py", line 165, in execute
self.error_handler.check_response(response)
File "/devel/baas/tools/perf/selenium/env/lib/python2.7/site-packages/selenium/webdriver/remote/errorhandler.py", line 164, in check_response
raise exception_class(message, screen, stacktrace)
WebDriverException: Message: u'Unable to either launch or connect to Chrome. Please check that ChromeDriver is up-to-date. Using Chrome binary at: /baasbuild/thirdparty/chrome/27.0.1453.15/bin/google-chrome'

what's the meaning of 80pct, 90pct & rate

I see 80pct and rate in the performance testing report, but there is no any introduction in doc, Could you please help to clarify?

1.what 's the basis of 80pct, the transaction number or the max response time?
2.what is the meaning of rate?

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.