Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/peppelinux/videodrone
WebRTC Selenium HQ tests in python.
https://github.com/peppelinux/videodrone
python-3 selenium selenium-python unit-testing unittest webrtc
Last synced: 25 days ago
JSON representation
WebRTC Selenium HQ tests in python.
- Host: GitHub
- URL: https://github.com/peppelinux/videodrone
- Owner: peppelinux
- License: apache-2.0
- Created: 2020-09-25T14:21:06.000Z (about 4 years ago)
- Default Branch: master
- Last Pushed: 2021-01-16T01:32:06.000Z (almost 4 years ago)
- Last Synced: 2024-09-29T02:05:45.102Z (about 1 month ago)
- Topics: python-3, selenium, selenium-python, unit-testing, unittest, webrtc
- Language: Python
- Homepage:
- Size: 47.5 MB
- Stars: 19
- Watchers: 5
- Forks: 1
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE
Awesome Lists containing this project
README
VideoDrone
----------How many connected users your favourite open source video conferencing solution can handle?
That's the question that __videodrone__ wants to answer. Empirically.Videodrone tests popular WebRTC Platforms with Selenium HQ and Python, aiming
to be a lightweight build system for load test orchestration.At this moment only chrome driver was implemented and well tested on Debian based distributions,
fill free to contribute with your "drone connector". See [Drone Connectors](#drone-connectors) for further informations.Requirements:
- python {36,37,38}
- selenium
- chromium web browserAvailable drones:
- [BBB meet GARR](https://blue.meet.garr.it), [bbbmeet_garr_chrome](src/videodrone/drones/bbbmeet_garr_chrome.py)
- [Pexip GARR](), [pexip_garr_chrome](src/videodrone/drones/pexip_garr_chrome.py)
- [jitsi](https://meet.jit.si/), [jitsi_chrome](src/videodrone/drones/jitsi_chrome.py)
- [Edu meet GARR](https://edu.meet.garr.it/), [edumeet_garr_chrome](src/videodrone/drones/edumeet_garr_chrome.py)
- [Open meet GARR](https://open.meet.garr.it/), [open_garr_chrome](src/videodrone/drones/open_garr_chrome.py)
- [lepida #iorestoacasa work](https://lepida1.iorestoacasa.work), [lepida_iorestoacasawork_chrome](src/videodrone/drones/lepida_iorestoacasawork_chrome.py)You should know, that:
- WebRTC needs a huge load, on a intel i7 processor you would start from 5 to 8 drones
- hundreds of drones should be handled in a distribuited environment, a cluster of videodrones
- Docker is the fastest way to built a fully working environment, ready to go
- Drones have default hardcoded URLS in their code, please use `-url` parameter to overrideSetup
-----Provide a fully working python3 pip environment, with `virtualenv` installed in.
You can even use `build.sh` to build your videodrone project.
![example](gallery/videodrone_autobuild.3-min.gif)Prepare environment
````
apt install python3-pip wget chromium chromium-driver unzip
pip3 install --upgrade pip
pip3 install virtualenv
````Install videodrone.
````
mkdir VideoDrones && cd VideoDrones
virtualenv -ppython3 env && source env/bin/activate
pip install videodrone
````Create the following directories before executing `videodrone`.
- y4m, where your preferred y4m files resides. They will be used randomically.
- `mkdir y4ms`
- `wget https://media.xiph.org/video/derf/y4m/students_cif.y4m -O y4ms/students_cif.y4m`
- drivers, where your selenium drivers resides.Build script, DEPRECABLE: tested on Debian10 and Ubuntu Focal 20.04
````
wget https://raw.githubusercontent.com/peppelinux/videodrone/master/build.sh -O build.sh
bash build.sh VideoDrone
````
We kindly suggest to use Docker to built in a easy and fast way your VideoDrone environment.Setup in LXC container
----------------------````
apt install lxc
CONTAINER_NAME=deb10
lxc-create -t download -n $CONTAINER_NAME -- -d debian -r buster -a armhf
lxc-start deb10
lxc-attach deb10# then choose your preferred setup as show in the previous sections.
````Docker Image
------------````
docker image build --tag videodrone .# go in
# docker container run -it videodrone /bin/bash# run the container with your preferred configuration
docker container run -dit -e VIDEODRONE_DRIVER=/usr/bin/chromedriver videodrone videodrone -room thatroom -c videodrone.drones.jitsi_chrome -y4m /VideoDrone/y4ms/ -lifetime 33 -n 4
````Run
---`VIDEODRONE_DRIVER` environment variable can override the default path, which is `$VDPATH/drivers/chromedriver`.
example, this connector is configured to create a single drone to "https://meet.jit.si/thatroom":
````
VIDEODRONE_DRIVER=/usr/bin/chromedriver videodrone -c "videodrone.drones.jitsi_chrome" -r thatroom -y4m ./y4ms/
````There will be a party of 4 drones in "thatroom":
````
videodrone -room thatroom -c "videodrone.drones.edumeet_garr_chrome" -y4m ./y4ms/ -n 4
````Output
````
INFO:__name__:Started drone
INFO:__name__:Started drone
INFO:__name__:Started drone
INFO:__name__:Started drone
INFO:__name__:Drone destroyed
INFO:__name__:Drone destroyed
INFO:__name__:Drone destroyed
INFO:__name__:Drone destroyed
````What happens
![example](gallery/1.png)Another example with Garr BBB meet. `headless` set to false means that the browser will run in foreground.
````
./videodrone -c "videodrone.drones.bbbmeet_garr_chrome" -room "/b/roomname -pin thatpin -y4m y4ms/ -headless 0 -lifetime 27
````Drone Connectors
----------------Drone connectors are selenium browser macros, written in python, as simple as possibile.
Drone connectors must be packaged and installed or included
in your PYTHONPATH (sys.path). You can even create
a python local package folder, in your VideoDrone Project.See [videodrone.drones.jitsi_chrome](src/videodrone/drones/jitsi_chrome.py) for example.
Issues
------The big problem is the correct version of selenium's chrome-driver and chrome web browser.
If you need to run videodrone as a Developer you should have to work a bit more on your workstation to get the correct versions.
See Dockerfile to see how I do that.Credits
-------- Fabio Farina (Garr Consortium)
- Massimo Carboni (Garr Consortium)
- Garrlab community
- IoRestoACasa Community