当前位置:首页 » 网页前端 » 操作系统基线检查脚本
扩展阅读
webinf下怎么引入js 2023-08-31 21:54:13
堡垒机怎么打开web 2023-08-31 21:54:11

操作系统基线检查脚本

发布时间: 2022-09-23 00:26:24

1. 请设计一个脚本checkmd5,sh,实现用于检测linux系统重要文件是否被修改的功能,该脚

从Linux操作系统出现开始,使用Linux替代Windows的观点和期待就一直存在。经过多年的发展,Linux取得了长足的进步,在桌面计算机领域的占有率也有了一定的提高。然而,当下的Linux操作系统是否已经在实用性上达到目标了呢

2. APP怎么检测脚本

APP检测主要从以下几个方面展开:
APP性能测试和监控:极限测试:在各种边界压力情况下(如:电池、存储、网速等),验证App是否能正确响应。响应能力测试:测试App中的各类操作是否满足用户响应时间要求压力测试:反复/长期操作下,系统资源是否占用异常;性能评估:评估典型用户应用场景下,系统资源的使用情况。Benchmark测试(基线测试):与竞争产品的Benchmarking,产品演变对比测试等。
至于如何写检测脚本,1.可以再Saas平台选择上百款真实机型,根据需要可进行调用哪一个云真机2.在SaaS平台的云端上传APP,方便统一管理;无需编写代码,开始录制脚本,并自动生成脚本步骤3.APP测试的脚本写的对不对,还是要回放看一看的

3. 如何编写自己的Linux安全检查脚本

脚本大致内容: 基本信息统计(IP地址、MAC地址、端口信息、服务信息等)、主机安全检查(包括等保三级要求主机相关的检查点)、系统性能统计(暂时未加入分析)、恶意代码、程序检查等检查点。

脚本内容涉及到:

1、查看系统密码文件修改时间

2、查看是否开启了ssh服务

3、查看系统SSH远程访问设置策略(host.deny拒绝列表)

4、查看shell是否设置超时锁定策略

5、查看syslog日志审计服务是否开启

6、查看syslog日志是否开启外发

7、查看passwd文件中有哪些特权用户

8、查看系统中是否存在空口令账户

9、PHP、JSP、perl、Python、HTML、以及linux下可执行文件内容的检查

里面列举了一些常见webshell、提权EXP、以及Python扫描工具、嗅探工具的特征,如果发现此类相关的文件,则会显示出来,或者拷贝一份到/tmp/目录下

例如:能扫描到的linux下提权工具:

一共是172个文件。都可以扫描的到。。。。

其实整个脚本相对起来比较简单,主要用到的命令为

find / -type

if语句

awk命令

more

egrep

等命令组成。

比如说awk命令,我们用more或cat命令,读取某个文件内容,然后通过awk进行筛选和输出,来显示我们想要看的东西

例如:
more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' ' '{if($2!=90){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员改成90天。"}}'

从这里我们可以看到,通过more来打开/etc/login.defs文件,并查找关键字 “PASS_MAX_DAYS”, 用awk命令,筛选以”为分隔符的内容,用作判断,如果$2第二个分隔符位置的内容不等于90,则输出该内容。

同理,任意针对文件内容做筛选的结果,都可以通过这样的方式去显示我们想要显示的内容。

又例如:
echo "查看系统中存在哪些非系统默认用户"
echo "root:x:“该值大于500为新创建用户,小于或等于500为系统初始用户”"
more /etc/passwd |awk -F ":" '{if($3>500){print "/etc/passwd里面的"$1 "的值为"$3",请管理员确认该账户是否正常。"}}'
echo ------------------------------------------------------------------------

if语句相关:
echo --------------------------------------------------------------------------
echo "检查系统文件完整性2(MD5检查)"
echo "该项会获取部分关键文件的MD5值并入库,默认保存在/etc/md5db中"
echo "如果第一次执行,则会提示md5sum: /sbin/portmap: 没有那个文件或目录"
echo "第二次重复检查时,则会对MD5DB中的MD5值进行匹配,来判断文件是否被更改过"
file="/etc/md5db"
if [ -e "$file" ]; then md5sum -c /etc/md5db 2>&1;
else
md5sum /etc/passwd >>/etc/md5db
md5sum /etc/shadow >>/etc/md5db
md5sum /etc/group >>/etc/md5db
md5sum /usr/bin/passwd >>/etc/md5db
md5sum /sbin/portmap>>/etc/md5db
md5sum /bin/login >>/etc/md5db
md5sum /bin/ls >>/etc/md5db
md5sum /bin/ps >>/etc/md5db
md5sum /usr/bin/top >>/etc/md5db;
fi
echo ----------------------------------------------------------------------

