Make continuous deployment safe by comparing before and after webpage screenshots for each release. Depicted shows when any visual, perceptual differences are found. This is the ultimate, automated end-to-end test.
`Found 2 total URLs, 2 good HTML pages; starting screenshots
ERROR workers.py:504] Error in workflow=dpxdt.client.release_worker.CreateReleaseWorkflow({args: ('1', '2016-08-19 10:03:18.829636', 'http://10.0.1.69:80/home.do'), interrupted: False, parent: main.SiteDiff#140501029204752, kwargs: {}})#140501029205072 from item=dpxdt.client.fetch_worker.FetchItem({username: None, result_path: None, parent: dpxdt.client.release_worker.CreateReleaseWorkflow#140501029205072, url: '10.0.2.22:5000/create_release', status_code: 400, timeout_seconds: 30, done: True, content_type: None, post: {build_id: '1', url: 'http://10.0.1.69:80/home.do', release_name: '2016-08-19 10:03:18.829636'}, password: None, data: None, _data_json: None})#140501029204816, error=None
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 492, in _progress_workflow
next_item = generator.send(item)
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/release_worker.py", line 123, in run
raise CreateReleaseError('Bad response: %r' % call)
CreateReleaseError: Bad response: dpxdt.client.fetch_worker.FetchItem({username: None, result_path: None, parent: dpxdt.client.release_worker.CreateReleaseWorkflow#140501029205072, url: '10.0.2.22:5000/create_release', status_code: 400, timeout_seconds: 30, done: True, content_type: None, post: {build_id: '1', url: 'http://10.0.1.69:80/home.do', release_name: '2016-08-19 10:03:18.829636'}, password: None, data: None, _data_json: None})#140501029204816
ERROR workers.py:504] Error in workflow=main.SiteDiff({args: (), root: True, interrupted: False, kwargs: {heartbeat: <class 'dpxdt.client.workers.PrintWorkflow'>, upload_build_id: '1', upload_release_name: None, ignore_prefixes: [], start_url: 'http://10.0.1.69:80/home.do'}})#140501029204752 from item=dpxdt.client.release_worker.CreateReleaseWorkflow({parent: main.SiteDiff#140501029204752, kwargs: {}, args: ('1', '2016-08-19 10:03:18.829636', 'http://10.0.1.69:80/home.do'), interrupted: False, done: True, error: (<class 'dpxdt.client.release_worker.CreateReleaseError'>, CreateReleaseError("Bad response: dpxdt.c...)})#140501029205072, error=(<class 'dpxdt.client.release_worker.CreateReleaseError'>, CreateReleaseError("Bad response: dpxdt.client.fetch_worker.FetchItem({username: None, result_path: None, parent: dpxdt.client.release_worker.CreateReleaseWorkflow#140501029205072, url: '10.0.2.22:5000/create_release', status_code: 400, timeout_seconds: 30, done: True, content_type: None, post: {build_id: '1', url: 'http://10.0.1.69:80/home.do', release_name: '2016-08-19 10:03:18.829636'}, password: None, data: None, _data_json: None})#140501029204816",), <traceback object at 0x7fc8f0e8dc20>)
Traceback (most recent call last):
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 482, in _progress_workflow
next_item = generator.throw(_error)
File "./dpxdt/tools/site_diff.py", line 280, in run
upload_build_id, upload_release_name, start_url)
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 492, in _progress_workflow
next_item = generator.send(item)
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/release_worker.py", line 123, in run
raise CreateReleaseError('Bad response: %r' % call)
CreateReleaseError: Bad response: dpxdt.client.fetch_worker.FetchItem({username: None, result_path: None, parent: dpxdt.client.release_worker.CreateReleaseWorkflow#140501029205072, url: '10.0.2.22:5000/create_release', status_code: 400, timeout_seconds: 30, done: True, content_type: None, post: {build_id: '1', url: 'http://10.0.1.69:80/home.do', release_name: '2016-08-19 10:03:18.829636'}, password: None, data: None, _data_json: None})#140501029204816
Traceback (most recent call last):
File "./dpxdt/tools/site_diff.py", line 379, in
main(sys.argv)
File "./dpxdt/tools/site_diff.py", line 375, in main
upload_release_name=FLAGS.upload_release_name)
File "./dpxdt/tools/site_diff.py", line 346, in real_main
coordinator.wait_one()
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 461, in wait_one
item.check_result()
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 482, in _progress_workflow
next_item = generator.throw(_error)
File "./dpxdt/tools/site_diff.py", line 280, in run
upload_build_id, upload_release_name, start_url)
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 492, in _progress_workflow
next_item = generator.send(item)
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/release_worker.py", line 123, in run
raise CreateReleaseError('Bad response: %r' % call)
dpxdt.client.release_worker.CreateReleaseError: Bad response: dpxdt.client.fetch_worker.FetchItem({username: None, result_path: None, parent: dpxdt.client.release_worker.CreateReleaseWorkflow#140501029205072, url: '10.0.2.22:5000/create_release', status_code: 400, timeout_seconds: 30, done: True, content_type: None, post: {build_id: '1', url: 'http://10.0.1.69:80/home.do', release_name: '2016-08-19 10:03:18.829636'}, password: None, data: None, _data_json: None})#140501029204816
Exception in thread Thread-2 (most likely raised during interpreter shutdown):Exception in thread Thread-1 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 132, in run
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'Empty'
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 132, in run
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'Empty'`
Seems related to issue #88
I get this no matter what site I run against or how I run site_diff.py, happens every time.
Running on Antergos 4.7.0-1-ARCH inside a virtualbox VM
When attempting to run site_diff.py:
`Found 2 total URLs, 2 good HTML pages; starting screenshots ERROR workers.py:504] Error in workflow=dpxdt.client.release_worker.CreateReleaseWorkflow({args: ('1', '2016-08-19 10:03:18.829636', 'http://10.0.1.69:80/home.do'), interrupted: False, parent: main.SiteDiff#140501029204752, kwargs: {}})#140501029205072 from item=dpxdt.client.fetch_worker.FetchItem({username: None, result_path: None, parent: dpxdt.client.release_worker.CreateReleaseWorkflow#140501029205072, url: '10.0.2.22:5000/create_release', status_code: 400, timeout_seconds: 30, done: True, content_type: None, post: {build_id: '1', url: 'http://10.0.1.69:80/home.do', release_name: '2016-08-19 10:03:18.829636'}, password: None, data: None, _data_json: None})#140501029204816, error=None Traceback (most recent call last): File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 492, in _progress_workflow next_item = generator.send(item) File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/release_worker.py", line 123, in run raise CreateReleaseError('Bad response: %r' % call) CreateReleaseError: Bad response: dpxdt.client.fetch_worker.FetchItem({username: None, result_path: None, parent: dpxdt.client.release_worker.CreateReleaseWorkflow#140501029205072, url: '10.0.2.22:5000/create_release', status_code: 400, timeout_seconds: 30, done: True, content_type: None, post: {build_id: '1', url: 'http://10.0.1.69:80/home.do', release_name: '2016-08-19 10:03:18.829636'}, password: None, data: None, _data_json: None})#140501029204816 ERROR workers.py:504] Error in workflow=main.SiteDiff({args: (), root: True, interrupted: False, kwargs: {heartbeat: <class 'dpxdt.client.workers.PrintWorkflow'>, upload_build_id: '1', upload_release_name: None, ignore_prefixes: [], start_url: 'http://10.0.1.69:80/home.do'}})#140501029204752 from item=dpxdt.client.release_worker.CreateReleaseWorkflow({parent: main.SiteDiff#140501029204752, kwargs: {}, args: ('1', '2016-08-19 10:03:18.829636', 'http://10.0.1.69:80/home.do'), interrupted: False, done: True, error: (<class 'dpxdt.client.release_worker.CreateReleaseError'>, CreateReleaseError("Bad response: dpxdt.c...)})#140501029205072, error=(<class 'dpxdt.client.release_worker.CreateReleaseError'>, CreateReleaseError("Bad response: dpxdt.client.fetch_worker.FetchItem({username: None, result_path: None, parent: dpxdt.client.release_worker.CreateReleaseWorkflow#140501029205072, url: '10.0.2.22:5000/create_release', status_code: 400, timeout_seconds: 30, done: True, content_type: None, post: {build_id: '1', url: 'http://10.0.1.69:80/home.do', release_name: '2016-08-19 10:03:18.829636'}, password: None, data: None, _data_json: None})#140501029204816",), <traceback object at 0x7fc8f0e8dc20>) Traceback (most recent call last): File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 482, in _progress_workflow next_item = generator.throw(_error) File "./dpxdt/tools/site_diff.py", line 280, in run upload_build_id, upload_release_name, start_url) File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 492, in _progress_workflow next_item = generator.send(item) File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/release_worker.py", line 123, in run raise CreateReleaseError('Bad response: %r' % call) CreateReleaseError: Bad response: dpxdt.client.fetch_worker.FetchItem({username: None, result_path: None, parent: dpxdt.client.release_worker.CreateReleaseWorkflow#140501029205072, url: '10.0.2.22:5000/create_release', status_code: 400, timeout_seconds: 30, done: True, content_type: None, post: {build_id: '1', url: 'http://10.0.1.69:80/home.do', release_name: '2016-08-19 10:03:18.829636'}, password: None, data: None, _data_json: None})#140501029204816 Traceback (most recent call last): File "./dpxdt/tools/site_diff.py", line 379, in
main(sys.argv)
File "./dpxdt/tools/site_diff.py", line 375, in main
upload_release_name=FLAGS.upload_release_name)
File "./dpxdt/tools/site_diff.py", line 346, in real_main
coordinator.wait_one()
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 461, in wait_one
item.check_result()
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 482, in _progress_workflow
next_item = generator.throw(_error)
File "./dpxdt/tools/site_diff.py", line 280, in run
upload_build_id, upload_release_name, start_url)
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 492, in _progress_workflow
next_item = generator.send(item)
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/release_worker.py", line 123, in run
raise CreateReleaseError('Bad response: %r' % call)
dpxdt.client.release_worker.CreateReleaseError: Bad response: dpxdt.client.fetch_worker.FetchItem({username: None, result_path: None, parent: dpxdt.client.release_worker.CreateReleaseWorkflow#140501029205072, url: '10.0.2.22:5000/create_release', status_code: 400, timeout_seconds: 30, done: True, content_type: None, post: {build_id: '1', url: 'http://10.0.1.69:80/home.do', release_name: '2016-08-19 10:03:18.829636'}, password: None, data: None, _data_json: None})#140501029204816
Exception in thread Thread-2 (most likely raised during interpreter shutdown):Exception in thread Thread-1 (most likely raised during interpreter shutdown):
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner
File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 132, in run
<type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'Empty'
Traceback (most recent call last): File "/usr/lib/python2.7/threading.py", line 801, in __bootstrap_inner File "/usr/lib/python2.7/site-packages/dpxdt-0.1.6-py2.7.egg/dpxdt/client/workers.py", line 132, in run <type 'exceptions.AttributeError'>: 'NoneType' object has no attribute 'Empty'` Seems related to issue #88
I get this no matter what site I run against or how I run site_diff.py, happens every time. Running on Antergos 4.7.0-1-ARCH inside a virtualbox VM