258 位表示想打赏此文章

使用logcat快速抓取android崩溃日志

在android APP测试过程中会发生不少的crash,目前抓取日志的主流方法是通过eclipse或者eclipse的ddms组件进行捕抓,这两种方法有个缺点是启动时非常耗时。本文通过adb程序与bat命令组合,只要3~5秒即可获取崩溃日志,非常快捷。

一、安装jdk

JDK网上教程非常多,此处不再赘述。(好像不装也没关系,未实测)

 

二、工具列表

a)  adb包(v.1.0.31版本或以上,下文提供下载地址)

b)  logcat.bat文件(下文制作)

 

三、安装adb(二选一)

a)  放到任意位置(推荐)

因为adb是一个轻量、独立的程序,只要放到任意位置即可。

b)  使用path进行安装

将adb添加到path,能在任意地方调用adb命令

如adb.exe的位置在c:\adb\adb.exe,则在path中加入c:\adb;

 

四、Logcat批处理命令

@ECHO OFF
for /f "tokens=2 delims==" %%a in ('wmic OS Get localdatetime /value') do set "dt=%%a"

SET timeStamp=%dt:~0,4%-%dt:~4,2%-%dt:~6,2%_%dt:~8,2%-%dt:~10,2%-%dt:~12,2%
SET mutID=_mut

@ECHO ON
adb logcat -v time > .\"%mutID%_%timeStamp%_logcat.log"

pause

将以上命令复制,制作成logcat.bat文件。

若adb.exe无设置path,将logcat.bat放到与adb.exe同一个位置;

若adb.exe已设置path,logcat.bat可以放置任意位置(如:桌面)。

 

五、示例

步骤1:将android手机连接电脑,开启开发者模式,允许usb调试;

步骤2:运行logcat.bat文件,会出现cmd窗口;

步骤3:①如果手机程序已经发生过crash,5秒后关闭cmd窗口;

②如果是想重现crash,则在手机端重现后即可关闭cmd窗口。

步骤4:在logcat.bat的同级目录下会生成一份log文件,从文件中搜查FATAL关键字,便可找到崩溃代码。

 

六、原理

bat文件调用adb工具,将手机运行日志拉到本地,并将实时日志也记录到本地。

 

七、优点与限制

a) 手机无需root

b) 无需eclipse支持

c) 方便保存、查找日志

d) 实时日志不能在cmd窗口回显。

 

本文首创于cnblogs,原文地址:https://www.cnblogs.com/medsonk/p/6344373.html

转载请注明出处  转载请注明出处   转载请注明出处

    187 位表示想打赏此文章

MySQL创建用户、赋权

一、查看数据库用户
二、创建数据库用户
三、修改数据库用户
四、删除数据库用户

五、查看用户权限
六、新增用户赋权
七、删除用户权限
八、刷新权限

一、查看数据库用户

SELECT user,host FROM mysql.user;

二、创建数据库用户

CREATE USER 'username'@'localhost' IDENTIFIED BY 'password';

username代表登录的用户名;

localhost代表本机登录,不能在另外一台机器上远程登录。如果想远程登录的话,将”localhost”改为”%”,表示在任何一台电脑上都可以登录。也可以指定某台机器可以远程登录

localhost与127.0.0.1是两种含义,若创建用户时使用localhost,则配置文件也应填写localhost。

三、修改数据库用户

方法一:
SET password for username@localhost = PASSWORD('newpassword'); 
方法二:
UPDATE user SET Password = PASSWORD('newpassword') WHERE user = 'username';
FLUSH PRIVILEGES;

这里只涉及修改密码,若想修改用户ip,则应通过新增用户、重新赋权来操作。
这里第一次接触到FLUSH PRIVILEGES,解释一下:方法二是直接操作表,权限、密码等并不会实时更新,因此需要使用FLUSH PRIVILEGES刷新权限。

四、删除数据库用户

DROP user username@localhost;
DROP user username@'%';

关于引号:实测了一下,对于localhost来说,是否有引号并不影响结果,而’%’则需要引号。

五、查看用户权限