这里呢,对部分敏感文件的MD5值做了下验证,大致思路是,先检查 /etc/md5db 是否存在,如果不存在的话,则将所涉及文件的MD5值入库,并保存到 /etc/md5db文件中,当我们第二次对服务器进行检查时,则会对比两次的MD5值,如果MD5值发生变化,则会进行提醒。

脚本本身没什么复杂的东西,我先贴出部分内容,供大家参考下。
#!/bin/bash
echo " (__)"
echo " (oo)"
echo " /------\/ "
echo " / | || "
echo " * /\---/\ "
echo " ~~ ~~ "
echo "...."Are You Ready?"..."
read key
echo "警告:本脚本只是一个检查的操作,未对服务器做任何修改,管理员可以根据此报告进行相应的设置。"
echo ---------------------------------------主机安全检查-----------------------
echo "系统版本"
uname -a
echo --------------------------------------------------------------------------
echo "本机的ip地址是:"
ifconfig | grep --color "\([0-9]\{1,3\}\.\)\{3\}[0-9]\{1,3\}"
echo --------------------------------------------------------------------------
awk -F":" '{if($2!~/^!|^*/){print "("$1")" " 是一个未被锁定的账户,请管理员检查是否需要锁定它或者删除它。"}}' /etc/shadow
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_MAX_DAYS" | grep -v "#" |awk -F' ' '{if($2!=90){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员改成90天。"}}'
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_MIN_LEN" | grep -v "#" |awk -F' ' '{if($2!=6){print "/etc/login.defs里面的"$1 "设置的是"$2"个字符,请管理员改成6个字符。"}}'
echo --------------------------------------------------------------------------
more /etc/login.defs | grep -E "PASS_WARN_AGE" | grep -v "#" |awk -F' ' '{if($2!=10){print "/etc/login.defs里面的"$1 "设置的是"$2"天,请管理员将口令到期警告天数改成10天。"}}'
echo --------------------------------------------------------------------------
grep TMOUT /etc/profile /etc/bashrc > /dev/null|| echo "未设置登录超时限制,请设置之,设置方法:在/etc/profile或者/etc/bashrc里面添加TMOUT=600参数"
echo --------------------------------------------------------------------------
if ps -elf |grep xinet |grep -v "grep xinet";then
echo "xinetd 服务正在运行,请检查是否可以把xinnetd服务关闭"
else
echo "xinetd 服务未开启"
fi
echo --------------------------------------------------------------------------
echo "查看系统密码文件修改时间"
ls -ltr /etc/passwd
echo --------------------------------------------------------------------------
echo "查看是否开启了ssh服务"
if service sshd status | grep -E "listening on|active \(running\)"; then
echo "SSH服务已开启"
else
echo "SSH服务未开启"
fi
echo --------------------------------------------------------------------------
echo "查看是否开启了TELNET服务"
if more /etc/xinetd.d/telnetd 2>&1|grep -E "disable=no"; then
echo "TELNET服务已开启 "
else
echo "TELNET服务未开启 "
fi
echo --------------------------------------------------------------------------
echo "查看系统SSH远程访问设置策略(host.deny拒绝列表)"
if more /etc/hosts.deny | grep -E "sshd: ";more /etc/hosts.deny | grep -E "sshd"; then
echo "远程访问策略已设置 "
else
echo "远程访问策略未设置 "
fi
echo --------------------------------------------------------------------------

4. 怎么写一个判断操作系统类型,版本的脚本

这个就属于在 UNIX/Linux 系统下面熟练使用 SHELL 编程技术的问题了。首先你必须要确定你到底想使用哪一种 SHELL 语言来进行 SHELL 脚本编程?因为 UNIX/Linux 系统里面安装有多个版本的 SHELL。至少安装有:bash、C-Shell,因为不同的 SHELL 语言,它们在进行SHELL 编程时,哪怕是一个最简单的 if else 判断语句、while 循环语句等,它们的语句末尾是否含有分号,等等细节问题都是不一样的。这一点尤其要特别注意,因为即使编程思路再清楚,如果这些细节问题不是真正搞清楚了,那么这个 SHELL 脚本编程照样调试不通过。
如果在以上的技术细节上、以及 SHELL 编程的语法细节上,都搞得非常清楚了,那么再来编写判断操作系统的类型、以及操作系统的版本的脚本程序就不是问题了,无非就是利用各种UNIX/Linux提供的各种命令进行组合、编写脚本程序了。
由于我已经很久很久没有编写过 SHELL 程序了,不过你记住一条就是:SHELL 编程的功能是极其强大的!例如:在SHELL编程过程中,可能会用到 awk、grep、$ 符号、以及管道操作 pipe 等命令,对你需要的最终信息进行筛选。

