ビルドと小さな機能追加にFasterRunner(httptunner +ジャンゴ)

コンフィギュレーション

ダウンロード
https://github.com/httprunner/FasterRunner

バックエンドの構成
https://www.jianshu.com/p/e26ccc21ddf2

遠位設定
https://www.cnblogs.com/luopan/p/10250485.html

MACでインストールRabbitMQの
https://www.cnblogs.com/yihuihui/p/9095130.html

入り口
にhttp:// localhost:8080 / fastrunner /ログイン

問題:
1.仮想環境を作成することができませんPyCharm PIP
https://www.jianshu.com/p/e46e36addf8d
2. pymysql /はmysqlclient caching_sha2_password、
https://blog.csdn.net/weekdawn/article/details/81039382

いくつかは、設定​​やサプリメントを備え

定期的なタスク

1. setting.py
djcelery.setup_loader()
CELERY_ENABLE_UTC = 
CELERY_TIMEZONE = ' アジア/上海' 
BROKER_URL = 'AMQP://ユーザ名:IP @パスワード:5672 //' 
BROKER_URL = " AMQP://ゲスト:[email protected]:5672 / / ' 
CELERYBEAT_SCHEDULER = ' djcelery.schedulers.DatabaseScheduler ' 
CELERY_RESULT_BACKEND = ' djcelery.backends.database:DatabaseBackend ' 
CELERY_ACCEPT_CONTENT = [ ' アプリケーション/ JSON ' ] 
CELERY_TASK_SERIALIZER = ' JSON' 
CELERY_RESULT_SERIALIZER = ' JSON " 

CELERY_TASK_RESULT_EXPIRESは = 7200 
CELERYD_CONCURRENCY = 1 の場合 DEBUG 他の 5 
CELERYD_MAX_TASKS_PER_CHILD = 40
2.タイムサービス
CD /ホーム/コナン/コナン-TA / FasterRunner / 
nohupをmanage.pyのpython3セロリ、ビート -l情報を>> /Users/zd/Documents/FasterRunner/logs/beat.log 2>&1&


CD /ホーム/コナン/ conan- / FasterRunner / TA 
セロリマルチ起動W1 -A FasterRunner -l情報--logfile = /ユーザ/ ZD /ドキュメント/ FasterRunner /ログ/ worker.log 2>&1&

3.タイミングデバッグタスク
タイミングロジック、オフにする必要があり、再起動セロリ、ビートに関連して変化すると、セロリのマルチは、ログ/ worker.log下にデバッグ情報の外観をプリントアウトし、有効になります。
例:タイトル定期的なタスク、メッセージの送信増加:

速いランナー/ utilsの/ task.py

 

 

固定ランナー/ task.py

 

 

 

 

送信する電子メール

setting.py

メール 
EMAIL_BACKEND = ' django.core.mail.backends.smtp.EmailBackend ' 
EMAIL_SEND_USERNAME = ' [email protected] '   定期的な報告会センドメール、サポート163、QQ、シーナ、QQメールやその他のビジネス、ニーズの注意開かれたSMTPサービス 
EMAIL_SEND_PASSWORD = ''      -mailパスワード 
EMAIL_PORT = 25 
EMAIL_USE_TLS =真

 

固定ランナー/ utilsの/ email.py

import smtplib
from email.mime.text import MIMEText
from email.header import Header
from FasterRunner.settings import EMAIL_SEND_USERNAME, EMAIL_SEND_PASSWORD



def send_email_reports(receiver,save_summary,Cc=None,title=None):
    receiver = receiver.rstrip(';')
    all_receivers = receiver.split(';')
    if '@sina.com' in EMAIL_SEND_USERNAME:
        smtpserver = 'smtp.sina.com'
    elif '@163.com' in EMAIL_SEND_USERNAME:
        smtpserver = 'smtp.163.com'
    else:
        smtpserver = 'smtp.exmail.qq.com'

    if title:
        subject = "【%s】接口自动化测试报告"%title
    else:
        subject = "接口自动化测试报告"
    smtp = smtplib.SMTP_SSL(smtpserver, 465)
    smtp.login(EMAIL_SEND_USERNAME, EMAIL_SEND_PASSWORD)
    msg = MIMEText(save_summary, "html", "utf-8")
    msg["Subject"] = Header(subject, "utf-8")
    msg['From'] = Header('no-reply', 'utf-8')
    msg['To'] = receiver
    # 处理抄送
    if Cc:
        Cc = Cc.rstrip(';')
        msg['Cc'] = Cc
        all_receivers = receiver + ';' + Cc
        all_receivers = all_receivers.split(';')

    smtp.sendmail(EMAIL_SEND_USERNAME, all_receivers, msg.as_string())

 