SHOW GRANTS FOR 'username';
SHOW GRANTS FOR 'username'@'localhost';

六、新增用户赋权

GRANT all privileges on database.* to 'username'@'localhost'; 
GRANT select,insert,update,delete,create on database.* to 'username'@'localhost';
GRANT select on db.* to 'username'@'%' IDENTIFIED BY 'password'

all privileges:所有权限;
select:读取权限。
delete:删除权限。
update:更新权限。
create:创建权限。
drop:删除数据库、数据表权限。

dbName.tableName表示授予权限的具体库或表,常用的有以下几种选项:
.:授予该数据库服务器所有数据库的权限。
dbName.*:授予dbName数据库所有表的权限。
dbName.dbTable:授予数据库dbName中dbTable表的权限。

IDENTIFIED BY ‘password’:

grant all privileges on database.* to 'username'@'localhost' IDENTIFIED BY 'password';

七、删除用户权限

REVOKE ALL ON database.table FROM username@localhost;
REVOKE ALL PRIVILEGES ON *.* FROM username@localhost;
REVOKE insert,select,update,delete,drop,create,alter on database.table from username@'%';

revoke跟grant语法差不多,只需要把关键字 “to” 换成 “from” 即可

八、刷新权限

FLUSH PRIVILEGES;

使用insert、update等方式添加用户需要刷新缓存,flush privileges 命令本质上的作用是将当前user和privilige表中的用户信息/权限设置从mySQL库(MySQL数据库的内置库)中提取到内存里。MySQL用户数据和权限有修改后,希望在”不重启MySQL服务”的情况下直接生效,那么就需要执行这个命令。

    169 位表示想打赏此文章

fiddler抓取网络请求

因本文是ppt转化过来,衔接可能不太连贯,但终会日益完善,感谢垂阅!

网络结构

一般网络可以分为三部分

一、终端(例如:用户、浏览器、APP、服务器~)
二、网络(例如:网卡、路由、代理服务器~)
三、服务器(例如:平台、服务器~)

本节所讲的fiddler就是担任代理服务器的角色

 

fiddler基本设置

8888:fiddler默认代理端口,也可以进行修改
Act as system proxy on startup:fiddler启动后,会将fiddler设置为系统默认代理。
Allow remote computers to connect:开启后能对android、ios手机进行抓包

 

fiddler基本操作

Capturing:点击即可开始/暂停抓包
×:清空已经抓取的报文列表,快捷键ctrl+x
Save:保存已经抓取的报文

 

过滤器

Use Filters:勾选后过滤器内容才能生效。
Actions-Run Filterset now:过滤器的修改实时生效。
Show only traffice from:显示指定进程的报文。选择Remote Process后,可以只显示手机端的报文。
Show only if URL contains:url中含有指定关键字才会显示到列表中。

 

查看区

上方为request,下方为respond。
无论上下方,均有TextView、WebForms、Raw、JSON、XML,可以不同格式查看报文。
TextView非常适用于篡改请求功能。
若respond区出现红框提示,点击即可解码查看。

 

自定义列

默认展示列可能不满足所有人的需求,右键列名提供自定义列功能,可按照个人性进行展示。

 

篡改请求

路径:Rules – automatic breakpoints – before requests / after respond / disabled

 

before request

拦截所有request(从服务器发送的请求)
点击Run to Completion后才可放行
适用于篡改不同入参以调试接口是否符合协议、达到安全性标准

 

after request

拦截所有respond(从服务器返回的响应)
点击Run to Completion后才可放行
适用于模拟接口返回(Mock),临时调试前端页面、解决接口阻塞影响
Mock成本较高,建议做成AutoRespond

    290 位表示想打赏此文章

fiddler抓取https请求

HTTPS(全称:Hypertext Transfer Protocol Secure,超文本传输安全协议),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。

访问HTTPS站点时,请求、响应都通过TLS协议在浏览器和服务器之间加密传输,并且通过数字证书技术保证数据的保密性和完整性;任何“中间人”、包括代理服务器都只能转发数据,而无法窃听或者篡改数据

要抓取HTTPS流量的明文内容,Fiddler必须解密HTTPS流量。要解密HTTPS流量,则必须加入数字证书