5. LoadRunner学习知多少

一. 什么是LoadRunner
LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟多个用户实施并发负载测试及实时性能检测的方式来确认和查找问题,能对整个企业架构进行测试。
二. LoadRunner的优点
1. 轻松创建虚拟用户:通过记录下业务流程转为测试脚本,在机器上产生多个用户访问,减少负载测试需要的硬件和人力资源。
2. 创建真实的负载:可以通过Controller设定负载方案,如定义用户在什么时候访问系统以产生负载,所有用户同时执行一个动作来模拟峰值负载情况等。
3. 实时监测器:可以实时显示交易性能数据(如响应时间)和其他系统组件如数据库,网络等的实时性能。
4. 分析结果以精确定位问题所在:LoadRunner能收集汇总所有测试数据,提供高级的分析和报告工具。
三. LoadRunner的安装与使用
1.安装过程详见上传的LoadRunner使用手册,在此不再详细介绍。
2.具体使用:

点击File新建录制文件,也可以点击下面的NEW快捷键进行新建。使用File新建,会弹出协议选择窗口,选择新的单协议脚本(New SingleProtocol Script)的Web(HTTP/HTML)项,确定即可(选择Web项是因为我们测试的是Web应用)。接着会弹出开始录制的设置项,需要写入录入系统的地址,点击确定后就会根据录入地址展现系统页面,开始录制脚本,出现小工具条:

