在以前搭建的HttpRunnerManager接口測試平臺,咱們還有一些功能沒有實現,好比異步執行、定時任務、任務監控等,要完成異步執行,須要搭建 RabbitMQ
等環境,今天咱們就來實現這些功能。html
須要在Linux上提早準備的環境(下面是本人搭建時的環境):
1,HttpRunnerManager(可參考文章:Linux下搭建HttpRunnerManager接口測試平臺)
2,RabbitMQ 3.7.6 (可參考文章:Linux下安裝RabbitMQ)python
HttpRunnerManager中,模塊和項目的用例執行時可選擇爲同步或者異步方式,在沒搭建RabbitMQ環境時,咱們只能經過同步的方式來執行,執行完以後當即返回報告。web
若是選擇異步的方式,就是在後臺執行,在異步執行完畢後,咱們能夠去查看或下載測試報告。但若是沒有搭建RabbitMQ環境,那麼異步執行會報錯,並得不到測試報告。vim
首先,要實現異步執行,咱們須要啓動RabbitMQ服務,並確保可以正常訪問其Web控制檯管理界面,以下:瀏覽器
咱們須要簡單修改一下 settings.py
配置文件,須要修改的地方以下(大約在settings.py中第155行左右):bash
能夠經過 vim 命令進行修改,修改以後以下(根據本身實際狀況修改):服務器
說明:app
admin:123456
是RabbitMQ
中的用戶名和密碼192.168.89.128
是rabbitmq-server
所在服務器ip地址5672
是RabbitMQ啓動時的默認端口,注意不是15672
端口,15672
是Web控制檯管理界面的訪問端口。
在 HttpRunnerManager 的根目錄( manage.py 所在的路徑),經過如下命令啓動worker
:異步
python3 manage.py celery -A HttpRunnerManager worker --loglevel=infoasync
也能夠經過後臺執行的方式啓動 worker
:
nohup python3 manage.py celery -A HttpRunnerManager worker --loglevel=info >worker.log 2>&1 &
若是是在後臺運行 worker
的日誌,將輸出到 worker.log
下。
我在啓動 worker 時,遇到了以下問題:
在網上查了下,發現是由於 tornado
版本過高了,tornado6以後版本就棄用了 tornado.web.asynchronous
這種寫法,查看當前 tornado
的版本,命令以下:
pip3 show tornado
查看後發現 tornado 版本爲 6.0.3
,因而嘗試網上說的將 tornado
降級回到 5.1.1
版本,命令以下:
卸載已安裝的tornado版本:pip3 uninstall tornado
安裝指定的tornado版本:pip3 install tornado==5.1.1
[root@bogon HttpRunnerManager-master]# pip3 uninstall tornado Uninstalling tornado-6.0.3: Would remove: /root/python36/lib/python3.6/site-packages/tornado-6.0.3-py3.6.egg-info /root/python36/lib/python3.6/site-packages/tornado/* Proceed (y/n)? y Successfully uninstalled tornado-6.0.3 [root@bogon HttpRunnerManager-master]# pip3 install tornado==5.1.1 Collecting tornado==5.1.1 Downloading https://files.pythonhosted.org/packages/e6/78/6e7b5af12c12bdf38ca9bfe863fcaf53dc10430a312d0324e76c1e5ca426/tornado-5.1.1.tar.gz (516kB) 100% |████████████████████████████████| 522kB 874kB/s Installing collected packages: tornado Running setup.py install for tornado ... done Successfully installed tornado-5.1.1
接着,再次啓動 worker
,能夠發現沒有報錯了,啓動成功!
在 HttpRunnerManager 的根目錄( manage.py 所在的路徑),經過如下命令啓動定時任務celery
:
python3 manage.py celery beat --loglevel=info
也能夠經過後臺執行的方式啓動 celery
:
nohup python3 manage.py celery beat --loglevel=info >celery.log 2>&1 &
啓動成功時,顯示以下內容:
[root@bogon HttpRunnerManager-master]# python3 manage.py celery beat --loglevel=info celery beat v3.1.26.post2 (Cipater) is starting. __ - ... __ - _ Configuration -> . broker -> amqp://admin:**@192.168.89.128:5672// . loader -> celery.loaders.app.AppLoader . scheduler -> djcelery.schedulers.DatabaseScheduler . logfile -> [stderr]@%INFO . maxinterval -> now (0s)
要完成任務監控,須要啓動 flower
,這個咱們在最開始搭建環境時已經安裝,是在 requirements.txt
中,若是沒有安裝的話能夠經過 pip3
進行安裝。
接下來啓動 flower
環境,直接執行命令:flower。
也能夠經過後臺執行的方式啓動 flower
:
nohup flower >flower.log 2>&1 &
若是出現報錯:bash: flower: command not found,提示找不到相關命令,那麼就須要先設置軟連接。首先,查找到 flower
的路徑,而後將該路徑添加到 /usr/bin/
下便可,最後執行命令:flower,啓動flower時默認的端口是 5555
。
[root@bogon HttpRunnerManager-master]# flower bash: flower: command not found [root@bogon HttpRunnerManager-master]# find / -name flower /root/python36/bin/flower /root/python36/lib/python3.6/site-packages/flower [root@bogon HttpRunnerManager-master]# ln -s /root/python36/bin/flower /usr/bin/flower [root@bogon HttpRunnerManager-master]# flower [I 191229 17:29:58 command:139] Visit me at http://localhost:5555 [I 191229 17:29:58 command:144] Broker: amqp://guest:**@localhost:5672// [I 191229 17:29:58 command:147] Registered tasks: ['celery.backend_cleanup', 'celery.chain', 'celery.chord', 'celery.chord_unlock', 'celery.chunks', 'celery.group', 'celery.map', 'celery.starmap']
最後,檢查一下 5555
端口是否已開放,在Windows的瀏覽器下輸入地址訪問flower管理界面:http://ip地址:5555/
到這裏,咱們在模塊和項目執行用例時,選擇異步執行方式,便不會報錯了。
當異步執行完畢後,能夠在報告管理中查看報告。
設置定時任務是在測試計劃的菜單欄之下。
新增定時任務,相關的 定時任務crontab語法
,這裏很少介紹,你們能夠去網上查找學習。
按上面設置定時任務以後,每5分鐘用例會執行一次,而後能夠去報告管理界面查看相關報告。
系統設置下的任務監控,其實就是以前的 flower
監控環境。但界面上對應的連接地址可能不對,咱們須要簡單修改一下。
須要修改的文件是 templates/base.html
,具體以下(大約在base.html第134行左右,根據本身實際狀況修改):
修改好任務監控的連接地址以後,再次刷新頁面,對應的連接地址就會更新了,咱們點擊任務監控菜單,就能夠進入到flower
任務監控後臺界面。
OK,到這裏,咱們部署的HttpRunnerManager接口測試平臺已完成,已成功搭建完成了異步執行、定時任務及任務監控的功能。