fastrunner/tasks.py

  1 from fastrunner.utils.emails import send_email_reports
  2 import time
  3 
  4 @shared_task
  5 def schedule_debug_suite(*args, **kwargs):
  6     """定时任务
  7     """
  8     print("定时任务start.....")
  9     project = kwargs["project"]
 10     receiver = kwargs["receiver"]
 11     Cc = kwargs["copy"]
 12     title = kwargs["name"]
 13 
 14     print("receiver****:%s"%receiver)
 15     print("args****:%s"%args)
 16     print("kwargs****:%s"%kwargs)
 17     print("定时任务end.....")
 18     receiver = receiver.strip()
 19     Cc = Cc.strip()
 20 
 21     suite = []
 22     test_sets = []
 23     config_list = []
 24     for pk in args:
 25         try:
 26             name = models.Case.objects.get(id=pk).name
 27             suite.append({
 28                 "name": name,
 29                 "id": pk
 30             })
 31         except ObjectDoesNotExist:
 32             pass
 33 
 34     for content in suite:
 35         test_list = models.CaseStep.objects. \
 36             filter(case__id=content["id"]).order_by("step").values("body")
 37 
 38         testcase_list = []
 39         config = None
 40         for content in test_list:
 41             body = eval(content["body"])
 42             if "base_url" in body["request"].keys():
 43                 config = eval(models.Config.objects.get(name=body["name"], project__id=project).body)
 44                 continue
 45             testcase_list.append(body)
 46         config_list.append(config)
 47         test_sets.append(testcase_list)
 48 
 49     summary = debug_suite(test_sets, project, suite, config_list, save=False)
 50     save_summary("", summary, project, type=3)
 51 
 52     # 整理数据
 53     testTime = summary['time']['start_at']
 54     testTime = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(testTime))
 55     durTime = str(summary['time']['duration'])[:8]
 56 
 57     totalApi = summary['stat']['testsRun']
 58     successApi = summary['stat']['successes']
 59     FailApi = summary['stat']['failures']
 60     errorApi = summary['stat']['errors']
 61     skipApi = summary['stat']['skipped']
 62 
 63     htmll = """
 64     <table border="1" cellpadding="0" cellspacing="0" width="700px">
 65         <tr style="background-color: #f8f8fa">
 66             <th>测试时间</th>
 67             <th>持续时间</th>
 68             <th>Total</th>
 69             <th>Success</th>
 70             <th>Failed</th>
 71             <th>Error</th>
 72             <th>Skipped</th>
 73         </tr>
 74         <tr>
 75             <td>%s</td>
 76             <td>%s 秒</td>
 77             <td>%s</td>
 78             <td>%s</td>
 79             <td>%s</td>
 80             <td>%s</td>
 81             <td>%s</td>
 82         </tr>
 83     </table>
 84     <div style="height: 30px"></div>
 85     <table border="1" cellpadding="0" cellspacing="0" width="700px">
 86         <tr style="background-color: #f8f8fa">
 87             <th>名称</th>
 88             <th>请求地址</th>
 89             <th>请求方法</th>
 90             <th>响应时间(ms)</th>
 91             <th>测试结果</th>
 92         </tr>
 93     """ % (
 94         testTime, durTime, totalApi, successApi, FailApi, errorApi, skipApi
 95     )
 96 
 97     # 名称/请求地址/请求方法/响应时间/测试结果
 98     for i in summary['details']:  # [{},{}]
 99         detail = i['records']  # 列表
100         for d in detail:
101             name = d['name']
102             uurl = d['meta_data']['request']['url']
103             method = d['meta_data']['request']['method']
104             responseTime = d['meta_data']['response']['response_time_ms']
105             iresult = d['status']
106 
107             htmll += """
108             <tr>
109             <td>%s</td>
110             <td>%s</td>
111             <td>%s</td>
112             <td>%s (ms)</td>
113             <td>%s</td>
114          </tr>
115             """ % (name, uurl, method, responseTime, iresult)
116 
117     htmll = htmll + '</table>'
118 
119 
120 
121     if Cc:
122         send_email_reports(receiver, htmll, Cc=Cc,title=title)
123     else:
124         send_email_reports(receiver, htmll,title=title)
View Code

 

 

启动/关闭 shell

start.sh

#!/bin/bash

#启动 FasterWeb
echo -e "启动 FasterWeb"
cd /home/conan/conan-ta/FasterWeb/
nohup npm run build >> /home/shared/log/npm.log 2>&1 &


# 启动 FasterRunner
echo -e "启动 FasterRunner"
cd /home/conan/conan-ta/FasterRunner/
nohup python3 manage.py runserver 0.0.0.0:9000 >> /home/shared/log/django.log 2>&1 &


# 使用默认的celery.py启动
echo -e "启动celery beat"
cd /home/conan/conan-ta/FasterRunner/
nohup python3 manage.py celery beat -l info >> /Users/zd/Documents/FasterRunner/logs/beat.log 2>&1 &


# 使用默认的celery.py启动
echo -e "启动 celery work"
cd /home/conan/conan-ta/FasterRunner/
celery multi start w1 -A FasterRunner -l info --logfile=/Users/zd/Documents/FasterRunner/logs/worker.log 2>&1 &

stop.sh

#!/bin/bash

# kill django pid
echo -e "shutting down django pid"
pids=$(ps aux | grep "python" | grep "runserver" | awk '{print $2}')
for pid in $pids
do
        kill -9 $pid
done


# kill celery beat pid
echo -e "shutting down celery beat pid"
pids=$(ps aux | grep "celery" | grep "FasterRunner" | awk '{print $2}')
for pid in $pids
do
        kill -9 $pid
done

おすすめ

転載: www.cnblogs.com/zhang-dan/p/12041629.html