第一个按钮为录制键
第二个为回放脚本键
第三个为停止录制键
第四个为暂停录制键
第五个为编译脚本键
第六个为创建新的Action键。LR的录制脚本分为三个部分,vuser_init、vuser_end和 Action。脚本循环执行时,只执行一次vuser_init和vuser_end,而多次循环Action部分。比如录制投保业务时,登陆系统部分放入vuser_init,退出登陆放到vuser_end,中间的投保操作放到Action中,则循环执行时就会登陆一次投保系统开始反复执行投保操作直到结束退出系统。
第七个为用来改变录制的options设置按钮
第八个和第九个为插入事务的起始点和结束点键,结合起来构成一个完整事物,用来衡量服务器的性能。比如录制脚本过程中,投保系统的查询投保单号操作,可以在输入完查询信息后点击查询按钮前插入事务的起始点,查询出数据后插入事务的结束点,这样在运行测试脚本时,Loadrunner在运行到该事务时,便会计算出这个查询操作所花时间,便于衡量服务器执行查询操作的性能。
第十个为插入集合点键,可用于衡量在加重负载的情况下服务器的性能。比如要验证系统是否能承受100人同时进行报案操作,便可在脚本录入过程中,点击报案确认键操作前插入集合点,这样当脚本运行到集合点时,Loadrunner会让100个虚拟用户同时点击报案确认按钮(如果有的用户还没运行到集合点,先到用户要等未到用户一起操作)进行报案,从而达到测试目的。
最后一个为设置验证点键,在创建事物后,设置一个验证点可以用来确认事物执行是否成功。比如进行查询事务操作时,LR只要检测到网页的响应,就认为事务pass,而不管显示页面内容是否正确。因此为了检查Web服务器返回的网页是否正确,可以插入Text/Image检查点,验证网页上是否存在指定的Text或Image。
设置验证点时,如果我们验证的文本内容是中文,有时会返回无法找到验证内容的报错信息,而页面显示又是正确的,出现问题的原因可能是因为LR对中文的支持部好,尽量选择验证信息为数字或字母;也可能是设置问题,可以尝试将Tools->Recording Options->HTTP Properties下的Advanced选项里设置支持UTF-8,再检查开发人员有没有设置支持中文。
录制结束后,先点击保存脚本,同时为脚本命名。然后编译脚本,看是否存在语法错误,编译成功后,即可回放,看录制脚本是否成功。
LoadRunner录制得到的脚本基本没有错误,不像robot会有录入数据的缺失,只是会录入一些非录入系统的网页信息,根据地址可以识别并删除掉。
四. LoadRunner脚本录制学习小结
1. LoadRunner录制脚本,主要是为了进行压力测试,所以跑流程时,跑了主要流程即可,也就是系统必须的信息录入就可以了。
2. LoadRunner的脚本运行过程中,只能用于一次业务办理的数据需要做参数化,如车辆车架号,车牌,报案号等,以免出现重复投保或报案无法立案现象,不能继续进行下去。参数化步骤:
1) 将需要做参数化的数据右键点击,选择Replace with a parameter,进行设置。
2) 在弹出编辑框里,设置易懂的参数名称,再点击Properties进行属性设置。
3) 点击Create Table 按钮,生成参数表格,再点击Edit with Notepad按钮,即可在记事本里添加新的参数,添加完后再次回车(不回车可能最后条数据读取不到)关闭,参数化操作完成。
4) 使用Ctrl +H键可以找到替换同样的需要参数化的数据。
3. 脚本跑流程过程中,因为业务运转,前面生成的投保单要接着进行提交核保业务,而每次生成的投保单号不一样,用于进行提交核保的单号也要与之前的保持一致,因此需要做关联处理,读取到生成的新投保单号给提交核保流程。关联步骤:
1) .查找关联数据第一次出现的位置,判断该数据是由什么函数返回的。
2) .在树形结构里点击返回该数据值的函数,看它的Server Response信息,用复制的关联数据进行查找它的返回语句,找到区分度明显的语句(不一定要是第一个返回语句),然后使用web_reg_save_param函数进行关联。
注:关联函数一定要写在第一个返回该数据值的函数前。
3) .web_reg_save_param (const char *ParamName, <List ofAttributes>, LAST);
函数的第一个参数是用来对关联数据进行定义的,取名最好可读性强;第二个参数是用来标识关联数据在返回语句里的具体位置的,写出该数据的左右边界,程序才能识别;LAST表示属性列的结束。比如办理理赔业务的流程号,在服务器的返回语句里是:
<input name=flowID type="hidden" value=L05012009110000035215>
做关联为:
web_reg_save_param("LogFlowID",
"LB=name=flowIDtype=\"hidden\" value=",
"RB=>",
LAST);
定义的参数名就叫LogFlowID,表示流程号,易于明白;左边界从name取就可以标识了,也可取长点或短点,只要能区分;右边界只有>,写上就好;最后写上LAST。
在定义的左右边界中,如果有双引号,在脚本中是需要转义的,因为双引号在C中是有意义的,这里只要表示语句信息,加上右斜杠。尖括号直写。
左右边界也需要用双引号括起来。定义好的参数写在程序中,需要在加上单尖括号:swfLogFlowID={LogFlowID}
五. 脚本执行过程中的报错处理
1. vuser_init.c(3051):Error -26377: No match found for the requested parameter"proposalNo". Check whether the requested boundaries exist in theresponse data. Also, if the data you want to save exceeds 256 bytes, useweb_set_max_html_param_len to increase the parameter size [MsgId: MERR-26377]
2. vuser_init.c(3051):web_submit_data("UIPrPoEnInputNext.jsp") highest severity level was"ERROR", 4312 body bytes, 258 header bytes [MsgId: MMSG-26388]
两个错误一起出现,出错语句都是在关联函数下的提交数据函数位置,但是具体出错有可能是:
1). 关联函数左右边界没写对,所有信息都要用字符输入,不能是中文或其他。
2). 在关联函数确认写对的情况下,看提交数据函数中的业务设置,比如有可能是因为保单查询语句,设置的查询时间是过去的时间,新生成的投保单当然查不到,这样程序也会报这样的错。
3. loadrunner 执行理赔的立案处理,录制好脚本后,回放,报错:

脚本日志信息提示:
1.Action.c(400):Error -26366: "Text=立案信息提交成功" not found for web_reg_find [MsgId: MERR-26366]
2.Action.c(400):web_submit_data("claimSave.do") highest severity level was"ERROR", 4424 body bytes, 258 header bytes [MsgId: MMSG-26388]
脚本执行过程停止在立案信息提交页面,错误原因:数据问题,可能是有的应该变化的信息没有变。
在该流程中,一个报案号只能做一次立案,而初始脚本没有设置参数、关联,使用保单号进行查询,错误被掩盖。在立案系统中,一个保单号可以重复报案,但是一个报案号只能一次立案,要跑通流程,需要先将这一保单再重复报案,得到新的报案号。
六. 性能测试的场景设置
脚本录制完毕后,接着准备测试场景。
1.首先准备测试数据。比如车险投保,需要投保人和车架号信息来唯一标识一辆被保车,因此就需要将投保人和车架号做参数化处理,编辑文本框录入大量数据让脚本唯一读取:
1). 录入投保人参数,车架号参数,过程同脚本录制的参数化处理
2). 因为投保人和车架号一起生成一条投保数据,可设置车架号随投保人参数一起读取,设置步骤为:
投保人文件存放路径--File path

投保人参数数据读取方式

脚本按列名读取参数,每行数据读取一次,每次循环取一次新值。
接着设置车架号参数信息:
车架号参数读取文件路径设为和投保人文件路径一样