因fiddler默认证书生成器不兼容ipad、android等设备,所以需要使用FiddlerCertMaker来生成证书,下载地址:www.enhanceie.com/dl/FiddlerCertMaker.exe

安装成功后,启动fiddler,检查证书类型。如果是CertEnroll,则为默认证书,请求改为MakeCert,然后重启fiddler

手机端接入fiddler代理地址,以电脑热点为例,广播的ip地址为192.168.137.1,上一篇教程讲到fiddler代理端口为8888。

手机端连上fiddler,但未安装证书情况下,访问https地址,将会出现如下提示:

安装证书在ios上分为三步,android则比较简单,所以这里以ios为例:(下载证书→安装证书→允许证书)

①下载证书:

路径:使用手机浏览器,访问fiddler代理地址,一般为ip:8888。

出现fiddler echo service页面后,点击证书进行下载。

②安装证书:

路径:通用→描述文件。

选择已下载的描述文件进行安装。

③信任证书:

路径:通用→关于本机→证书信任设置。

开启信任即可。

 

 

    226 位表示想打赏此文章

服务器性能监控工具nmon

一、准备

一开始我下载最新的nmon16,在centos7上完美运行。后来放在centos6上试图运行程序,提示”libc.so.6: version `GLIBC_2.14′ not found”,原因是系统的glibc版本太低,软件编译时使用了较高版本的glibc引起的。

所以先查看系统glibc支持的版本:

[ghui@StuOS bin]$ strings /lib64/libc.so.6 |grep GLIBC_
GLIBC_2.2.5
GLIBC_2.2.6
…………
…………
GLIBC_2.9
GLIBC_2.10
GLIBC_2.11
GLIBC_2.12
GLIBC_PRIVATE

如果发现支持GLIBC_2.14,则可使用nmon16j,否则不建议手动升级GLIBC,改用低版本nmon即可。
 

二、下载软件

nmon:
版本:nmon_linux_14i.tar.gz (下载适合服务器的版本)
地址:
https://osdn.jp/projects/sfnet_nmon/releases/

nmonanalyser:
版本:nmon_analyser_v47.zip
地址:
https://www.ibm.com/developerworks/community/wikis/home?lang=en#!/wiki/Power+Systems/page/nmon_analyser
 

三、安装

安装位置:~/nmon (任意目录)

1、 创建nmon文件夹:# mkdir nmon
2、 上传nmon_linux_14i.tar.gz 到nmon目录
–我是用的是rz命令,安装rz命令:yum install lrzsz
3、 解压:# tar -zxvf nmon_linux_14i.tar.gz
4、 赋权限:# chmod -R 755 nmon(请根据实际情况赋予777、755、+x)
5、 启动nmon:# ./nmon_x86_64_sles11(在nmon目录下执行命令)

p.s:x86_64代表平时使用的32位、64位系统,power是IBM的架构,arm是单片机(手机、pad);sles代表suse系统,还有Ubuntu、rhel,按实际情况选择,实在不会选就请教下公司的运维。

安装成功显示以下界面:


 

四、实时监控

续上,输入启动命令之后就是一个启动界面,需要摁下对应的键,才能展示对应的实时信息。

常用命令有:
c 可显示CPU的信息
m 对应内存
n 对应网络
d 可以查看磁盘信息
t 可以查看系统的进程信息
 

五、后台采集数据:

[deployer@host-10-191-37-13 nmon]$ mkdir ~/nmon/logs
[deployer@host-10-191-37-13 nmon]$ ./nmon_64_centos6 -s1 -c60 -f -m ~/nmon/logs/

运行后,后台静默采集数据

-s1 每隔n秒抽样一次,这里为1秒,实操建议5-10秒进行一次采样
-c60 取出多少个抽样数量,这里为60,即监控=1*60/60=1分钟
-f 按标准格式输出文件名称:<hostname>_YYMMDD_HHMM.nmon
-m 指定监控文件的存放目录,-m后跟指定目录

[deployer@host-10-191-37-13 nmon]$ cd logs/
[deployer@host-10-191-37-13 logs]$ ll -h
total 68K
-rw-rw-r-- 1 deployer deployer 67K Jun 12 10:02 host-10-191-37-13_190612_1001.nmon

 

六、将数据下载到本地

①将报告转换成csv格式:

[deployer@host-10-191-37-13 logs]$ sort host-10-191-37-13_190612_1001.nmon > 190612_1001.csv
[deployer@host-10-191-37-13 logs]$ ll -h
total 136K
-rw-rw-r-- 1 deployer deployer 67K Jun 12 10:16 190612_1001.csv
-rw-rw-r-- 1 deployer deployer 67K Jun 12 10:02 host-10-191-37-13_190612_1001.nmon

②使用你熟悉的命令将.csv文件下载到本地
 

七、生成报表

打开nmon analyser工具

在本地解压nmon_analyser_v47.zip,打开:nmon analyser v47.xlsm

点击Analyse nmon data按钮,加载之前下载的csv文件。


    355 位表示想打赏此文章

postman的时间日期/时间戳

接口测试时往往需要自定义生成时间、日期、时间戳,网上较多资料是使用math,但我并不建议使用。

postman的sanbox功能(JavaScript的执行环境)支持moment库,在pre-request script和tests中引用moment能方便直观地生成时间、日期和时间戳。详细语法可以参考官网:https://momentjs.com/

moment常见的用法介绍:(假设目前长时间戳为:1561892651418)

moment().format("X") //X:短时间戳
--1561892651
moment().format("x") //x:长时间戳
--1561892651418
moment().format("ss") //ss:秒数
--11
moment().format("SSS") //SSS:毫秒数
--418
moment().format("YYYYMMDD-hhmmss") //hh:12小时制度
--20190630-070411
moment().format("YYYYMMDD-HHmmss") //HH:24小时制
--20190630-190411
  • SSS、YYYY代表3位毫秒数、4位年份。只输入1位S则表示只取第一位毫秒数。
  • 利用此特性,moment().format(“XS”)则表示短时间戳+第一位毫秒数。

实例:(在pre-request script或tests中编辑,假设目前长时间戳为:1561892651418)

//先引用moment库
var moment = require('moment')
//X代表短时间戳,SSS代表毫秒
//X+S ≈ 精确到0.1秒
pm.globals.set("now", moment().format("XS"));
-------------------------------------
全局变量now的值为15618926514
    283 位表示想打赏此文章

postman+newman做自动化测试

一、安装node.js

官网地址:https://nodejs.org/en/

安装完成后,打开cmd(win+R),运行npm -version,顺利提示版本号即安装成功。

二、安装newman

打开cmd(win+R),运行 npm install -g newman

安装完成后,运行 newman –version 校验是否安装成功

三、安装reporter

执行npm install -g newman-reporter-html来全局安装支持Newman生成html报告的组件

这里只列举了html,因为实际使用过程中就html的可读性比较高。

四、newman命令

语法:newman run <collection-file-source> [options]

详情参阅:command_line_integration_with_newman

Options:

Utility:
-h, --help output usage information
-v, --version output the version number

Basic setup:
--folder [folderName] Specify a single folder to run from a collection.
-e, --environment [file|URL] Specify a Postman environment as a JSON [file]
-d, --data [file] Specify a data file to use either json or csv
-g, --globals [file] Specify a Postman globals file as JSON [file]
-n, --iteration-count [number] Define the number of iterations to run

Request options:
--delay-request [number] Specify a delay (in ms) between requests [number]
--timeout-request [number] Specify a request timeout (in ms) for a request

Misc.:
--bail Stops the runner when a test case fails
--silent Disable terminal output
--no-color Disable colored output
-k, --insecure Disable strict ssl
-x, --suppress-exit-code Continue running tests even after a failure, but exit with code=0
--ignore-redirects Disable automatic following of 3XX responses

 

下面细说几个常用的[option]

newman run <collection-file-source>
newman run mycollection.json
newman run https://www.getpostman.com/collections/cb208e7e64056f5294e5

newman是全局命令,打开cmd即可运行。<collection-file-source>可以写绝对路径,或者相对路径。

mycollection.json是从postman导出来的工程,导出方法:

-e, –environment [file|URL]
newman run mycollection.json -e dev.json
newman run mycollection.json --environment test.json

dev.json是从postman导出来的环境变量,导出方法:

需要注意,环境变量或者全局变量,存在两列的值,分别是initial value和current value。current value是你在postman中使用的值,initial value才是你导出值。

-g, –globals [file]
newman run mycollection.json -g globals.json
newman run mycollection.json --globals globals.json

globals.json是从postman导出来的全局变量,导出方法:

在环境变量的底部,会发现有全局变量的入口。在全局变量的底部,有导出按钮。

–reporters cli,html,junit –reporter-html-export <reporter-path>
newman run mycollection.json --reporters cli,html,junit --reporter-html-export result.html

 

 

 

    174 位表示想打赏此文章

MySQL delete 命令

MySQL的delete语句跟Oracle差很远,初始使用经常会报语法错误:

You have an error in your SQL syntax;

后来总结&网上找答案发现,MySQL的delete不能带子查询,所以完整的、正确的句法是:

DELETE FROM system_user 

WHERE sys_user_code IN (

SELECT * FROM

(SELECT su.sys_user_code FROM system_user su WHERE su.SYS_USER_CODE LIKE ‘%test%’) t

)

    278 位表示想打赏此文章

vi常用快捷键

x 删除光标处的字符
dd 删除整行
i 在光标前插入文本
a 在光标后插入文本
o 当前行下插入新行
u 撤销最后一次修改

/text:向前搜索text
?text:向后搜索text

( 移到句子的开头
) 移到句子的结尾
{ 移到段落的开头
} 移到下一个段落的开头

:e! 放弃所有修改,从上次保存开始处再编辑
:wq 保存退出
:q! 不保存退出

:set nu 打印行号
:set ff=unix 转为unix格式(用于windows下编辑过的文件)

    275 位表示想打赏此文章

wordpress引用框css样式

#sc_notice {

color#7da33c;

background#ecf2d6 url(‘img/sc_notice.png’) –1px –1px no-repeat;

border1px solid #aac66d;

overflowhidden;

margin10px 0;

padding15px 15px 15px 35px;

}

 

#sc_warn {

color#ad9948;

background#fff4b9 url(‘img/sc_warn.png’) –1px –1px no-repeat;

border1px solid #eac946;

overflowhidden;

margin10px 0;

padding15px 15px 15px 35px;

}

 

#sc_error {

color#c66;

background#ffecea url(‘img/sc_error.png’) –1px –1px no-repeat;

border1px solid #ebb1b1;

overflowhidden;

margin10px 0;

padding15px 15px 15px 35px;

}

 

#sc_tips {

color#777;

background#eaeaea url(‘img/sc_tips.png’) –1px –1px no-repeat;

border1px solid #ccc;

overflowhidden;

margin10px 0;

padding15px 15px 15px 35px;

}

 

#sc_blue {

color#1ba1e2;

background: rgba(27, 161, 226, 0.26) url(‘img/sc_blue.png’) –1px –1px no-repeat;

border1px solid #1ba1e2;

overflowhidden;

margin10px 0;

padding15px 15px 15px 35px;

}

 

#sc_black {

border-width1px 4px 4px 1px;

border-stylesolid;

border-color#3e3e3e;

margin10px 0;

padding15px 15px 15px 35px;

}

 

#sc_xuk {

border2px dashed rgb(41, 170, 227);

background-colorrgb(248, 247, 245);

margin10px 0;

padding15px 15px 15px 35px;

}

 

#sc_lvb {

margin10px 0;

padding10px 15px;

border1px solid #e3e3e3;

border-left2px solid #05B536;

background#FFF;

}

 

#sc_redb {

margin10px 0;

padding10px 15px;

border1px solid #e3e3e3;

border-left2px solid #ED0505;

background#FFF;

}

 

#sc_organge {

margin10px 0;

padding10px 15px;

border1px solid #e3e3e3;

border-left2px solid #EC8006;

background#FFF;

}