簡介:
? ??httprunner是一款基于Python的開源工具。
? ??httprunner目前可以支持http/https協(xié)議,使用yaml/json格式的文件編寫用例,封裝了接口訪問方法和pytest測試框架,可以結(jié)合allure生成測試報告。
主要特點
繼承的所有強大功能requests,只需以人工方式獲得樂趣就可以處理HTTP(S)。
以YAML或JSON格式定義測試用例,pytest以簡潔優(yōu)雅的方式運行。
在HAR支持下記錄并生成測試用例。
支持variables/?extract/?validate/?hooks機制,以創(chuàng)建非常復雜的測試方案。
使用debugtalk.py插件,任何功能都可以在測試用例的任何部分使用。
使用jmespath,提取和驗證json響應從未如此簡單。
有了pytest,數(shù)百個插件隨時可用。
使用allure,測試報告可以非常強大。
通過重復使用locust,您可以進行性能測試,而無需進行額外的工作。
支持CLI命令,與完美結(jié)合CI/CD
安裝前置條件:
安裝Mysql
#wget http://repo.mysql.com/mysql57-community-release-el7-10.noarch.rpm
#rpm -Uvh mysql57-community-release-el7-10.noarch.rpm
#yum install -y mysql-community-server
#systemctl start mysqld.service
如果Centos 8 安裝Mysql5.7,以上步驟換成如下:
#dnf remove @mysql? ? --關閉Centos8中MySQL默認的AppStream倉庫
#dnf module reset mysql && sudo dnf module disable mysql
#vim /etc/yum.repos.d/mysql-community.repo? 添加如下:
[mysql57-community]
name=MySQL 5.7 Community Server
baseurl=http://repo.mysql.com/yum/mysql-5.7-community/el/7/$basearch/
enabled=1
gpgcheck=0
[mysql-connectors-community]
name=MySQL Connectors Community
baseurl=http://repo.mysql.com/yum/mysql-connectors-community/el/7/$basearch/
enabled=1
gpgcheck=0
[mysql-tools-community]
name=MySQL Tools Community
baseurl=http://repo.mysql.com/yum/mysql-tools-community/el/7/$basearch/
enabled=1
gpgcheck=0
#dnf --enablerepo=mysql57-community install mysql-community-server
#systemctl enable --now mysqld.service? ? ? ? --開啟服務,自動重啟
#grep 'A temporary password' /var/log/mysqld.log |tail -1? ? -- 獲取初始化密碼
#grep 'A temporary password' /var/log/mysqld.log |tail -1?? ?獲取隨機密碼
#mysql -uroot -p? 修改密碼
因為MySQL的密碼規(guī)則需要很復雜,我們一般自己設置的不會設置成這樣,所以我們?nèi)中薷囊幌?/p>
#mysql> set global validate_password_policy=0;
#mysql> set global validate_password_length=1;
#mysql>ALTER USER 'root'@'localhost' IDENTIFIED BY 'yourpassword';
授權(quán)其他機器遠程登錄
#mysql>?GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'yourpassword' WITH GRANT OPTION;
#mysql>?FLUSH PRIVILEGES;
支持中文
#vim /etc/my.cnf
[mysql]
default-character-set=utf8
[mysqld]
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
default-storage-engine=INNODB
character_set_server=utf8
symbolic-links=0
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#service mysqld restart 重啟生效
防火墻開放3306
#firewall-cmd --state
#firewall-cmd --zone=public --add-port=3306/tcp --permanent
#firewall-cmd --reload
卸載MySQL倉庫
一開始的時候我們安裝的yum,每次yum操作都會更新一次,耗費時間,我們把他卸載掉
#yum -y remove mysql57-community-release-el7-10.noarch
安裝jdk
#wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.rpm
#chmod +x jdk-8u131-linux-x64.rpm
#rpm -ivh jdk-8u131-linux-x64.rpm
#vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.8.0_131
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#source /etc/profile
#yum install libffi-devel -y
#yum install zlib* -y
#yum install gcc -y
#yum install mysql-devel -y
可能報錯:
--> Processing Dependency: mariadb-libs(x86-64) = 1:5.5.68-1.el7 for package: 1:mariadb-devel-5.5.68-1.el7.x86_64
--> Finished Dependency Resolution
Error: Package: 1:mariadb-devel-5.5.68-1.el7.x86_64 (os)
? ? ? ? ? Requires: mariadb-libs(x86-64) = 1:5.5.68-1.el7
You could try using --skip-broken to work around the problem
You could try running: rpm -Va --nofiles --nodigest
#yum install python-devel -y? ?(centos 8?提示:No match for argument: python-devel, Error: Unable to find a match)
安裝openssl,因為用pip3安裝時,會報錯:pip is configured with locations that require TLS/SSL, however the ssl module in Python is not available? (解決方法:http://www.itdecent.cn/p/8e476eef43f7)
#wget?https://github.com/openssl/openssl/archive/OpenSSL_1_1_1d.tar.gz
? ? #tar -zxvf?OpenSSL_1_1_1d.tar.gz
? ? #./config --prefix=/usr/local/openssl
? ? #make & make install
? ? 替換舊版openssl
#mv /usr/bin/openssl /usr/bin/openssl.old
#mv /usr/lib64/openssl /usr/lib64/openssl.old
#mv /usr/lib64/libssl.so?/usr/lib64/libssl.so.old? ?(可能提示文件不存在)
#ln -s /usr/local/openssl/bin/openssl /usr/bin/openssl
#ln -s /usr/local/openssl/include/openssl /usr/include/openssl
#ln -s /usr/local/openssl/lib/libssl.so?/usr/lib64/libssl.so
#echo "/usr/local/openssl/lib" >> /etc/ld.so.conf
#ldconfig -v // 建立動態(tài)鏈接
? ? #openssl version
1、首先確保安裝了python3.8環(huán)境,下載pyton3.8源碼,解壓進入目錄安裝:
? ? ? #./configure --prefix=/usr/local/python3 --with-openssl=/usr/local/openssl
? ? #make & make install
? ? #ln -s /usr/local/python3/bin/python3 /usr/bin/python3
? ? #ln -s /usr/local/python3/bin/pip3 /usr/bin/pip3
? ?#vim /etc/profile? 在文件最后增加:
#python3.8 configuration
PATH=$PATH:/usr/local/python3/bin
export PATH=$PATH:/usr/local/python3/bin/
?#source /etc/profile? ? ? *配置pytho環(huán)境變量,檢查安裝是否成功。*
#python3?顯示是Python 3.8.6版本即可。
如果需要卸載,按如下步驟:
#rpm -qa|grep python3|xargs rpm -ev --allmatches --nodeps? ?--卸載python3
#whereis python3 |xargs rm -frv? -- 刪除所有殘留文件
2、安裝pip3 (安裝python?會自動安裝pip3)
自動安裝的pip3版本是20.2.1 ,使用下面命令升級pip3版本
#/usr/local/python3/bin/python3.8 -m pip install --upgrade pip
3、安裝httprunner,使用命令
#pip3 install httprunner
可能會報如下錯誤:
File "/usr/local/python3/lib/python3.8/site-packages/pip/_vendor/urllib3/response.py", line 437, in _error_catcher? ?報錯原因:網(wǎng)絡太慢導致下載失敗
解決方法:換庫:pip3 install -i?https://pypi.tuna.tsinghua.edu.cn/simple?httprunner? ? (可能仍然會報Read time out?錯誤,報錯后繼續(xù)重新執(zhí)行這個命令直到安裝下載安裝完成)
#vim /usr/local/python3/lib/python3.8/site-packages/setuptools/windows_support.py? ?注釋了第34行(應該不需要這個步驟)
安裝完成后,
#ln -s /usr/local/python3/bin/hrun /usr/bin/hrun?
#ln -s /usr/local/python3/bin/httprunner /usr/bin/httprunner
#ln -s /usr/local/python3/bin/har2case /usr/bin/har2case
#ln -s /usr/local/python3/bin/hmake /usr/bin/hmake
檢查安裝是否成功,使用命令: #httprunner -V,輸出了版本號,就表示安裝成功
Tips:
If you want to keep up with the latest version, you can install with github repository url.
$pip3 install git+https://github.com/httprunner/httprunner.git@master
If you have installed?HttpRunner?before and want to upgrade to the latest version, you can use the?-U?option.
$ pip3 install -U httprunner
$ pip3 install -U git+https://github.com/httprunner/httprunner.git@master
常用命令
httprunner:? 核心命令,可以使用 HttpRunner 的所有命令
hrun:httprunner run?命令的別名,運行 YAML/JSON/pytest 格式的測試用例
hmake:httprunner make?命令的別名,將 YAML/JSON 格式的 testcases 轉(zhuǎn)換成 pytest 格式的測試用例
har2case:httprunner har2case?命令的別名,將 HAR 文件轉(zhuǎn)換為 YAML/JSON 格式的測試用例
locusts:?used to run load test with locust
接口測試:
1、先用fiddler抓個接口包,導出為:HTTPArchive V1.2 ,包名為:query.har
2、har2case query1.har -2y? 將接口文件轉(zhuǎn)換為yaml格式用例,如果轉(zhuǎn)換為json格式,帶參數(shù) -2j
3、執(zhí)行測試? ?hrun query.yml
接口性能測試:
Locust is an easy to use, scriptable and scalable performance testing tool. You define the behaviour of your users in regular Python code, instead of using a clunky UI or domain specific language. This makes Locust infinitely expandable and very developer friendly.
1、安裝locust
https://github.com/locustio/locust項目地址下載zip安裝包
? ?下載解壓后,在終端 cd 到項目路徑,執(zhí)行:python3 setup.py install
? ? 報錯如下:
Traceback (most recent call last):
? File "setup.py", line 7, in <module>
? ? from setuptools import find_packages, setup
? File "/usr/local/python3/lib/python3.8/site-packages/setuptools/__init__.py", line 23, in <module>
? ? from setuptools.dist import Distribution
? File "/usr/local/python3/lib/python3.8/site-packages/setuptools/dist.py", line 34, in <module>
? ? from setuptools import windows_support
? File "/usr/local/python3/lib/python3.8/site-packages/setuptools/windows_support.py", line 2, in <module>
? ? import ctypes
? ? ..........................
? ? 換一種安裝方式,使用在線安裝方式如下:
? ? #pip3 install locust
? ? 安裝后,查看是否正確安裝
? ? #locust --version? ?/?locust -V
? ?為了能Locust分布式測試,可以在本機windows上也安裝同版本的Python和locust
? ?先在windows?機器上安裝Python3.8.6 (注意是64位的:https://www.python.org/ftp/python/3.8.6/python-3.8.6-amd64.exe)
? 在進入windows?命令行模式:pip3 install locust? (可能會報SSL錯誤),用下面的命令,跳過SSL
? ? pip3 install --trusted-host pypi.org --trusted-host files.pythonhosted.org?locust
? ? 運行性能測試
? ? ?#cd /home/cvms/testcases? ? ?
? ? #locusts -f double11.yml
瀏覽器打開:http://192.168.138.128:8089/


分布式運行Locust(有兩種主從模式:第一種是單臺機器設置Master和Slave,第二種是多臺機器一臺設置為Master,其他機器設置為Slave):
一旦單臺機器不夠模擬足夠多的用戶時,Locust支持運行在多臺機器中進行壓力測試。
為了實現(xiàn)這個,你應該在master模式中使用--master標記來啟用一個Locust實例。這個實例將會運行你啟動測試的Locust交互網(wǎng)站并查看實時統(tǒng)計數(shù)據(jù)。master節(jié)點的機器自身不會模擬任何用戶。相反,你必須使用--slave標記啟動一臺到多臺Locustslave機器節(jié)點,與標記--master-host一起使用(指出master機器的IP/hostname)。
常用的做法是在一臺獨立的機器中運行master,在slave機器中每個處理器內(nèi)核運行一個slave實例。(slave?機器有幾個CPU,就最多只能啟動幾個slave實例)
** master和每一臺slave機器,在運行分布式測試時都必須要有l(wèi)ocust的測試文件。**
實例:
CentOS?虛擬機192.168.138.128? (做為master)
本機筆記本做為slave機器,
現(xiàn)在CentOS上執(zhí)行:#locusts -f double11.yml --master
再在本地筆記本上進入cmd,執(zhí)行:locusts -f double11.yml --work --master-host=192.168.138.128? ?(可打開4個cmd,執(zhí)行4個slave節(jié)點)
如下圖(上面顯示workers?是4,表示有4個slave在跑):

集成報表:
httprunner結(jié)合allure生成測試報告的步驟
#pip3 install allure-pytest? ?(可能沒安裝,手動安裝下,否則可能會報錯:AttributeError: 'module' object has no attribute 'allure')
1、下載allure-commandline-2.13.0.tgz?
2、解壓到?/usr/local/python3/lib/python3.8/site-packages
# tar -zxvf allure-commandline-2.13.0.tgz
#mv package allure
#ln -s /usr/local/python3/lib/python3.8/site-packages/allure/dist/bin/allure?/usr/bin/allure
3、添加環(huán)境變量
#For allure
PATH=$PATH:/usr/local/python3/lib/python3.8/site-packages/allure/dist/bin
export PATH
#allure --version? ? (驗證是否成功配置安裝)
4、#hrun test_post_api.yml --alluredir=/home/demo1/report? ? 如果一次要執(zhí)行多個測試用例,這樣寫:hrun cvms_all.yml cvms_get_summary.yml cvms_get_details.yml cvms_get_pending.yml --alluredir=/home/cvms/reports/
? ? ?執(zhí)行過程如下圖:

?#allure serve /home/demo1/report
Generating report to temp directory...
Report successfully generated to /tmp/8439765027582619623/allure-report
Starting web server...
2020-11-02 18:15:55.706:INFO::main: Logging initialized @4485ms to org.eclipse.jetty.util.log.StdErrLog
Can not open browser because this capability is not supported on your platform. You can use the link below to open the report manually.
Server started at <http://3.223.115.185:39631/>. Press to exit
實際使用服務器的IP打開:http://192.168.138.133:39631/


安裝HttpRunnerManager:
下載安裝包:HttpRunnerManager-master.zip
解壓到/opt
#pip3 install pymysql? ? --python版本3X不支持mysqldb,要用pymysql來代替。
執(zhí)行安裝之前,先看下requirements.txt?會安裝哪些東西:
Django == 2.0.3
PyYAML == 3.12
requests == 2.18.4
eventlet == 0.22.1
mysqlclient == 1.3.12
django-celery == 3.2.2
flower == 0.9.2
dwebsocket == 0.4.2
paramiko == 2.4.1
HttpRunner == 1.5.8
可以把mysqlclient? HttpRunner?刪掉,因為不支持或已經(jīng)安裝
修改requirements.txt下的:
Django == 2.0.3 改為 Django == 2.1.2
PyYAML == 3.12?修改為 pyyaml==5.1.2?
requests == 2.18.4?修改為?requests==2.22.0
#pip3 install -r requirements.txt? ? (下載安裝時關閉fiddle,可能導致下載某些包報錯)--因為已經(jīng)在Linux下安裝了python3和pip3,因此這里直接通過 pip3 來安裝即可
安裝時,可能會報這個:
Traceback (most recent call last):
File "/usr/local/python3/lib/python3.8/site-packages/pip/_vendor/urllib3/response.py", line 437, in _error_catcher
yield
這是因為網(wǎng)絡不行,下載超時了,多試幾次。
安裝完后,報如下log:
Running setup.py install for anyjson ... done
Running setup.py install for billiard ... done
Running setup.py install for django-celery ... done
Running setup.py install for flower ... done
Running setup.py install for dwebsocket ... done
ERROR: After October 2020 you may experience errors when installing or updating packages. This is because pip will change the way that it resolves dependency conflicts.
We recommend you use --use-feature=2020-resolver to test your packages with the new resolver before it becomes the default.
httprunner 3.1.4 requires pyyaml<6.0.0,>=5.1.2, but you'll have pyyaml 3.12 which is incompatible.
httprunner 3.1.4 requires requests<3.0.0,>=2.22.0, but you'll have requests 2.18.4 which is incompatible.
Successfully installed Django-2.0.3 PyYAML-3.12 amqp-1.4.9 anyjson-0.3.3 babel-2.8.0 bcrypt-3.2.0 billiard-3.3.0.23 celery-3.1.26.post2 cffi-1.14.3 cryptography-3.2.1 django-celery-3.2.2 dwebsocket-0.4.2 eventlet-0.22.1 flower-0.9.2 greenlet-0.4.17 idna-2.6 kombu-3.0.37 paramiko-2.4.1 pyasn1-0.4.8 pycparser-2.20 pynacl-1.4.0 pytz-2020.4 requests-2.18.4 tornado-6.1 urllib3-1.22
WARNING: You are using pip version 20.2.1; however, version 20.2.4 is available.
You should consider upgrading via the '/usr/local/python3/bin/python3.8 -m pip install --upgrade pip' command.
看起來是pyyaml, requests版本不兼容,重新安裝這兩個包
#pip3 install pyyaml==5.1.2
#pip3 install requests==2.22.0
*上面已經(jīng)修改了requirements.txt文件中這兩個包的版本,所以上面這兩個命令應該不需要了*
創(chuàng)建數(shù)據(jù)庫:create database?hrun character set utf8 collate utf8_bin;
修復配置文件中連接數(shù)據(jù)庫部分:
vim?/opt/HttpRunnerManager-master/HttpRunnerManager/settings.py? 的第118行開始,host?用127.0.0.1
生成數(shù)據(jù)遷移腳本:
#cd /opt/HttpRunnerManager-master
#python3 manage.py makemigrations ApiManager
報錯如下:
Traceback (most recent call last):
File "/usr/local/python3/lib/python3.8/site-packages/django/db/backends/mysql/base.py", line 15, in
import MySQLdb as Database
ModuleNotFoundError: No module named 'MySQLdb'
解決方案(MySQLdb 只適用于python2.x,發(fā)現(xiàn)python3上的pip裝不上。它在py3的替代品是:pip install PyMySQL,而django默認的還是使用MySQLdb:執(zhí)行會報:):
#vim /usr/local/python3/lib/python3.8/site-packages/django/__init__.py 加兩行代碼如下:
from django.utils.version import get_version
import pymysql? ?--增加的行,
pymysql.install_as_MySQLdb()? --?增加的行
增加后文件如下:

再執(zhí)行命令#python3 manage.py makemigrations ApiManager
報這個(忽略)

#python3 manage.py migrate? ?(應用到db生成數(shù)據(jù)表)
#python3 manage.py createsuperuser? ??–?創(chuàng)建后臺用戶? ??
輸入管理員賬號,密碼,郵箱
#nohup python3 manage.py runserver 0.0.0.0:8000 >hrun.log 2>&1 &? ?--啟動django服務
登錄后臺:http://192.168.138.133:8000/admin/login/?next=/admin/
輸入賬號:root?密碼

登錄注冊頁面:http://192.168.138.133:8000/api/register/? ?會報錯如下:
ImportError at /api/project_list/1/
cann't import name logger
exception location:?/opt/HttpRunnerManager-master/ApiManager/tasks.py? in <module> line 16
解決方法::vim /opt/HttpRunnerManager-master/ApiManager/tasks.py? ?修改一行代碼,注釋掉16行的logger,刷新注冊頁面正常顯示

注意:在上面的主界面中,我們發(fā)現(xiàn)界面的樣式似乎有些不對勁,這是因為我們從Github上下載的源碼有些問題,這里就需要手動修改一下了。
#vim?/opt/HttpRunnerManager-master/templates/base.html?修改第23行的amazeui.org修改為:bootcss.com
Jenkins集成
1、安裝jenkins
#yum install git -y
#wget -O /etc/yum.repos.d/jenkins.repo?https://pkg.jenkins.io/redhat-stable/jenkins.repo? ?(有時可能會報連接失敗,多試幾次)
#rpm --import https://pkg.jenkins.io/redhat-stable/jenkins.io.key
#yum install jenkins -y
2、配置
#vim /etc/sysconfig/jenkins
第29行:監(jiān)聽用戶=root??
第56行:端口=8082
3、
修改目錄權(quán)限
#chown -R root:root /var/lib/jenkins
#chown -R root:root /var/cache/jenkins
#chown -R root:root /var/log/jenkins
重啟
#service jenkins restart
#ps -ef | grep jenkins
啟動
#systemctl start jenkins
#systemctl status jenkins? ? 查看狀態(tài)
登錄:http://192.168.138.128:8082/login?from=%2F
使用Jenkins自動郵件Allure報告
Manage Jenkins -- Global Tool Configuration?
配置Allure Commandline?
name = allure2
installation directory =?/usr/local/python3/lib/python3.8/site-packages/allure/dist
為了要觸發(fā)郵件,出了要再創(chuàng)建的項目上按如上配置外,還需要對Jenkins做系統(tǒng)配置,方法如下
進入Manage Jenkins? --?System Configuration,如下圖:




首先確保allure在服務器上正確安排配置,參考前文,jenkins初始進入后,先安裝幾個必要的插件:Allure, Email Extension?
1、jenkins上創(chuàng)建一個自由風格的項目,項目名稱為:code
項目的具體配置根據(jù)實際情況會稍有不同,本次測試的配制如下:
因為要配置定時觸發(fā)構(gòu)建job,
【BuildTriggers】?設置Poll SCM?Schedule?為:? H 11 * * *? ?(表示每天11點自動構(gòu)建,為unix的cron格式)
【Build】部分Execute Shell?Command為:
PATH=$PATH:/usr/local/python3/bin
export PATH=$PATH:/usr/local/python3/bin/
cd /home/auto/codetest/testcases
hrun inputone.yml code_details.yml querycode.yml --alluredir=/var/lib/jenkins/workspace/code/target/allure-results
上面兩行是解決jenkins上執(zhí)行報錯:missing dependency tool: black ,因為Jenkins執(zhí)行時沒有獲到python的path
【Post-build?Action】段Add Allure Report,然后配置如下:
? ? Results path =?target/allure-results
? ? JDK InherifFromJob
? ? Report path =?target/allure-report
?在Jenkins的workspace路徑:/var/lib/jenkins/workspace/code/target/?下可能需要手動創(chuàng)建目錄:allure-results,最終workspace/all?下的目錄結(jié)構(gòu)為(code為Jenkins中創(chuàng)建的項目名稱):
? ? target,下面再有目錄:allure-results, allure-report
? 【Post-build Action】?段再Add Editable Email Notification,?基本配置如下:
? ??Project Recipient List =?$DEFAULT_RECIPIENTS,ring.zhong@icoastline.com
? ??Project Reply-To List =?$DEFAULT_REPLYTO
? ??Content Type?=?HTML
? ??Default Subject =?接口自動化測試報告
? ? Default Content?如下:
<h1><center><font>以下是Jenkins自動發(fā)送的郵件,請勿回復!</font><center></h1>
<h3><center><font color="red">allure報告在線查看,請點擊郵件中鏈接。or下載allure-report.zip用firefox離線查看,測試用例見附件</font><center></h3>
<br>
<hr>
<h3><font color="red">項目描述:${JOB_DESCRIPTION}</font><br></h3>
有碼項目接口測試
<br><br>
<hr>
項目名稱:$PROJECT_NAME<br>
構(gòu)建編號:$BUILD_NUMBER<br>
構(gòu)建狀態(tài):$BUILD_STATUS<br>
觸發(fā)原因:${CAUSE}<br><br>
構(gòu)建地址:<A HREF="${BUILD_URL}">${BUILD_URL}</A><br><br>
構(gòu)建日志地址:<A HREF="${BUILD_URL}console">${BUILD_URL}console</A><br><br>
系統(tǒng)allure測試報告:<A HREF="${PROJECT_URL}${BUILD_NUMBER}/allure">${PROJECT_URL}${BUILD_NUMBER}/allure</a><br><br>
<hr>
${JELLY_SCRIPT}
再點右下角的:Advanced Settings?按鈕,增加一個Trigger,Always,如下圖

構(gòu)建配置:
1.每30分鐘構(gòu)建一次:
H/30 * * * *
2.每2個小時構(gòu)建一次
H H/2 * * *
3.每天早上8點構(gòu)建一次
0 8 * * *
4.每天的8點,12點,22點,一天構(gòu)建3次
0 8,12,22 * * *