脚本按列名读取参数,行号选择和读取的投保人数据同一行

这样得到所需的投保单生成参数数据

2.设置测试场景
点击Tools->Create Controller Scenarios,弹出场景类型选择框:

录入需要的虚拟用户数,选择生成结果存放路径和组名。确定后进入具体设置页面:

Quantity表示虚拟用户个数,group name为组名。
1). 设置运行时间选项Run – time Settings

选择循环次数Run Logic->Iteration Count,设置循环10次,虚拟用户数为之前设置的5人,则预计一共可生成50张投保单。

设置思考时间,思考时间通常是录制脚本过程中,填写页面信息花费的时间,选择忽略项,节省跑脚本的时间。

设置网络连接时间,点击网络协议项Internet Protocol 的Options键,将弹出页面里的HTTP-request connect timeout和 HTTP-request receive timeout的数值改为1000。使得能在网络状况不太好的情况下向服务器发送接收数据。

2). 设置EditSchele
选择虚拟用户加载方式:

可以一次加载所有用户,也可以按需要设置,一秒加载一个用户或其他。
选择结束方式:

当选择一秒加载一个用户时,结束设置为直到跑完所有脚本停止执行。如果选择选择一次加载所有用户可以选择运行多少时间后停止和不停止选项。
这些设置完成后,一次测试场景布置完成。可以进行基线检查或单点并发测试。
七. 性能测试步骤
一). 除测试工具外性能测试必备的系统及业务知识
1、熟悉保险行业业务特点,有助于与开发和客户讨论需求,制定测试用例;
2、熟悉系统的实现特点,开发实现方式,有助于选择程序处理复杂、消耗系统资源的用例点;
3、熟悉数据结构,了解数据存储规则,对脚本调试、数据准备、测试执行和监视都有帮助;
4、熟悉系统所使用的数据库、操作系统、中间件的监视和性能问题查看,有助于测试监视和发现问题;
5、熟悉系统架构及系统集成方式,有助于分析及明确定位性能问题。
二) 性能测试执行过程
1. 基线检查
1).目的:验证环境是否可用;
验证脚本是否能在场景正常执行。
2).方法:1个人单独循环5次--没有其他人干扰,干净的环境
3).结果:一般一个事物的响应时间超过3秒就可能存在问题,要提报开发人
2. 单点并发
1).目的:为了快速的发现问题,如多进程的锁机制,看是否相互间有影响。
2).方法:一般是10人或20人执行10到15分钟,执行过程忽略思考时间。
忽略思考时间可以减少客户端时间,加快向服务器传送数据速度,很大程度上增大了服务器的压力,20个人单点并发的压力就相当于200人正常执行带给服务器的压力。
3).单点测试的数据可以用来进行混发测试,但是有可能单点测试的数据不足以进行混发,需要自己再准备足够的数据。
3.方案测试--混发测试
1).目的:模拟生产环境
2).方法:执行1小时左右,加上思考时间
八.资源监控及调优
性能测试执行过程中,需要监控系统各项资源,看是否能满足用户实际需要,如内存使用,SQL SERVER等,结合LR生成的分析报告,分析系统哪里可能存在问题,需要改进,进行调优,这也是我之后要接着进行学习的地方。
1. 学习使用weblogic,了解weblogic常配参数的意义。通过weblogic自身的监控台,可以了解到目前的JVM的大小、数据库连接池的使用情况以及目前连接的客户端数量以及请求状况等等。
2. 学习oracle使用,熟悉它的体系结构,尤其是oracle10里 的awr,awr能采集与统计数据,并从那些统计数据中导出性能量度,以跟踪潜在的问题。
3. 需要继续学习LR的理论知识和实际操作,参考书籍《Web性能测试实战》、《软件性能测试过程详解与案例剖析》

6. moa+for+windows里面的安全基线检查

摘要 Microsoft 基准安全分析器 (MBSA) 可以检查操作系统和 SQL Server 更新。MBSA 还可以扫描计算机上的不安全配置。检查 Windows 服务包和修补程序时,它将 Windows 组件(如 Internet 信息服务 (IIS) 和 COM+)也包括在内。MBSA 使用一个 XML 文件...

7. LoadRunner学习知多少

