-
如何让Fiddler模拟重复发送请求多次
2018-10-12 17:27:33
-
手把手用Monkey写一个压测脚本
2018-06-04 15:45:11
https://segmentfault.com/a/1190000008491332
手把手用Monkey写一个压测脚本
https://segmentfault.com/a/1190000008300644
移动APP测试之Monkey Test 运用
-
JMeter-Test Fragment
2018-01-14 17:35:15
不能直接执行,必须通过逻辑控制器中的Include_Controller 或者模块控制器来调用。添加下级组件的方法与线程组相同(可以简单理解为不能执行的线程组)。
在模块化脚本构建中会很好用。比如:将登录脚本保存为一个Test Fragment, 然后就可以在其他所有需要登录的测试脚本中调用这个Test Fragment,而不需要在每个测试脚本中都再写一个登录过程。(特别是测试脚本多,而登录脚本有变动的时候,只需要修改登录的Test Fragment,大大减少工作量)
-
在mac上通过Homebrew安装redis
2017-11-13 16:54:00
使用Homebrew安装redis可以减少大量的安装和配置的工作量。
安装命令brew install redis
➜ ~ brew install redis
Updating Homebrew...
==> Auto-updated Homebrew!
Updated 1 tap (homebrew/core).
==> New Formulae
csvkit e2tools just simg2img
dps8m heartbeat kaitai-struct-compiler
==> Updated Formulae
imagemagick ✔ faas-cli jenkins-lts node rtags
abcmidi feh jruby node-build scalaenv
alexjs ffmpeg@2.8 kerl node@4 scalastyle
amazon-ecs-cli filebeat kibana node@6 scm-manager
apibuilder-cli firebase-cli knot-resolver ntl selenium-server-standalone
app-engine-java flow kobalt nuttcp simple-obfs
aria2 fluent-bit kubectx omniorb singular
asciidoc fn kubernetes-cli ompl sjk
b2-tools frugal ldc openvdb solr
babl gdcm libcue ortp source-to-image
bash-snippets gegl libfabric packetbeat sourcekitten
bazel getdns libfixbuf packetq ssdeep
binaryen geth libgsf paket sslyze
bit git-annex libmaxminddb pandoc svgo
bluepill glide libogg pandoc-crossref swiftformat
buku gmic libpq pcl swiftlint
certigo gmt libpqxx pdfcrack syncthing
charm-tools gmt@4 libuv pick telegraf
chisel gnu-time logstash pipenv temporal_tables
cimg gnupg logtalk poco terragrunt
clojure go-jira mdds poppler tintin
cmake gofabric8 metricbeat postgresql typescript
convox gradle mikutter postgresql@9.4 uncrustify
couchdb grpc mingw-w64 postgresql@9.5 vala
cppad gsmartcontrol mitie postgresql@9.6 vapoursynth
davix gtk+3 monit pre-commit vtk
debianutils hadoop mupdf prometheus wireguard-tools
django-completion hashcat mupdf-tools protobuf-swift xmake
docfx hive mypy pushpin yara
docker-compose i2p nanomsg py2cairo zabbix
docker-compose-completion imagemagick@6 nativefier py3cairo zint
doitlive immortal nco rabbitmq zurl
dssim influxdb ncview rbenv-bundler
elasticsearch inspircd neovim re2c
erlang iron-functions netcdf resty
exploitdb jenkins nickle ringojs
==> Renamed Formulae
newsbeuter -> newsboat
==> Deleted Formulae
bchunk
==> Downloading https://homebrew.bintray.com/bottles/redis-4.0.2.sierra.bottle.1.tar.gz
######################################################################## 100.0%
==> Pouring redis-4.0.2.sierra.bottle.1.tar.gz
==> Caveats
To have launchd start redis now and restart at login:
brew services start redis
Or, if you don't want/need a background service you can just run:
redis-server /usr/local/etc/redis.conf
==> Summary
🍺 /usr/local/Cellar/redis/4.0.2: 13 files, 2.8MB
➜ ~ pwd
/Users/mac
➜ ~ cd /usr/local/Cellar/redis/4.0.2/bin
➜ bin ls
redis-benchmark redis-check-aof redis-check-rdb redis-cli redis-sentinel redis-server
➜ bin ./redis-cli -h ceshi.my.com -p 6378 -a 密码
^C
➜ bin ./redis-cli -h ceshi.my.com -p 6379 -a 密码
ceshi.my.com:6379> select 1
OK
ceshi.my.com:6379[1]> key reg_*
(error) ERR unknown command 'key'
ceshi.my.com:6379[1]> keys reg_*
1) "reg_18515108600"
2) "reg_18629081280"
3) "reg_13620171113"
4) "reg_13311111111"
5) "reg_13232323232"
ceshi.my.com:6379[1]> get reg_reg_18515108600
(nil)
ceshi.my.com:6379[1]> get reg_18515108600
"877635"
ceshi.my.com:6379[1]>
➜ bin pwd
/usr/local/Cellar/redis/4.0.2/bin
➜ bin ./redis-cli -h ceshi.my.com -p 6379 -a password
ceshi.my.com:6379> keys *
'1) "PHP_java_api_sum"
2) "PHP_Admin_Nav"
3) "PHP_Admin_Node_All"
4) "PHP_categorylist_level"
5) "PHP_rbac_shop_redis_list"
6) "PHP_java_api_method_sum"
ceshi.my:6379> select 1
OK
ceshi.my.com:6379[1]> keys *
1) "3FED2D01D8A12A8AD4D3F350021DD47215058012181411198238304"
2) "AE3E6F82854148CF32748D18E80ADE2D20170907164715876"
3) "1090618090000000000"
4) "after_sale_flow_status_111061508228501275_1"
5) "AB704CCAD89A6917BA6D9AAD278BEEE315088370708211667596991"
6) "5FFE8167AE474DEBF5892639EC2238A715054574645237655558901"
7) "F71C1624C3CA1F23F5994C93C571572515084969572546594824039"
8) "1080312030300000000"
9) "1090424060000000000"要在Redis远程服务器上运行命令,需要通过客户端
redis-cli
连接到服务器语法
[yiibai@ubuntu:~]$ redis-cli -h host -p port -a password
Shell示例
以下示例显示如何连接到Redis远程服务器,在主机(host)127.0.0.1
,端口(port)6379
上运行,并使用密码为mypass
。[yiibai@ubuntu:~]$ redis-cli -h 127.0.0.1 -p 6379 -a "mypass" redis 127.0.0.1:6379> redis 127.0.0.1:6379> PING PONG
-
mac安装Redis可视化工具-Redis Desktop Manager
2017-11-13 10:50:38
http://www.jianshu.com/p/214baa511f2eRedis Desktop Manager
一款基于Qt5的跨平台Redis桌面管理软件
支持: Windows 7+, Mac OS X 10.10+, Ubuntu 14+
特点: C++ 编写,响应迅速,性能好。但不支持数据库备份与恢复。
项目地址: https://github.com/uglide/RedisDesktopManager
安装方法
-
安装brew cask : 在终端中输入下面语句 回车
ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null
可能会需要你的mac密码,输入即可
-
安装Redis Desktop Manager
安装完cask之后,在终端中输入 回车brew cask install rdm
安装完成后
打开rdm.app 连接redis数据库
- 也可以去项目的github找最新的版本
https://github.com/uglide/RedisDesktopManager/releases/
-
-
如何查看IOS的CRASH
2017-10-17 16:27:39
用户把设备连接到电脑上,打开xcode-window-organizer,选中Devices-当前连接设备-Device Log,就可以查看所有当前设备的crash log,这个时候打开每一份crash的时候,发现这些文件的部分地址都会被转换成,类名,方法名和行号等
-
Genymotion添加手机模拟器步骤详解
2017-08-10 15:43:42
-
MAC安装monkey工具
2017-03-24 18:34:28
转自http://www.jianshu.com/p/9823ac1fcb69
一、monkey测试简介:
monkey工具是Android自动化测试工具的一种,主要对Android,APP可进行压力测试。(总结)
Monkey是Android中的一个命令行工具,可以运行在模拟器里或实际设备中。它向系统发送伪随机的用户事件流(如按键输入、触摸屏输入、手势输入等),实现对正在开发的应用程序进行压力测试。Monkey测试是一种为了测试软件的稳定性、健壮性的快速有效的方法。
二、 Monkey的特征
1、 测试的对象仅为应用程序包,有一定的局限性。
2、 Monky测试使用的事件流数据流是随机的,不能进行自定义。
3、 可对MonkeyTest的对象,事件数量,类型,频率等进行设置。
三、安装monkey工具
1》下载安装了JDK
附JDK官网下载链接http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
下载截图(其中需要同意许可证,同时针对mac下载已标注)
安装成功后,在终端上输入 javac -version 若弹出版本信息,已经安装成功了
2》下载Android开发环境的Adt Bundle
附下载链接http://www.cnblogs.com/tc310/p/3938353.html
下面是下载截图(针对mac下载已标注)
此时打开终端输入adb会提示-bash: abd: command not found。需要解决Android SDK的adb命令添加到环境变量的问题。
1.启动终端,进入到当前用户的Home目录(命令在下一行)
cd $HOME
2.创建 .bash_profile文件
touch .bash_profile
3.打开 .bash_profile 文件,对其内容进行编辑
open -e .bash_profile
4.此时文本编辑器会打开一个文本,编辑内容如下:
export PATH=/Users/JianDan/dev_android/adt-bundle-mac-x86_64-20130729/sdk/platform-tools/:$PATH
注意:在网上搜索了很多文章,多数写的是 PATH=${PATH}:/eclipse/android_sdk/platform-tools(这样写的解释
是:如果是需要添加很多命令到PATH下时,需要用“:”(英文的冒号)隔开即可,因为Android和adb这些命令是在不同的
文件夹中的,这样才能两者兼得.),而没有最后面:$PATH,结果我重复了N次创建删除 .bash_profile文件,也复制
粘贴了N次PATH=${PATH}:/eclipse/android_sdk/platform-tools,就是配置不对。编辑完成后,可直接关闭,此时已保存
5.更新此文件
source .bash_profile
此时的adb环境配置好,可以检验一下
6.检验是否成功(终端输入)
adb devices
配置成功的截图在下面
顺便来一张monkey测试的贴图
-
对比IOS自动化工具UIAutomation和Appium
2017-03-15 17:46:52
-
Android 内存监测工具 DDMS --> Heap, 用MAT分析heap dumps
2016-12-27 11:41:15
-
接口测试工具-SoapUI
2016-12-13 15:21:23
-
[转]Git教程
2016-11-01 17:37:59
史上最浅显易懂的Git教程!为什么要编写这个教程?因为我在学习Git的过程中,买过书,也在网上Google了一堆Git相关的文章和教程,但令人失望的是,这些教程不是难得令人 发指,就是简单得一笔带过,或者,只支离破碎地介绍Git的某几个命令,还有直接从Git手册粘贴帮助文档的,总之,初学者很难找到一个由浅入深,学完后 能立刻上手的Git教程。
既然号称史上最浅显易懂的Git教程,那这个教程有什么让你怦然心动的特点呢?
首先,本教程绝对面向初学者,没有接触过版本控制概念的读者也可以轻松入门,不必担心起步难度;
其次,本教程实用性超强,边学边练,一点也不觉得枯燥。而且,你所学的Git命令是“充分且必要”的,掌握了这些东西,你就可以通过Git轻松地完成你的工作。
文字+图片还看不明白?有视频!!!
本教程只会让你成为Git用户,不会让你成为Git专家。很多Git命令只有那些专家才明白(事实上我也不明白,因为我不是Git专家),但我保证这些命 令可能你一辈子都不会用到。既然Git是一个工具,就没必要把时间浪费在那些“高级”但几乎永远不会用到的命令上。一旦你真的非用不可了,到时候再自行 Google或者请教专家也未迟。
如果你是一个开发人员,想用上这个世界上目前最先进的分布式版本控制系统,那么,赶快开始学习吧!
http://www.liaoxuefeng.com/wiki/0013739516305929606dd18361248578c67b8067c8c017b000 -
Eclipse导入SVN项目的三种方式
2016-09-23 17:40:45
一.直接Import导入:
1.点击 File –> Import,进入导入项目窗口
2.选择从SVN检出项目,点击Next
3.选择创建新的资源库位置,点击Next
4.在URL处输入SVN项目远程地址,点击Next
5.选中检索到的远程项目,点击Next
6.输入项目名称,点击Next
7.选择工作空间,点击Finish,到此项目导入完成。
二.SVN资源库导入:
1.点击Eclipse右上角带“+”的图标,进入Open Perspective窗口
2.选择SVN资源研究库,点击OK
3.右上角出现对应的图标,同时进入SVN资源库界面
4.在空白位置单击右键,点击 新建 –> 资源库位置,进入添加SVN资源库界面
5.在URL处输入SVN项目远程地址,点击Finish
6.在SVN资源库界面出现检索到的远程项目
7.点击远程项目的SVN地址,单击右键,点击“检出为”
8.输入项目名称,点击Next
9.选择工作空间,点击Finish,到此项目导入完成。
三.SVN客户端导入:
1.创建一个空文件夹,在文件夹中单击右键,点击”SVN Checkout”
2.出现Checkout窗口,在URL of repository 处输入SVN项目远程地址,点击OK
3.等待项目检出成功
4.点击OK,文件夹中会出现以下内容
5.打开Eclipse, 点击 File –> Import,进入导入项目窗口
6.选择普通导入项目方式:General –> Existing Projects into Workspace,点击Next
7.进入Import窗口,点击Browse选择之前创建的文件夹
8.选择之后,出现项目地址和项目名称,点击Finish,到此项目导入完成
9.Eclipse的Project Explorer界面出现导入的项目,显示的是Java项目,若是Web项目只需进行相应设置即可。
-
maven安装
2016-09-23 17:20:51
1、首先去官方网站下载之:[url]http://maven.apache.org/download.html[/url],我选择的是截至目前最新版本maven2.0.4版本
2、设置环境变量:Maven2下载完后,我将其解压到我的计算机的d:\maven204下,目录结构如下:
D:\
|--Maven204
|-- bin
|-- conf
|-- core
|-- lib
|-- local
环境变量:(操作系统windows2003)
我的电脑----属性----高级----环境变量,点击“系统变量”下的新建,输入:变量名 MAVEN_HOME; 变量值d:\Maven204,在系统变量列表中找到系统变量path,打开之,在变量值中追加”;%MAVEN_HOME%\bin”,至此环境变量设置完毕。
检查一下是否已经完成安装,打开dos窗口,输入mvn –v,如果出现以下信息则表示maven2已经安装成功:
X:〉mvn –v
Maven Version 2.0.4 -
Jetty与 Tomcat 的比较
2016-09-23 16:37:28
Tomcat 和 Jetty 都是作为一个 Servlet 引擎应用的比较广泛,可以将它们比作为中国与美国的关系,虽然 Jetty 正常成长为一个优秀的 Servlet 引擎,但是目前的 Tomcat 的地位仍然难以撼动。相比较来看,它们都有各自的优点与缺点。
Tomcat 经过长时间的发展,它已经广泛的被市场接受和认可,相对 Jetty 来说 Tomcat 还是比较稳定和**,尤其在企业级应用方面,Tomcat 仍然是第一选择。但是随着 Jetty 的发展,Jetty 的市场份额也在不断提高,至于原因就要归功与 Jetty 的很多优点了,而这些优点也是因为 Jetty 在技术上的优势体现出来的。架构比较
从架构上来说,显然 Jetty 比 Tomcat 更加简单,如果你对 Tomcat 的架构还不是很了解的话,建议你先看一下 《Tomcat系统架构与设计模式》这篇文章。
Jetty 的架构从前面的分析可知,它的所有组件都是基于 Handler 来实现,当然它也支持 JMX。但是主要的功能扩展都可以用 Handler 来实现。可以说 Jetty 是面向 Handler 的架构,就像 Spring 是面向 Bean 的架构,iBATIS 是面向 statement 一样,而 Tomcat 是以多级容器构建起来的,它们的架构设计必然都有一个“元神”,所有以这个“元神“构建的其它组件都是肉身。
从设计模板角度来看,Handler 的设计实际上就是一个责任链模式,接口类 HandlerCollection 可以帮助开发者构建一个链,而另一个接口类 ScopeHandler 可以帮助你控制这个链的访问顺序。另外一个用到的设计模板就是观察者模式,用这个设计模式控制了整个 Jetty 的生命周期,只要继承了 LifeCycle 接口,你的对象就可以交给 Jetty 来统一管理了。所以扩展 Jetty 非常简单,也很容易让人理解,整体架构上的简单也带来了无比的好处,Jetty 可以很容易被扩展和裁剪。
相比之下,Tomcat 要臃肿很多,Tomcat 的整体设计上很复杂,前面说了 Tomcat 的核心是它的容器的设计,从 Server 到 Service 再到 engine 等 container 容器。作为一个应用服务器这样设计无口厚非,容器的分层设计也是为了更好的扩展,只是这种扩展方式将应用服务器的内部结构暴露给外部使用者,使得如果想扩 展 Tomcat,开发人员必须要首先了解 Tomcat 的整体设计结构,然后才能知道如何按照它的规范来做扩展。这样无形就增加了对 Tomcat 的学习成本。不仅仅是容器,实际上 Tomcat 也有基于责任链的设计方式,像串联 Pipeline 的 Vavle 设计也是与 Jetty 的 Handler 类似的方式。要自己实现一个 Vavle 与写一个 Handler 的难度不相上下。表面上看,Tomcat 的功能要比 Jetty 强大,因为 Tomcat 已经帮你做了很多工作了,而 Jetty 只告诉,你能怎么做,如何做,由你去实现。 打个比方,就像小孩子学数学,Tomcat 告诉你 1+1=2,1+2=3,2+2=4 这个结果,然后你可以根据这个方式得出 1+1+2=4,你要计算其它数必须根据它给你的公式才能计算,而 Jetty 是告诉你加减乘除的算法规则,然后你就可以根据这个规则自己做运算了。所以你一旦掌握了 Jetty,Jetty 将变得异常强大。性能比较
单纯比较 Tomcat 与 Jetty 的性能意义不是很大,只能说在某种使用场景下,它表现的各有差异。因为它们面向的使用场景不尽相同。从架构上来看 Tomcat 在处理少数非常繁忙的连接上更有优势,也就是说连接的生命周期如果短的话,Tomcat 的总体性能更高。
而 Jetty 刚好相反,Jetty 可以同时处理大量连接而且可以长时间保持这些连接。例如像一些 web 聊天应用非常适合用 Jetty 做服务器,像淘宝的 web 旺旺就是用 Jetty 作为 Servlet 引擎。
另外由于 Jetty 的架构非常简单,作为服务器它可以按需加载组件,这样不需要的组件可以去掉,这样无形可以减少服务器本身的内存开销,处理一次请求也是可以减少产生的临时 对象,这样性能也会提高。另外 Jetty 默认使用的是 NIO 技术在处理 I/O 请求上更占优势,Tomcat 默认使用的是 BIO,在处理静态资源时,Tomcat 的性能不如 Jetty。特性比较
作为一个标准的 Servlet 引擎,它们都支持标准的 Servlet 规范,还有 Java EE 的规范也都支持,由于 Tomcat 的使用的更加广泛,它对这些支持的更加全面一些,有很多特性 Tomcat 都直接集成进来了。但是 Jetty 的应变更加快速,这一方面是因为 Jetty 的开发社区更加活跃,另一方面也是因为 Jetty 的修改更加简单,它只要把相应的组件替换就好了,而 Tomcat 的整体结构上要复杂很多,修改功能比较缓慢。所以 Tomcat 对最新的 Servlet 规范的支持总是要比人们预期的要晚。
-
使用tcpdump和wireshark对Android应用程序进行抓包并分析
2016-09-05 14:40:35
本文主要介绍如何使用tcpdump和wireshark对Android应用程序进行抓包并分析,需要说明的是在抓包之前,你的Android设备必须root过了,另外你的电脑必须有Android SDK环境。
下载并安装tcpdump
tcpdump链接:http://www.tcpdump.org/
选择一个版本下载并解压提取出其中tcpdump文件,然后push到你的手机上去:
1adb push c:\tcpdump /data/local/tcpdump进一步操作:
123adb shellsuchmod +x /data/local/tcpdump然后就可以开始抓包了:
1/data/local/tcpdump -p -vv -s 0 -w /sdcard/capture.pcap这时你可以操作应用程序相应的操作了,抓包完毕后ctrl+c停止抓包。
然后将抓到pcap文件传输本地开始进行分析了,这里假设你pull到c盘目录下。
1adb pull /sdcard/capture.pcap c:/使用wireshark分析抓包数据
pc上安装wireshark
wireshark下载:http://www.wireshark.org/download.html
如果安装完毕,就可以直接打刚才的pcap文件了。
使用过滤器filter
如果抓到的东西过多,可以使用上方的过滤器,比如我只看http协议,并且是由我设备发出的
右键记录查看tcp stream
这个功能我比较喜欢,可以查看此次http,client端请求和server端返回的数据
还有我觉得更厉害的功能
可以把请求的内容和结果存储下来,比如可以查看post的内容
这是在面板看到的具体的tcp/ip各层的内容
但是这种编码之后,并且以字节流发出去的东西很让人讨厌,利用存储可能,你就可以看到具体的结果了:
选择File->Export Objects->HTTP,导出这条记录就可以啦。
最后总结下
这是我最近在工作中实际用得到的,但在实际操作tcpdump和wireshark的时候,有更多功能、技巧可以挖掘出来,这篇文章算是对从来没有用过这两个工具的人的一个入门介绍吧。
from:http://www.myhack58.com/Article/48/67/2013/39798.htm
-
Snagit--图像捕捉和视频捕捉工具
2016-07-19 15:00:58
Snagit支持各种形式的图像捕捉,包括常见窗口,DirectX表面捕捉(游戏)和视频捕捉,web 捕捉,支持几乎所有常见的图片格式,并具有后期图片编辑和管理功能。试用期15天。 -
FastStone Capture屏幕抓图软件
2016-07-07 10:48:57
FastStone Capture是一款灵活简单的屏幕抓图软件。FastStone Capture可抓取某个窗口或者对象的图片,也可全屏或者以矩形模式抓图,甚至可按照手绘的任意形状抓图。 -
编辑器sed
2016-06-14 10:09:08
原文链接:http://www.linuxso.com/command/grep.html
sed 是一种UNIX/LINUX 平台下的轻量级流编辑器,日常一般用于处理文本文件。sed 有许多很好的特性。首先,它相当小巧;其次, sed 可以配合强大的 shell 完成许多复杂的功能。在我看来,sed完全可以看成一个脚本解释器,用类似于编程的手段完成许多事情。
sed简单示例
sed命令的格式是
sed [-options] [command] [stdin]
比如这个例子
$ sed –e ‘d’ ./Mydir/Myfile
执行该命令,将得不到任何输出。在该例中,用一个编辑命令 'd' 调用 sed;sed 打开 ./Mydir/Myfile 将一行读入其模式缓冲区,执行’d’(“删除行”);然后打印模式缓冲区(缓冲区已为空);它对后面的每一行重复这些步骤,这不会产生输出!
对 这个命令要说明的几点是:首先,它根本没有修改 ./Mydir/Myfile。这是因为 sed 是流处理器,它只读取在命令行指定的文件,它不试图修改该文件。其次, sed 是面向行的,'d' 命令不是简单地告诉 sed 一下子删除所有输入数据;相反,sed 逐行将 ./Mydir/Myfile 的每一行读入其称为模式缓冲区的内部缓冲区,一旦将一行读入模式缓冲区,它就执行 'd' 命令,然后打印模式缓冲区的内容。最后要注意的事是括起 'd' 命令的单引号的用法,这样可以禁用 shell 扩展。指定sed的作用范围
看下面的三个例子
$ sed –e ‘1d’ ./Mydir/Myfile
$ sed –e ‘1,10d’ ./Mydir/Myfile
$ sed –e ‘/begin/,/end/p’ ./Mydir/Myfile
第一个例子说明只删除./Mydir/Myfile第一行的缓冲,第二个例子将删除第1~10行的缓冲。第三个例子最复杂,它定义了以字符串’begin’开始到’end’结束的作用范围sed中的正则表达式
sed支持正则表达式,比如
$ sed –n -e ‘/regexp/p’ ./Mydir/Myfile
比如要删除所有的空行
$ sed –e ‘/^$/d’ ./Mydir/Myfile
sed中的一些特殊定义是
规则 表达式 描述
/./ 将与包含至少一个字符的任何行匹配
/../ 将与包含至少两个字符的任何行匹配
/^#/ 将与以 '#' 开始的任何行匹配
/^$/ 将与所有空行匹配
/}^/ 将与以 '}'(无空格)结束的任何行匹配
/} *^/ 将与以 '}' 后面跟有 零或多个空格结束的任何行匹配
/[abc]/ 将与包含小写 'a'、'b' 或 'c' 的任何行匹配
/^[abc]/ 将与以 'a'、'b' 或 'c' 开始的任何行匹配
再比如一个经典的例子,打印c源代码中的main函数内容,其命令可以写成如下
$ sed –n –e ‘/main[[:space]]*(/,/^}/p’ ./Mydir/*.c
其中[:space]表示空格,[[:space]]*表示有0~多个空格,所以main[[:space]]*(的意思是匹配“main (”字符串;“^}”表示这一行有且只有一个字符}。当然,上面的命令不是十分严谨。sed –e ‘s/regexp/repalcement’ file
替换是sed命令中最常用的命令,比如如下的例子
$ sed –e ‘s/a/b’ ./Mydir/Myfile
$ sed –e ‘s/a/b/g’ ./Mydir/Myfile
第一个命令将./Mydir/Myfile中每一行第一次出现的字符a替换成字符b;第二个命令由于加入了’/g’,表示是全局(全部)替换字符a成字符b。经常还可以看见如下两种形式的sed
$ sed –e ‘1,10s/a/b’ ./Mydir/Myfile
$ sed –e ‘/^$/,/^END/s/a/b/g’ ./Mydir/Myfile
第一个命令是指替换1~10行;第二个命令是指全局替换从空行开始到以END开始的行中的内容。替换命令不一定非要以/分隔,比如
$ sed –e ‘s:usr/local:/usr:g’ ./Mydir/Myfile
就是将./Mydir/Myfile中的usr/local全部替换成/usr要用好替换命令,当然要使用正则表达式,除了上面所说的表达式的例子,还有一些是非常有用的
字符类 描述
[:alnum:] 字母数字 [a-z A-Z 0-9]
[:alpha:] 字母 [a-z A-Z]
[:blank:] 空格或制表键
[:cntrl:] 任何控制字符
[:digit:] 数字 [0-9]
[:graph:] 任何可视字符(无空格)
[:lower:] 小写 [a-z]
[:print:] 非控制字符
[:punct:] 标点字符
[:space:] 空格
[:upper:] 大写 [A-Z]
[:xdigit:] 十六进制数字 [0-9 a-f A-F]
比如下面这个例子
$ sed –e ‘s/<[^>]*>//g’ ./Mydir/Myfile
<[^>]*>匹配<…>这样的字符串(…中不含>)。运行这个命令,能够将 “This is what I meant.”这样的字符串替换成“This is what I meant.”考察如下的命令
$ sed -e 's/.*/# &/' ./Mydir/Myfile
这个命令将所有的非空行以“#”注释掉——&告诉sed在行首插入字符。‘s///’允许我们在规则表达式中定义区域,然后可以在替换字符串中引用这些特定区域。这些区域是以(和)隔开的。
比如定义三个匹配非空字符的区域'(.*) (.*) (.*)',现在可以定义这三个区域的动作,比如
$ sed -e 's/(.*) (.*) (.*)/PreFix 1-2 Fix 3/' ./Mydir/Myfile
假如把三个区域分别命名为a、b、c,则最后结果是 PreFix a-b Fix csed中组合命令
sed中的命令可以组合,以;号隔开,比如
$ sed –n –e ‘=;p’ ./Mydir/Myfile
=表示打印行号,p表示打印。对于更复杂的指令,则可以写成命令脚本,然后用-f选项导入,比如
$ sed –n –f MyScript.sed ./Mydir/Myfile
对于同一个地址上的操作,则可以用{}组合,比如
$ sed –n ‘1,20{ s/samba/Samba/g s/posix/POSIX/g }’ ./Mydir/Myfilesed中的行附加命令
在当前行之前插入行“i”,如果要插入多行,则将多行用分隔
在当前行之后插入行“a”,用法和上面相似
更改当前行“c” -
Jenkins简单使用介绍
2016-01-08 15:22:36
一、Jenkins的配置
1. 下载地址:
Jenkins的官方网站:http://jenkins-ci.org/
目前最新版本的Windows版:http://mirror.xmission.com/jenkins/windows/jenkins-1.504.zip
2. 安装
Windows版的安装方式,直接按照安装包提示即可。此版本自带服务器,安装之后,就可以直接访问。
如果下载的是.war文件,可以用tomcat进行配置。并且安装java,使用Java -jar jenkins.war命令。
3. 启动服务
在服务中,启动jenkins。
4. 访问
使用 http://localhost:8080/ 访问,默认端口为8080,可以修改。
二、权限
1. 插件管理
Jenkins提供了大量的插件,其中在对用户进行管理配置这块推荐使用“Role-basedAuthorization Strategy”
如下图在“系统管理”界面下,点击“管理插件”进入插件安装界面。Jenkins的插件安装管理配置都很简单,通过web直接全能搞定。
插件管理界面如下图所示:
勾选需要的插件,到页面最下面有两个按钮“Install without restart” “Download now and install after restart”,根据需要点选提交开始安装。
2. “Role-basedAuthorization Strategy”的启用:
点击“系统管理”点击“系统设置”,如下图所示:“安全域”选择使用Jenkins专有用户数据库,可以在初始化的时候勾选“允许用户注册”,以后为了安全,请关闭该项;“授权策略”选择使用“Role-Based Strategy”。
配置完成save后在“系统管理”下新增选项“Manage and Assign Roles”。点击“管理用户”新建账户后即可进行账户,群组的安全策略配置。
3. 管理组权限设置,构建权限设置:
点击“Manage and AssignRoles”,先选择“Manage Roles”如下图所示,在Global roles这里创建权限分组,如admin是最高管理员权限,拥有所有权限,readonly只有读权限等,这里可以根据具体情况设置多个分组,不同权限;然后设置“Project roles”,Role to add 填写分组名称,Pattern填写分组的规则。例如这个分组叫test,他的规则就是构建名为“test.*”的所有构件,然后在“Job”区里勾选相关权限。设置完成点保存即可。
4. 用户权限分配:
点击“Assign Roles”如下图所示,在“Global roles”下“User/group to add”栏中输入添加的用户名,然后勾选管理组。记得把默认的匿名用户“Anonymous”的默认admin权限去掉,在添加管理员之后,否则不需登录就能控制整个Jenkins的权限;在“Project roles”下“User/group to add”栏中输入添加的用户名,然后勾选对应构建权限名。设置完保存即可。
三、创建Job
1. 创建
点击新Job,输入一个job名称,选择一个项目的类型。
Job的一些属性配置
源代码管理可以与一些SVN等代码管理软件,直接管理
构建时候的命令,一般简单的命令可以使用批处理即可,当然也支持脚本语言。
建议每个命令集中,语句不要太多,或太过复杂。如果很复杂可以使用脚本语言,或写成批处理文件,进行调用。
构建后操作,可以完成之后发送邮件,生成文档,运行下一个构建项目等操作。比如创建一些可以分布进行的项目。
2. 开始构建
Job建立好之后,在界面上就,能够选择该项目了。点击该项目进入,项目操作界面。可以进行立即构建,构造中项目前面的圆点在闪烁。停止闪烁,构建完成。
3. 构建完成
构建完成后,如果前面的圆圈是蓝色,说明构建成功,如果是红色或黄色,说明构建失败或有问题。可以点击build History中,本次任务的链接,进行查看本次构建的详情。
4. 查看错误
在详情界面中,点击控制台输出,可以看见一些编译过程中的信息,可以在其中发现构建错误的原因。
转自:http://blog.csdn.net/qiming_zhang/article/details/8646233
标题搜索
我的存档
数据统计
- 访问量: 281769
- 日志数: 198
- 建立时间: 2008-08-25
- 更新时间: 2019-11-01