-
如何通过设计挖掘测试用例
2009-02-19 21:35:45
根据目前做的测试项目想总结一些如何对非业务行的项目做测试分析的方法,前几天在对公司培训是也提到了如何根据设计去挖掘测试用例,针对那些非业务行的项目是很有必要去思考和研究的,那么什么是非业务行系统呢? 其实也不准确,是否应该叫非支持商业业务的系统,其实就是区分那些针对银行,保险,证券,电信等这些和行业邦定非常严的业务系统,他们应该是提供给业务支持的封装了底层的操作,有点类似中间件和平台支持系统。举个例子分布式文件系统,它是在技术实现上提供给其他应用系统的一个技术支持系统。 那么这一类,如果让开发人员去写需求说明书,大概就是一个简单的几句话,或有的开发人员也会说我们这个系统没有需求后需求很简单。没有错从业务功能上来说没有什么更多的描述,但是它从架构和设计的角度来说可能就会有很多的东东了。
因此我们在这里要介绍如何对这一类的系统来挖掘测试点或组织测试用例,那就是我前面提到的如何从设计类挖掘测试用例(也就是发现测试点): 首先我们必须清楚这个设计框架,该系统似乎如何架构的,如何应用在其他系统中的,对外提供一个什么接口。 架构如何分层,每层如何技术实现的, 学习架构的过程是对整个系统的设计了解过程打基础。 学习框架的方式应该是自学和开发培训相结合,学习的过程就是要理解如何此的架构有什么好处,可以解决什么样的问题。
第二步就是去分析设计,要找出并区主要模块,扩展模块,底层模块,第三方模块。 然后再找出模块间调用和依赖关系。最后分析具体模块功能实现所用的技术。 抽象的描述就是找出点和线。 线就是子模块或子系统间如何通信如何相互管理,相互调用的,点就是模块自己功能,或是如何数据处理,如何在和其他模块通信后获取数据或信息后如何进行处理。 线和点都有可能是性能平静。看如何分析它了。
举个类例子,一个分布式文件系统,它提供了三类模块,对外的客户端模块提供给第三方调用, 数据服务模块提供磁盘存储数据和管理数据块服务,主业务模块他提供了所有文件信息的管理,负责分解数据块和管理数据块存放位置的算法。 笼统的说我们找到了三个点,如何去找线呢,可以猜到,这三个模块之间一定是相互通信。 去三模块里去找吧,一定会有关联的功能函数或关联类。
找出点和线了,剩下就是要分析线的逻辑,点的逻辑 最好能画出了时序图出来,更能帮助找测试点。 直到现在我们总结一下,其实就是在解剖设计,找出关键器官和联系的几条大血管或神经。 从功能测试角度来说,这样的分析我们已经可以达到了覆盖其所有实现功能逻辑的目的。 那么如何去分析它可能的性能测试点呢? 那么又要回到比较宏观的点和线了,那个点处理的数据最多,那根线运送的东西最多。 这就是我们要关心的平静。 点线结合就可找出一些性能测的场景了。
上面就是根据目前做的项目得来一点点总结。记录下来,欢迎深入探讨。 对了还有就是测试这类项目,我们要明确不是测试他的代码,这些类项目的开发多事有多年经验的,所以如果你把精力放在找他的代码上的错误,比较浪费时间,不是不测试代码,把这类代码检测交给工具把。 我们要做的是什么呢,是测试他是用的某一类技术,比如内存共享,socket编程,多线程实现,使用的HA技术是否正确,这类技术可能的常见问题,是否实现了功能需要等等。
-
使用STAF设计一个松耦合的性能测试框架
2009-02-18 12:36:30
一直在做一些基于unix or Liunx 的项目的测试, 也接触了很多这类项目的性能测试,测试方法基本都是开发人员写一个多进程的程序来模拟用户并发,然后在用一些开关的监控工具来做指标采集。
我们分析一下loadrunner 的几个组件,看看我们自己用开源的工具,能够实现类似的性能测试工具吗? control ,monitor, scrip general , load 生成器, analyze . 他实现分布执行还有一个agent的一个东西。 那我们看一下,我们如果通过开源的东西来实现各个部件。
monitor -nmon ibm的一个很好的监控工具,可惜没有源码,所以只能封装成命令行的调用方法。 最好也分装成服务的方式。这样比较好部署
load 生成器 和分步执行:这部分可借助STAF实现agent 这个功能,load 生成器, 这个就需要在STAF的API上自己开发一个服务了,通过STAFTHREAD.h 来实现一个多线程服务(包括执行,收集线程状态等)。注册并分发到各个STAF server。
script. general :这部分是需要好好考虑的了,通过配置,又一个组件扫描要调用的接口,变成线程的事务句柄。
control :这个设计比较简单了,通过实现STAF的接口可以与多个STAF服务进行通信,发送执行指令给负载生成服务,并从负载生成服务那里获取线程状态。通过服务调用各个机器上的STAF来执行nmon,并传回数据文件
analyz: 这个比较麻烦了,我们要好好解读一下nmon analyze 代码了,好像是用vbscrip 写的。 如果能实现调用这部分代码,性能指标的图形就很容易实现了, 其次如何整合所有返回的数据,需要一定的代码支持了。
一些想法,不知道是否真的能实现? 待和各位谈讨其可行性!
-
再分享些有用的脚本开发资料。
2009-02-17 23:47:05
提供些脚本开发资料, 不要太过注重代码实现,要知道每个方法解决什么问题就好了,代码其实很简单。 好的测试工程师应该立足于设计与技术方案,俯视代码实现。 鄙视那些拿代码说事的人。
-
再发一个06写的一个loadrunner培训资料
2009-02-17 23:30:21
再分享一个loadrunner 培训PPT,看过这PPT的人应该知道我是谁了。哈哈 小样带个面具出来混了!
-
早些时候搞的一套性能测试过程规范和模版
2009-02-17 23:02:41
分享一些早些时间给一个网站性能测试部门建立的一套流程和模版分享一下。有些东西现在需要修改了,自己懒惰,你们看着改吧,试用就好。 -
安全测试工具汇总(一)
2009-02-15 01:33:07
File Integrity Checkers
Tool
Capabilities
Website
Linux/
Unix
Win32
Cost
Aide
Unix and Linux
http://www.cs.tut.fi/~rammer/aide.html
Free
Description
AIDE (Advanced Intrusion Detection Environment) is a free replacement for Tripwire. It does file integrity checking and supports a number a large number of Unix and Linux platforms.
LANGuard
Windows 2000/NT
http://www.gfi.com/languard/
Free
Description
LANguard File Integrity Checker is a utility that provides intrusion detection by checking whether files have been changed, added or deleted on a Windows 2000/NT system.
Tripwire
Windows, Unix, Linux, and Routers
http://www.tripwiresecurity.com/
Free for Unix
Description
Tripwire monitors file changes, verifies integrity, and notifies the administrator of
Network Sniffers
Tool
Capabilities
Website
Linux/
Unix
Win32
Cost
Dsniff
Unix sniffer
http://www.monkey.org/~dugsong/dsniff/
Free
Description
Dsniff is a collection of tools for network auditing and penetration testing. Dsniff, filesnarf, mailsnarf, msgsnarf, urlsnarf, and webspy passively monitor a network for interesting data (passwords, e-mail, files, etc.). Arpspoof, dnsspoof, and macof facilitate the interception of network traffic normally unavailable to an attacker (e.g, due to layer-2 switching). Sshmitm and webmitm implement active monkey-in-the-middle attacks against redirected SSH and HTTPS sessions by exploiting weak bindings in ad-hoc PKIs.
Ethereal
Unix/Windows sniffer with GUI
http://www.ethereal.com/
Free
Description
Ethereal is a free network protocol analyzer for Unix and Windows. It allows users to examine data from a live network or from a capture file on disk. It can interactively browse the capture data, viewing summary and detail information for each packet. Ethereal has several powerful features, including a rich display filter language and the ability to view the reconstructed stream of a TCP session and parse an 802.11 packet.
Sniffit
Unix sniffer
http://reptile.rug.ac.be/~coder/sniffit/sniffit.html
http://www.symbolic.it/Prodotti/sniffit.html (Windows)
Free
Description
A freeware general-purpose sniffer for various versions of Linux, Unix, and Windows.
Snort
Unix sniffer/IDS
http://www.snort.org
Free
Description
A freeware lightweight IDS and general-purpose sniffer for various versions of Linux, Unix and Windows.
TCPDump
Unix sniffer
http://www-nrg.ee.lbl.gov/
Free
Description
A freeware general-purpose sniffer for various versions of Linux and Unix.
WinDump
Windows sniffer
http://netgroup-serv.polito.it/windump/
Free
Description
A freeware Windows general-purpose sniffer based on TCPDump.
-
安全测试介绍
2009-02-15 01:31:30
软件安全在当今互联网应用普及的今天,软件的安全性是越来越被重视。如何保证软件应用的安全性,在软件测试过程中的安全性测试就尤为显得重要了。那么什么是软件安全呢?软件安全总是与被保护的信息和服务、攻击者的技术和资源、潜在的保证安全方法的开销有关系。 安全是风险管理的一个锻炼,风险分析,尤其是在设计层面的风险分析可以帮助我们只别潜在的安全问题和他们的影响。 通过识别和锁定软件风险,可以帮助和指导软件安全测试。 软件可能被攻击的弱点都存在哪里呢?软件安全的弱点是有很多种类型,安全弱点在软件系统中分布在从软件的本地实现错误,至交互过程接口错误,到更高层的设计层面错误。软件弱点大致分布在两个范畴——在实现层的bug和设计层面的缺点。
风险管理和安全测试: 软件安全工人员执行很多不同的任务去管理软件安全风险,包括:
创建安全的abuse/misuse 用例
列出正常的安全需求
执行架构风险分析
建立基于风险的安全测试计划
运用静态分析工具
执行安全测试
执行渗透测试在最终环境
清理安全破坏后的环境。
其中架构风险分析 基于风险的安全测试计划和安全测试 是尤其紧密相关联的三个部分。
如何执行安全测试: 谁去做安全测试,因为安全测试包括两种方法,谁去做这个问题有两种答案。标准测试组织用上写方法能够执行功能安全测试。例如确认访问控制方法是否正常工作的测试就是一类功能安全测试。 另一个方面,传统QA人员去执行基于风险的安全测试是很困难的,问题是安全测试是一个专门知识。首先安全测试的困难是测试设计者必须用一个攻击者的思维去思考。第二,安全测试不经常导致直接的安全业绩和显示出被发掘的问题。所以说基于风险的安全测试依赖于更多专门的知识和更多的经验。
怎么去做安全测试:把自己想象一个攻击者,按攻击者的思路去设计测试。白盒,黑盒测试和分析方法两者都是去理解软件,但是他们用不同的方法依区别是否分析人员和测试者已经访问源代码。白盒测试分析包括分析和理解源代码和设计。他是非常典型和有效的发现程序错误的方法(bug-自动扫描代码,缺点-做风险分析)。黑盒分析是通过输入不同输入值,来分析到正在运行的程序。这种测试只需要运行程序,不需要分析源代码在安全范例中,恶意的输入是一个有效的方法去破坏程序。如果程序真的被破坏了,那么我们可能真的发现了一个安全问题。只要测试人员能提供可能的输入并且能观察到测试效果,那么黑盒测试就可行。
常见的安全测试技术:
1. 网络扫描:
2. 弱点扫描
3. 密码破解
4. 日志检查
5. 文件完整性检查
6. 病毒探测
7. 无线网络测试
8. 渗透测试
9. 事后测试
-
Linux 下安装oracle9i 的一些问题
2009-02-09 17:55:24
在linux 下安装oracle常常遇到这样那样的问题,我今天把这些问题罗列一下,以后注意:
1.通过vnc远程安装的时候,在通过vncview连上linux后,启动./runinstall.sh 有一步是需要运行xhost + 是对Xwindow的一个权限的操作,但是有时就是碰到链接不上等错误,处理办法是吧vnc目录下的.XAuthoriza 这个文件删除,重新执行xhost +就可以通过。
2. linux 的补丁包一定要打全,不然的话就会在安装的最后遇到很多问题,Error invoking ...*.mk 这样的错误,需要打的开发包如下:compat-libstdc++-7.3-2.96.122 compat-gcc-c++-7.3-2.96.122
compat-libstdc++-devel-7.3-2.96.122 compat-db-4.0.14-5 compat-gcc-7.3-2.96.122
tcl-devel-8.3.5-92.i386.ipm openmotif21-2.1.30-8 setarch-1.3-1 compat-oracle-rhel4-1.0-5.i386.rpm compat-libcwait-2.1-1.i386.rpm 装这些包的时候最好用yum或类似的工具来安装可以把所以依赖的包都能打上,比较省力气。3. 用dbca建库时候报错 "jre was not found /usr/oracle/product/oracle9.2/oracle.swd.jre/bin/i386/native_thread/jre" 解决办法定位124行在{oracle_home}/bin/dbca文件,把这if语句段全部注释掉,只需留下 $JRE_DIR/bin/jre -native -DORACLE_HOME=$OH -DJDBC_PROTOCOL=thin -mx64m -classpath $CLASSPATH oracle.sysman.assistants.dbca.Dbca $ARGUMENTS 这句就可以了
先这几个了,后面继续
-
修改redolog的方法,新增,扩展,删除
2009-02-09 10:39:41
--创建2个新的日志组
alter database add logfile group 4 ('D:\ORACLE\ORADATA\ORADB\REDO04_1.LOG') size 1024k;
alter database add logfile group 5 ('D:\ORACLE\ORADATA\ORADB\REDO05_1.LOG') size 1024k;--切换当前日志到新的日志组,目的使得修改的日志组非Active 状态
alter system switch logfile;
alter system switch logfile;--删除旧的日志组
alter database drop logfile group 1;
alter database drop logfile group 2;
alter database drop logfile group 3;--操作系统下删除原日志组1、2、3中的文件
--重建日志组1、2、3
alter database add logfile group 1 ('/home/oracle/ORADATA/redotest/REDO01_1.LOG') size 500M;
alter database add logfile group 2 ('/home/oracle/ORADATA/redotest/REDO02_1.LOG') size 500M;
alter database add logfile group 3 ('/home/oracle/ORADATA/redotest/REDO03_1.LOG') size 500M; -
supplemental log
2009-02-09 10:16:19
因为在oracle里在做update操作时候,有些信息是不技术redo log,例如主键或唯一键等,这样在根据redolog 来解析数据是时候你就不知道具体那行数据被修改,如果根据rowid 来做key值的,在不同数据库里脱离了块,rowid也就没有任何意义了,所以oracle提供了supplemenetal log,通过配置启动它,oracle会在redo log里技术主键或唯一键的信息。具体修改方法如下:
--停止supplemental log
alter database drop supplemental log data
--默认启动方法不是完全启动,建议使用下面的指定启动的方法
alter database add supplemental log data
--指定具体的启动的项对应v$database 中的supplemental_log_data_pk,supplemental_log_data_ui
alter database add supplemental log data (primary key ,unique index) columns--检查修改结果
select supplemental_log_data_min,supplemental_log_data_pk,supplemental_log_data_ui
from v$database -
oracle 9i 多种数据类型建表和插入数据脚本
2009-02-09 09:59:48
create table t_single_char(id int , data_desc CHAR(20) , PRIMARY KEY (id) )
/create table t_single_varchar(id int , data_desc VARCHAR(100) , PRIMARY KEY (id) )
/create table t_single_varchar2(id int , data_desc VARCHAR2(100) , PRIMARY KEY (id) )
/create table t_single_nchar(id int , data_desc NCHAR(20) , PRIMARY KEY (id) )
/create table t_single_nvarchar2(id int , data_desc NVARCHAR2(100) , PRIMARY KEY (id) )
/create table t_single_number(id int , data_desc NUMBER(5) , PRIMARY KEY (id) )
/--please ignore the follwing twe table , the data type is don't supported in oracle9i
--create table t_single_binary_double(id int , data_desc BINARY_DOUBLE , PRIMARY KEY (id) )
--create table t_single_binary_float(id int , data_desc BINARY_INTEGER , PRIMARY KEY (id) )
create table t_single_date(id int , data_desc DATE , PRIMARY KEY (id) )
/create table t_single_timestamp( id int , data_desc TIMESTAMP(3) , PRIMARY KEY (id) )
/create table t_single_timestamp_zone( id int , data_desc TIMESTAMP(3) WITH TIME ZONE , PRIMARY KEY (id) )
/create table t_single_timestamp_local_zone( id int , data_desc TIMESTAMP(3) WITH LOCAL TIME ZONE, PRIMARY KEY (id) )
/create table t_single_raw(id int , data_desc RAW(10) , PRIMARY KEY (id) )
/create table t_single_long_raw(id int , data_desc LONG RAW, PRIMARY KEY (id) )
/create table t_single_clob(id int , data_desc CLOB, PRIMARY KEY (id) )
/create table t_single_nclob(id int , data_desc NCLOB, PRIMARY KEY (id) )
/create table t_single_ROWID(id int , data_desc ROWID ,PRIMARY KEY (id) )
/create table t_single_nologging (id int , data_desc varchar2(100) ,primary key (id)) nologging
/---Insert table
select seq_id.nextval into j from dual;
select seq_id.currval into i from dual;--insert into one record to each table
insert into T_SINGLE_CHAR values(j,'test');
insert into T_SINGLE_NCHAR values(i,'test');
insert into T_SINGLE_NVARCHAR2 values(i,'test');
insert into T_SINGLE_VARCHAR values(i,'test');
insert into T_SINGLE_VARCHAR2 values(i,'test');
insert into T_SINGLE_NUMBER values(i,10000.00);
insert into T_SINGLE_DATE values(i,sysdate);
insert into T_SINGLE_LONG_RAW values(i, hextoraw('ff'));
insert into T_SINGLE_RAW values(i, hextoraw('dd'));
insert into T_SINGLE_ROWID
select i, DBMS_ROWID.ROWID_CREATE(1,24532,5,65,ROWNUM) from dual;
insert into T_SINGLE_TIMESTAMP values(i,SYSTIMESTAMP );
insert into T_SINGLE_TIMESTAMP_LOCAL_ZONE values(i ,SYSTIMESTAMP );
insert into T_SINGLE_TIMESTAMP_ZONE values(i,SYSTIMESTAMP);
insert into T_SINGLE_CLOB values(i,empty_clob());
insert into T_SINGLE_NCLOB values(i,empty_clob());