一. 什么是LoadRunner
LoadRunner是一种预测系统行为和性能的工业标准级负载测试工具。通过以模拟多个用户实施并发负载测试及实时性能检测的方式来确认和查找问题,能对整个企业架构进行测试。
二. LoadRunner的优点
1. 轻松创建虚拟用户:通过记录下业务流程转为测试脚本,在机器上产生多个用户访问,减少负载测试需要的硬件和人力资源。
2. 创建真实的负载:可以通过Controller设定负载方案,如定义用户在什么时候访问系统以产生负载,所有用户同时执行一个动作来模拟峰值负载情况等。
3. 实时监测器:可以实时显示交易性能数据(如响应时间)和其他系统组件如数据库,网络等的实时性能。
4. 分析结果以精确定位问题所在:LoadRunner能收集汇总所有测试数据,提供高级的分析和报告工具。
三. LoadRunner的安装与使用
1.安装过程详见上传的LoadRunner使用手册,在此不再详细介绍。
2.具体使用:

点击File新建录制文件,也可以点击下面的NEW快捷键进行新建。使用File新建,会弹出协议选择窗口,选择新的单协议脚本(New SingleProtocol Script)的Web(HTTP/HTML)项,确定即可(选择Web项是因为我们测试的是Web应用)。接着会弹出开始录制的设置项,需要写入录入系统的地址,点击确定后就会根据录入地址展现系统页面,开始录制脚本,出现小工具条:

第一个按钮为录制键
第二个为回放脚本键
第三个为停止录制键
第四个为暂停录制键
第五个为编译脚本键
第六个为创建新的Action键。LR的录制脚本分为三个部分,vuser_init、vuser_end和 Action。脚本循环执行时,只执行一次vuser_init和vuser_end,而多次循环Action部分。比如录制投保业务时,登陆系统部分放入vuser_init,退出登陆放到vuser_end,中间的投保操作放到Action中,则循环执行时就会登陆一次投保系统开始反复执行投保操作直到结束退出系统。
第七个为用来改变录制的options设置按钮
第八个和第九个为插入事务的起始点和结束点键,结合起来构成一个完整事物,用来衡量服务器的性能。比如录制脚本过程中,投保系统的查询投保单号操作,可以在输入完查询信息后点击查询按钮前插入事务的起始点,查询出数据后插入事务的结束点,这样在运行测试脚本时,Loadrunner在运行到该事务时,便会计算出这个查询操作所花时间,便于衡量服务器执行查询操作的性能。
第十个为插入集合点键,可用于衡量在加重负载的情况下服务器的性能。比如要验证系统是否能承受100人同时进行报案操作,便可在脚本录入过程中,点击报案确认键操作前插入集合点,这样当脚本运行到集合点时,Loadrunner会让100个虚拟用户同时点击报案确认按钮(如果有的用户还没运行到集合点,先到用户要等未到用户一起操作)进行报案,从而达到测试目的。
最后一个为设置验证点键,在创建事物后,设置一个验证点可以用来确认事物执行是否成功。比如进行查询事务操作时,LR只要检测到网页的响应,就认为事务pass,而不管显示页面内容是否正确。因此为了检查Web服务器返回的网页是否正确,可以插入Text/Image检查点,验证网页上是否存在指定的Text或Image。
设置验证点时,如果我们验证的文本内容是中文,有时会返回无法找到验证内容的报错信息,而页面显示又是正确的,出现问题的原因可能是因为LR对中文的支持部好,尽量选择验证信息为数字或字母;也可能是设置问题,可以尝试将Tools->Recording Options->HTTP Properties下的Advanced选项里设置支持UTF-8,再检查开发人员有没有设置支持中文。
录制结束后,先点击保存脚本,同时为脚本命名。然后编译脚本,看是否存在语法错误,编译成功后,即可回放,看录制脚本是否成功。
LoadRunner录制得到的脚本基本没有错误,不像robot会有录入数据的缺失,只是会录入一些非录入系统的网页信息,根据地址可以识别并删除掉。
四. LoadRunner脚本录制学习小结
1. LoadRunner录制脚本,主要是为了进行压力测试,所以跑流程时,跑了主要流程即可,也就是系统必须的信息录入就可以了。
2. LoadRunner的脚本运行过程中,只能用于一次业务办理的数据需要做参数化,如车辆车架号,车牌,报案号等,以免出现重复投保或报案无法立案现象,不能继续进行下去。参数化步骤:
1) 将需要做参数化的数据右键点击,选择Replace with a parameter,进行设置。
2) 在弹出编辑框里,设置易懂的参数名称,再点击Properties进行属性设置。
3) 点击Create Table 按钮,生成参数表格,再点击Edit with Notepad按钮,即可在记事本里添加新的参数,添加完后再次回车(不回车可能最后条数据读取不到)关闭,参数化操作完成。
4) 使用Ctrl +H键可以找到替换同样的需要参数化的数据。
3. 脚本跑流程过程中,因为业务运转,前面生成的投保单要接着进行提交核保业务,而每次生成的投保单号不一样,用于进行提交核保的单号也要与之前的保持一致,因此需要做关联处理,读取到生成的新投保单号给提交核保流程。关联步骤:
1) .查找关联数据第一次出现的位置,判断该数据是由什么函数返回的。
2) .在树形结构里点击返回该数据值的函数,看它的Server Response信息,用复制的关联数据进行查找它的返回语句,找到区分度明显的语句(不一定要是第一个返回语句),然后使用web_reg_save_param函数进行关联。
注:关联函数一定要写在第一个返回该数据值的函数前。
3) .web_reg_save_param (const char *ParamName, <List ofAttributes>, LAST);
函数的第一个参数是用来对关联数据进行定义的,取名最好可读性强;第二个参数是用来标识关联数据在返回语句里的具体位置的,写出该数据的左右边界,程序才能识别;LAST表示属性列的结束。比如办理理赔业务的流程号,在服务器的返回语句里是:
<input name=flowID type="hidden" value=L05012009110000035215>
做关联为:
web_reg_save_param("LogFlowID",
"LB=name=flowIDtype=\"hidden\" value=",
"RB=>",
LAST);
定义的参数名就叫LogFlowID,表示流程号,易于明白;左边界从name取就可以标识了,也可取长点或短点,只要能区分;右边界只有>,写上就好;最后写上LAST。
在定义的左右边界中,如果有双引号,在脚本中是需要转义的,因为双引号在C中是有意义的,这里只要表示语句信息,加上右斜杠。尖括号直写。
左右边界也需要用双引号括起来。定义好的参数写在程序中,需要在加上单尖括号:swfLogFlowID={LogFlowID}
五. 脚本执行过程中的报错处理
1. vuser_init.c(3051):Error -26377: No match found for the requested parameter"proposalNo". Check whether the requested boundaries exist in theresponse data. Also, if the data you want to save exceeds 256 bytes, useweb_set_max_html_param_len to increase the parameter size [MsgId: MERR-26377]
2. vuser_init.c(3051):web_submit_data("UIPrPoEnInputNext.jsp") highest severity level was"ERROR", 4312 body bytes, 258 header bytes [MsgId: MMSG-26388]
两个错误一起出现,出错语句都是在关联函数下的提交数据函数位置,但是具体出错有可能是:
1). 关联函数左右边界没写对,所有信息都要用字符输入,不能是中文或其他。
2). 在关联函数确认写对的情况下,看提交数据函数中的业务设置,比如有可能是因为保单查询语句,设置的查询时间是过去的时间,新生成的投保单当然查不到,这样程序也会报这样的错。
3. loadrunner 执行理赔的立案处理,录制好脚本后,回放,报错:

脚本日志信息提示:
1.Action.c(400):Error -26366: "Text=立案信息提交成功" not found for web_reg_find [MsgId: MERR-26366]
2.Action.c(400):web_submit_data("claimSave.do") highest severity level was"ERROR", 4424 body bytes, 258 header bytes [MsgId: MMSG-26388]
脚本执行过程停止在立案信息提交页面,错误原因:数据问题,可能是有的应该变化的信息没有变。
在该流程中,一个报案号只能做一次立案,而初始脚本没有设置参数、关联,使用保单号进行查询,错误被掩盖。在立案系统中,一个保单号可以重复报案,但是一个报案号只能一次立案,要跑通流程,需要先将这一保单再重复报案,得到新的报案号。
六. 性能测试的场景设置
脚本录制完毕后,接着准备测试场景。
1.首先准备测试数据。比如车险投保,需要投保人和车架号信息来唯一标识一辆被保车,因此就需要将投保人和车架号做参数化处理,编辑文本框录入大量数据让脚本唯一读取:
1). 录入投保人参数,车架号参数,过程同脚本录制的参数化处理
2). 因为投保人和车架号一起生成一条投保数据,可设置车架号随投保人参数一起读取,设置步骤为:
投保人文件存放路径--File path

投保人参数数据读取方式

脚本按列名读取参数,每行数据读取一次,每次循环取一次新值。
接着设置车架号参数信息:
车架号参数读取文件路径设为和投保人文件路径一样

脚本按列名读取参数,行号选择和读取的投保人数据同一行

这样得到所需的投保单生成参数数据

2.设置测试场景
点击Tools->Create Controller Scenarios,弹出场景类型选择框:

录入需要的虚拟用户数,选择生成结果存放路径和组名。确定后进入具体设置页面:

Quantity表示虚拟用户个数,group name为组名。
1). 设置运行时间选项Run – time Settings

选择循环次数Run Logic->Iteration Count,设置循环10次,虚拟用户数为之前设置的5人,则预计一共可生成50张投保单。

设置思考时间,思考时间通常是录制脚本过程中,填写页面信息花费的时间,选择忽略项,节省跑脚本的时间。

设置网络连接时间,点击网络协议项Internet Protocol 的Options键,将弹出页面里的HTTP-request connect timeout和 HTTP-request receive timeout的数值改为1000。使得能在网络状况不太好的情况下向服务器发送接收数据。

2). 设置EditSchele
选择虚拟用户加载方式:

可以一次加载所有用户,也可以按需要设置,一秒加载一个用户或其他。
选择结束方式:

当选择一秒加载一个用户时,结束设置为直到跑完所有脚本停止执行。如果选择选择一次加载所有用户可以选择运行多少时间后停止和不停止选项。
这些设置完成后,一次测试场景布置完成。可以进行基线检查或单点并发测试。
七. 性能测试步骤
一). 除测试工具外性能测试必备的系统及业务知识
1、熟悉保险行业业务特点,有助于与开发和客户讨论需求,制定测试用例;
2、熟悉系统的实现特点,开发实现方式,有助于选择程序处理复杂、消耗系统资源的用例点;
3、熟悉数据结构,了解数据存储规则,对脚本调试、数据准备、测试执行和监视都有帮助;
4、熟悉系统所使用的数据库、操作系统、中间件的监视和性能问题查看,有助于测试监视和发现问题;
5、熟悉系统架构及系统集成方式,有助于分析及明确定位性能问题。
二) 性能测试执行过程
1. 基线检查
1).目的:验证环境是否可用;
验证脚本是否能在场景正常执行。
2).方法:1个人单独循环5次--没有其他人干扰,干净的环境
3).结果:一般一个事物的响应时间超过3秒就可能存在问题,要提报开发人
2. 单点并发
1).目的:为了快速的发现问题,如多进程的锁机制,看是否相互间有影响。
2).方法:一般是10人或20人执行10到15分钟,执行过程忽略思考时间。
忽略思考时间可以减少客户端时间,加快向服务器传送数据速度,很大程度上增大了服务器的压力,20个人单点并发的压力就相当于200人正常执行带给服务器的压力。
3).单点测试的数据可以用来进行混发测试,但是有可能单点测试的数据不足以进行混发,需要自己再准备足够的数据。
3.方案测试--混发测试
1).目的:模拟生产环境
2).方法:执行1小时左右,加上思考时间
八.资源监控及调优
性能测试执行过程中,需要监控系统各项资源,看是否能满足用户实际需要,如内存使用,SQL SERVER等,结合LR生成的分析报告,分析系统哪里可能存在问题,需要改进,进行调优,这也是我之后要接着进行学习的地方。
1. 学习使用weblogic,了解weblogic常配参数的意义。通过weblogic自身的监控台,可以了解到目前的JVM的大小、数据库连接池的使用情况以及目前连接的客户端数量以及请求状况等等。
2. 学习oracle使用,熟悉它的体系结构,尤其是oracle10里 的awr,awr能采集与统计数据,并从那些统计数据中导出性能量度,以跟踪潜在的问题。
3. 需要继续学习LR的理论知识和实际操作,参考书籍《Web性能测试实战》、《软件性能测试过程详解与案例剖析》

8. 如何通过linux shell脚本来检查文件系统类型

方法/步骤

1
如何知道当前的shell,参看下面的图片中的命令。

2
这是bash源文件resource的内容和存放路径

3
命令ls中使用大F列出哪些是目录哪些是文件

4
这里的backslash符号,也就是反斜杠符号是换行续写的意思

5
这里使用backslash符号连续输出2个目录下的内容

分号分隔符号;的意思是,执行完成第一个命令然后才开始执行第二个命令。

可以在输入命令行时,按下tab键执行命令行自动补齐

这里介绍emacs编辑器,也就是在命令行中输入命令时使用的编辑器

在命令行编辑时光标cursor的back和forward

按下control加小写的L将清除屏幕,并把当前行移动到屏幕的top位置

全局command编辑器配置

inputrc文件的内容

制定用户的command行编辑工具

用命令bind的v选项看keyboard的bindings类型

这个是substitution命令,先执行,然后将输出传递给前面一个command,这里不是单引号,是~键上的符号

9. 有没有PC服务器Windows操作系统巡检脚本

服务器系统和一般电脑系统的区别: 1、性能的稳定性,服务器版本的要比普通版本要高得多; 2、在文件管理或网络应用上,服务器版本能更好的发挥功效; 3、在图形及娱乐上来说,普通的系统要比服务器有着更好的功效