51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

手机号码,快捷登录

查看: 2473|回复: 11
打印 上一主题 下一主题

[原创] 计算机四级考试中浅谈

[复制链接]
  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    跳转到指定楼层
    1#
    发表于 2011-2-18 08:38:39 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
    本帖最后由 楠族开心果 于 2011-2-18 08:40 编辑

    软件测试中浅谈FTTH测试:

    关于FTTH的相关测试又可分为多种层次:线路链路的测试,协议一致性测试以及应用业务测试。以下围绕这三方面测试做一些简单的介绍。

    线路链路的测试:考虑到单纤三波的工作方式,且分上,下行方向,所以针对PON接口的发送光功率测试会有测试方面的特殊要求。在下行方向,当 EPON系统提供CATV业务时,下行方向就会有1490nm(Ethernet)和1550nm(CATV)两个波长共存在一根光纤上,这样就需要选用可选波长的光功率计来分别测试这两个波长的光功率,而市面上现有很多测试仪是不具备1490nm波长的测试能力的,因为这需要在光功率计中加入具有高隔离度的 1490nm和1550nm滤波器,以精确的测试这两个波长上的光功率。上行PON接口发射光功率有两种方式,一种上行光信号光功率信号只能被下行信号激活,另外一种情况是上行信号只有在某些预先定义的时隙内(即是成帧的)是被激活的。此时,测试中需要注意,因为传统的通过平均光功率测试的方法不再适用,取而代之以触发脉冲的光功率测试(当然由于技术问题或不规范操作的存在,目前很多情况下,还是用平均光功率来测试),如果要测试上行发射光功率,前一种方式要求OLT与ONU之间必须保持在连通状态,这样就要求用来测试的光功率计支持在线模式,这样才能既保证光链路的连通,又可以同时测试上行光功率。后一种方式要求光功率计具有对突发模式的信号的测试能力。

    同时在损耗测试中,还需要注意的是PON中的光分路器会带来较大的损耗,不仅使下行的光产生损耗,上行的光也会产生基本相同的损耗。分路器的实现技术各不相同,使得每条光路的损耗可能存在差异,要想把每条光路的损耗严格限制在预算范围内是一个挑战。这时最好选用那种针对PON优化的OTDR,不仅可以支持 1490nm波长的测试,还具备穿通光分路器功能,而且具有更小盲区和线性度,可来分辨小事件,同时考虑到分光器的衰减,最好选用动态范围比较大的 OTDR测试仪,如果在维护中还需要考虑支持在线测试,从而不影响其他PON用户的使用。

    光回损是另一个要考虑的问题,光回损不仅是能量损耗,还会导致发端激光器不稳定。。由于PON是一个单纤双向的系统,因此光回损测试应该是双方向的。在安装和维护时,要注意光纤连接头的清洁,因为产生损耗、光回损的超标的关键原因很多时候就是光纤连接头的清洁度不够,和受污染。

    协议一致性测试:在统一技术标准上,测试和衡量不同厂商设备和技术之间能否互联互通和兼容的,测试过程要求仪表能够在不同厂商FTTH设备之间进行在线分析,通过触发、过滤、捕获和解码功能用于分析设备不能连通的原因,找到协议一致性问题的来源。

    当然从使用的角度来讲,作为使用用户,不需要太关注协议一致性测试,因为这些测试更多是FTTH,PON供应商需要考虑的问题,各个厂商会将自己的产品和平台同其他各品牌做一致性的测试。

    网络业务层面的测试:EPON系统可能承载的业务类型包括IP业务、TDM业务,可选支持CATV业务,其中TDM业务包括语音业务和数据专线业务。对EPON系统的性能测试主要包括IP传输性能测试、E1通路性能测试以及平均信号传输时延测试。

    主要测量以太网性能和服务等级协议(SLA)验证,进行三重播放测试,包括RFC2544,24小时无码等,同时提供MDI参数、QoE指标、PCR抖动测试等。

    在业务层监控诸如IPTV服务质量,MDI指数,数据包抖动,PCR抖动等和带宽利用率等重要信息。

    总结:现今,测试仪器领域的竞争也愈发激烈,国内国外厂商都愈来愈关注这块市场,当然现在来说可能还是国外厂商占据份额较多,并且各类供应商在 FTTH测试领域竞争环节又不尽相同,安捷伦是FTTH测试领域全面方案的提供者,但地位也不断受到其他厂商如Fluke(福禄克),EXFO的挑战,另外值得欣喜的是国内厂商也再以自身的优势参与这一领域的搏击,相信随着各种力量的合作,竞争,参与,FTTH测试市场将愈发成熟完善起来,那样将是让人欣喜且愿意看到的,用户也可以有更多的选择。
    分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
    收藏收藏
    回复

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    12#
     楼主| 发表于 2011-2-18 08:45:58 | 只看该作者
    计算机四级考试之剖析软件测试中压力测试
    概念之一【压力测试】来自VisualStudio.NET设计分布式应用程序可靠性测试:是指模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。对每个单独的组件进行压力测试后,应对带有其所有组件和支持服务的整个应用程序进行压力测试。集中测试从最基础的功能测试开始。您需要知道编码路径和用户方案、了解用户试图做什么以及确定用户运用您的应用程序的所有方式。测试脚本应根据预期的用法运行应用程序。例如,如果您的应用程序显示Web页,而且99%的客户只是搜索该站点,只有1%的客户将真正购买,这使得提供对搜索和其他浏览功能进行压力测试的测试脚本才有意义。当然,也应对购物车进行测试,但是预期的使用暗示搜索测试应在测试中占很大比重。

    概念之二【压力测试】来自.NET应用程序性能测试:压力测试用来评估在超越最大负载的情况下系统将如何运行。压力测试的目标就是发现在高负载的条件下应用程序的缺陷(BUG)。包括:synchronizationissues,raceconditions,andmemoryleaks(内存泄漏)。压力测试能让您识别程序的弱点和在极限负载下程序将如何运行。

    概念之三【压力测试】压力测试主要是为了发现在一(任意)定条件下软件系统的性能的变化情况。通过改变应用程序的输入以对应用程序施加越来越大的负载(并发,循环操作,多用户)并测量在这些不同的输入时性能的改变,也就是通常说的概念:压力测试考察当前软硬件环境下系统所能承受的最大负荷并帮助找出系统瓶颈所在。其实这种测试也可以称为负载测试,但是负载测试通常描述一种特定类型的压力测试——增加用户数量以对应用程序进行压力测试。

    网上可能还有多于以上三种所描述的对压力测试这个名词的定义。

    我比较赞同第一种概念,压力测试应该是指模拟巨大的工作负荷以查看应用程序在峰值使用情况下如何执行操作。扩展开来说,其一压力测试应该是较短时间的,其次是模拟巨大的工作负荷的,再次压力测试是要使应用程序的使用达到峰值。对这三点继续补充,对第一点长时间的压力测试就转变成了负载测试;对第二点,对应用程序施加的压力是超负荷的,所以要不断地加压;第三点,使应用程序的使用达到峰值,如果超过这个界限则应用程序会崩溃或错误率激增,这个峰值是针对某一时刻来说的,也是针对某个临界的压力来说的,转变为场景设置中的说法就是能够支持的最大并发用户数。

    在最近的一次测试中定义了测试的目的是:需要了解AUT(被测应用程序)一般能够承受的压力,同时能够承受的用户访问量(容量),最多支持有多少用户同时访问某个功能。在AUT中选择了用户最常用的五个功能作为本次测试的内容,包括登录。大概的需求就是这样。

    接下来我AUT的登录说一说怎么用LoadRunner和Jmeter来实现场景的设置达到测试的目的。(注:对服务器的检测不是本次测试的重点,本次测试主要收集并发访问用户数和发生错误用户数)



    首先是对脚本的要求:

    1、录制脚本(注意所有的脚本都应录制到Action中),自定义事务,事务从提交用户名和口令的脚本之前开始;

    2、在定义事务开始的脚本前加入集合点;

    3、在脚本中加入检查点,以登录成功的页面出现登录用户的ID即可;

    4、参数化登录用户的身份;

    其次是对场景设置的要求:

    1、因为事先我们不知道将有多少用户访问是临界点,所以在测试过程中需要多次改变用户数来确定;

    2、建议修改运行时设置,优化对服务器的访问;[Page]

    3、计划的设置,每x时间后加载10用户(根据总用户数设置),完全加载后持续运行不超过5分钟(根据需要设置);

    4、集合策略,当运行中的用户数100%达到集合点时释放;

    5、注意事项,需要注意几个时间:

    1)服务器响应超时时间;

    2)登录事务迭代一次所使用的时间;

    3)集合点等待超时时间;

    4)计划中设置的间隔时间。在我的测试中事务运行一次的时间不超过30秒,通过修改脚本使它的运行时间达到一分钟左右,服务器响应超时时间、结合点等待超时时间、计划中设置的间隔时间都设置为了2分钟。

    这样场景开始运行后运行用户数呈阶梯增长,另外在每个上升点新增的用户都会随原来已经运行的用户并发访问服务器。

    通过多次的运行和对测试结果中正在运行用户数与错误用户的对比,然后根据定义可接受错误率就可得到该功能的最大并发访问的用户数。

    以上测试中排除了对网络、客户端等的要求。在实际测试中首先要保证这些资源是足够的。

    使用Jmeter也能够达到上述描述的场景的测试,并且更加的便捷。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    11#
     楼主| 发表于 2011-2-18 08:45:34 | 只看该作者
    计算机四级考试:软件测试接口的测试用例类型
    最近测试了下Service层接口测试,总结了下接口测试用例类型,大致有三种测试类型:

    1.接口逻辑测试

    如果要保证接口测试的顺利进行,开发人员JavaDoc的输写定不可少,如何测试JavaDoc这里并不讲述,这里主要讲根据JavaDoc来编写测试用例,一般情况下JavaDoc需要包含前提条件,业务逻辑,输入参数,输出值的描述,在接口逻辑测试中主要是根据所描述的业务逻辑,进行用例的设计,主要目标是测试在正常输入的情况下能得出正确的结果,测试用例的设计方法跟黑盒测试差不多,主要运用等价类,边界值两种方法。

    2.出错测试

    接口逻辑的测试中主要测试的是正常逻辑,即对外提供的接口服务是能够工作的,但是这是这些测试不能保证数据的安全,及程序在异常情况的逻辑正确性,因此需要测试出错测试,主要包括以下几个方面:

    1)空值输入,如当传入一个对象参数时,需进行NULL值的参数

    2)参数属性的测试,如果输入一个未赋值参数

    3)异常的测试,制造一些异常的测试场景,测试的异常描述是否清晰

    4)另外如参数个数,参数类型(如int型输入String的参数)的出错测试,由于IDE本身就会报编译出错的信息,这里可以不做测试用例的设计。

    3.路径测试

    经过了上述处理后,单个的接口服务已经得到了保证,但是在业务流中是否满足了业务需求其实还是没有得到保证,路径测试的目的就是设计尽可能少的用例,来保证各种业务场景下数据是安全可操作的。路径测试用例例子如下:

    这里的测试用例有:

    1.ABC

    2.ABD

    3.AE

    4.AFG

    如果考虑到A这条路径不只一个测试接口可以操作,可在上述用例的基础上再增加以下用例:

    5.A’BC

    6. A’BD

    7. A’E

    8. A’FG

    如果C,D路径等有多个接口可以实现,也可以根据这种方法增加用例,达到路径的覆盖,但是此种路径的覆盖组合会非常多,因此在实际的情况下需要根据实际业务场景进行设计,如A’BC这个路径,在现实的业务逻辑中可能是不存在的,这里就无需列出来了。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    10#
     楼主| 发表于 2011-2-18 08:44:43 | 只看该作者
    计算机四级考试:MySQL怎样优化WHERE子句
    where优化主要是在SELECT中,因为他们最主要是在那里使用,但是同样的优化也可被用于DELETE和UPDATE语句。

    但请注意,下面的优化并不是完全的。MySQL实施了许多优化,但我没时间全部测试。

    MySQL的一些优化列在下面:

    删除不必要的括号:

    ((a AND b) AND c OR (((a AND b) AND (c AND d))))

    -》 (a AND b AND c) OR (a AND b AND c AND d)

    常数调入:

    (a -》 b》5 AND b=c AND a=5

    删除常数条件:

    (B》=5 AND B=5) OR (B=6 AND 5=5) OR (B=7 AND 5=6)

    -》 B=5 OR B=6

    索引使用的常数表达式仅计算一次。

    在一个单个表上的没有一个WHERE的COUNT(*)直接从表中检索信息。当仅使用一个表时,对任何NOT NULL表达式也这样做。

    无效常数表达式的早期检测。MySQL快速检测某些SELECT语句是不可能的并且不返回行。

    如果你不使用GROUP BY或分组函数(COUNT()、MIN()……),HAVING与WHERE合并。

    为每个子联结(sub join),构造一个更简单的WHERE以得到一个更快的WHERE计算并且也尽快跳过记录。

    所有常数的表在查询中的在其他任何表之前被读出。

    一个常数的表是:

    一个空表或一个有1行的表。

    与在一个UNIQUE索引、或一个PRIMARY KEY的WHERE子句一起使用的表,这里所有的索引部分使用一个常数表达式并且索引部分被定义为NOT NULL。



    所有下列的表用作常数表:

    mysql》 SELECT * FROM t WHERE primary_key=1;

    mysql》 SELECT * FROM t1,t2 WHERE t1.primary_key=1 AND t2.primary_key=t1.id;

    对联结表的最好联结组合是通过尝试所有可能性来找到:(。如果所有在ORDER BY和GROUP BY的列来自同一个表,那么当联结时,该表首先被选中。

    如果你使用SQL_SMALL_RESULT,MySQL将使用一个在内存中的表。

    如果有一个ORDER BY子句和一个不同的GROUP BY子句,或如果ORDER BY或GROUP BY包含不是来自联结队列中的第一个表的其他表的列,创建一个临时表。

    因为DISTINCT被变换到在所有的列上的一个GROUP BY,DISTINCT与ORDER BY结合也将在许多情况下需要一张临时表。

    每个表的索引被查询并且使用跨越少于30% 的行的索引。如果这样的索引没能找到,将使用一个快速的表扫描。

    在一些情况下,MySQL能从索引中读出行,甚至不用查询数据文件。如果索引使用的所有列是数字的,那么只有索引树被用来解答查询。

    在每个记录被输出前,那些不匹配HAVING子句的行将被跳过。

    下面是一些快速的查询例子:

    mysql》 SELECT COUNT(*) FROM tbl_name;

    mysql》 SELECT MIN(key_part1),MAX(key_part1) FROM tbl_name;

    mysql》 SELECT MAX(key_part2) FROM tbl_name

    WHERE key_part_1=constant;

    mysql》 SELECT 。.. FROM tbl_name

    ORDER BY key_part1,key_part2,。.. LIMIT 10;

    mysql》 SELECT 。.. FROM tbl_name

    ORDER BY key_part1 DESC,key_part2 DESC,。.. LIMIT 10;

    下列查询仅使用索引树就可解决(假设索引列是数字的):

    mysql》 SELECT key_part1,key_part2 FROM tbl_name WHERE key_part1=val;

    mysql》 SELECT COUNT(*) FROM tbl_name

    WHERE key_part1=val1 AND key_part2=val2;

    mysql》 SELECT key_part2 FROM tbl_name GROUP BY key_part1;

    下列查询使用索引以排序顺序检索,不用一次另外的排序:

    mysql》 SELECT 。.. FROM tbl_name ORDER BY key_part1,key_part2,。..

    mysql》 SELECT 。.. FROM tbl_name ORDER BY key_part1 DESC,key_part2 DESC,。..
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    9#
     楼主| 发表于 2011-2-18 08:43:59 | 只看该作者
    计算机四级考试:用perl访问mysql数据库
    一。 安装DBI模块

    步骤1:

    从TOOLS栏目中下载DBI.zip,下载完后用winzip解开到一个temp目录,共有三个文件:

    Readme

    DBI.ppd

    DBI.tar.gz

    步骤2:

    在Dos窗口下,temp目录中运行下面的DOS命令:

    ppm install DBI.ppd

    如果提示无效命令,可在perl/bin目录下运行

    二。 安装DBD-MySQL模块

    从软件下载中下载DBD-Mysql.zip,安装方法同一。

    三。 准备数据库

    启动mysql,首先创建一个数据库mydata,然后创建一个表address

    mysql》 create database mydata;

    Query OK, 1 row affected (0.00 sec)

    mysql》 use mydata;

    Database changed

    mysql》 create table address (

    -》 id int(5) not null,

    -》 name varchar(40) not null,

    -》 email varchar(50) not null,

    -》 telephone int(12) null);

    Query OK, 0 rows affected (0.05 sec)

    输入些数据:

    mysql》 insert into address values (

    -》 1,’Nighthawk’,’nighthawk@163.net’,92384092);

    Query OK, 1 row affected (0.00 sec)



    四。 下面用perl程序来插入若干记录并做查询。

    use DBI;

    #连接数据库mydata

    my $dbh = DBI-》connect(’DBI:mysql:mydata’) or die “无法连接数据库: ” 。 DBI-》errstr;

    print “插入若干记录n”;

    my $sth = $dbh-》prepare(q{

    INSERT INTO address (id, name,email,telephone) VALUES (?, ?, ?, ?)

    }) });

    print “输入记录,回车结束:”;

    while ($inputdata =《》) {

    chop $inputdata;

    last unless($inputdata);

    my ($id, $name,$email, $tel) = split( /,/, $inputdata);

    $sth-》execute($id, $name, $email,$tel)

    }

    # $dbh-》commit;

    print “下面根据输入的名字打印出EMAIL地址和电话n”;

    my $sth = $dbh-》prepare(’SELECT * FROM address WHERE name=?’)

    or die $dbh-》errstr;

    print “请输入姓名,回车结束:”;

    while ($inputname =《》) {

    my @data;

    chomp $inputname;

    last unless($inputname);

    $sth-》execute($inputname) or die “错误: ” 。 $sth-》errstr;

    while (@data = $sth-》fetchrow_array()) {

    print “Email:$data[2]t Telephone:$data[3]n”;

    }

    }

    #断开连接

    $dbh-》disconnect;
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    8#
     楼主| 发表于 2011-2-18 08:43:19 | 只看该作者
    续:

    1.3.2 查询语言术语

    MySQL使用一种称为SQL(Structured Query Language)的语言。SQL 是当今的标准数据库语言,所有主要的数据库系统都使用它。SQL 具有多种不同的语句,所有语句都是以一种不枯燥并有用的方式设计来与数据库进行交互的。正如其他语言一样, SQL 在初次接触时可能会令人感到有些古怪。例如,为了创建一个表,需要告诉MySQL表结构应该是什么样的。我们可能会根据图表来想像一个表,但MySQL不会,因此,在创建表时需要告诉MySQL一些东西

    如果您不熟悉SQL 语句,可能会对这样的语句留下深刻的印象,但您不必以程序员的身份来学习怎样有效地使用SQL。如果逐步熟悉了SQL 语言之后,就会以一种不同的眼光来看待CREATE TABLE 语句,会认为它是一个有助于描述自己信息的伙伴,而不是一种奇怪的胡言乱语。

    1.3.3 MySQL的体系结构术语

    在您使用MySQL时,实际正使用以下两个程序,因为MySQL采用的是客户机/服务器体系结构:

    ■ 数据库服务器是一个位于存放您的数据的机器上的程序。它监听从网络上传过来的客户机的请求并根据这些请求访问数据库的内容,以便向客户机提供它们所要求的信息。

    ■ 客户机是连接到数据库服务器的程序,这些程序告诉服务器需要什么信息的查询。MySQL分发包包括服务器和几个客户机程序。可根据要达到的目的来使用客户机。最常用的客户机程序为mysql,这是一个交互式的客户机程序,它能发布查询并看到结果。其他

    的客户机程序有: mysqldump 和mysqlimport,分别转储表的内容到某个文件或将文件的内容导入某个表; mysqladmin 用来查看服务器的状态并完成管理任务,如告诉服务器关闭等。如果具有标准的客户机不适合的应用,那么MySQL还提供了一个客户机编程库,可以编写自己的程序。客户机编程库可直接从C 程序中调用,如果希望使用C 语言以外的其他语言,还有几种其他的接口可用。

    MySQL的客户机/服务器体系结构具有如下好处:

    ■ 服务器提供并发控制,使两个用户不能同时修改相同的记录。所有客户机的请求都通过服务器处理,服务器分类辨别谁准备做什么,何时做。如果多个客户机希望同时访问相同的表,它们不必互相裁决和协商,只要发送自己的请求给服务器并让它仔细确定完成这些请求的顺序即可。

    ■ 不必在数据库所在的机器上注册。MySQL知道怎样在因特网上工作,因此您可以在任何位置运行一个客户机程序,此客户机程序可以连接到网络上的服务器。距离不是问题,可从世界上的任何地方访问服务器。如果服务器位于澳大利亚的某台机器上,那么当您带着自己的便携式电脑到冰岛去旅行时,仍然可以访问自己的数据库。

    这是否意味着任何人只要连接到因特网就可以访问您的数据?答案是否定的。MySQL含有一个灵活的安全系统,只允许那些有权限访问数据的人访问。可以保证那些人只能够做允许他们做的事。或许记账办公室的Sally 能够读取和更新(修改)记录,而服务台的Phil 只能查看记录。可以设置使用人员的权限。如果希望运行一个自含系统(独立系统),只要设置访问权限使客户机只能从服务器运行的主机上进行连接即可。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    7#
     楼主| 发表于 2011-2-18 08:42:49 | 只看该作者
    计算机四级考试:MYSQL基本数据库术语
    您可能会注意到,已经读了本书这么多页,但是还没有看到几句行话和术语。虽然我们大致提了一下怎样利用样例数据库,但事实上,关于什么是“数据库”,我们一点东西都还没有介绍。不过,我们现在打算设计该数据库,然后开始实现它,这样就不能再避而不谈数据库术语了。介绍数据库术语就是本节的目的。本节介绍的一些术语全书都要用到,因此必须对其熟悉。所幸的是,关系数据库中的许多概念是相当简单的。事实上,关系数据库的吸引力主要来源于其基本概念的简单性。

    1.3.1基本术语

    在数据库世界中,MySQL归类为关系数据库管理系统(RDBMS)。所谓关系数据库管理系统的含义如下:

    ■ 数据库(RDBMS 中的“DB”)是存储信息的仓库,以一种简单的、规则的方式进行组织:

    ■ 数据库中的数据集组织为表。

    ■ 每个表由行和列组成。

    ■ 表中每行为一个记录。

    ■ 记录可包含几段信息;表中每一列对应这些信息中的一段。

    ■ 管理系统(“MS”)是允许通过插入、检索、修改或删除记录来使用数据的软件。

    ■ “关系”(“R”)一词表示一种特殊种类的DB MS,它通过寻找相互之间的共同元素使存放在一个表中的信息关联到存放在另一个表中的信息。关系数据库的能力在于它能够从这些表中方便地取出数据,并将关联各表中的信息相结合得出问题的答案,这些答案只依据单个表的信息是不可能得到的。这里有一个例子,示出了关系数据库怎样将数据组织成表并将一个表中的信息与另一个表中的信息相关联。假定您管理一个含有标题广告服务的Web 站点。您与公司有协议,这些公司希望有人在拜访您的站点上的网页时显示他们的广告。每当一个拜访者点击您的页面一次,您就向该拜访者的浏览器提供了嵌在页面中的广告的一次服务,并且给公司估算一点费

    用。为了表示这些信息,要保存三个表(请参阅图1- 1)。一个是company 表,它含有公司名、编号、地址和电话号码等列。另一个是ad 表,它列出广告编号、拥有该广告的公司的编号以及每次点击时的计费数。第三个hit 表按广告编号记录广告点击次数以及广告提供服务的日期。

    利用单个表的信息可以回答某些问题。为了确定签协议的公司数目,只需对company 表中的行数计数即可。类似地,为了确定某个给定时间段中的点击次数,只需查看hit 表即可。其他问题要更为复杂一些,而且必须考虑多个表以确定答案。例如,为了确定Pickles.公司的每个广告在7月14日点击了多少次,应该按如下步骤使用这些表:

    1) 查询company 表中的公司名(Pickles, Inc)以找到公司编号( 14)。

    2) 利用公司编号查找ad 表中匹配的记录以便能够确定相关的广告编号。有两个这样的广告,48 和10 1。

    3) 对ad 表中匹配的每个记录,利用该记录中的广告编号查找hit 表中在所需日期范围内的匹配记录,然后对匹配的记录进行计数。广告编号为48 的匹配记录有三个,广告编号为101的匹配记录有两个。听起来很复杂!而这正是关系数据库系统所擅长的。这种复杂性在某种程度可以说是一种幻觉,因为上述每一步只不过是一个简单的匹配操作,它通过将一个表的行中的值与另一个表的行中的值相匹配,把一个表与另一个表相关联。这个简单的操作可以各种方式使用来回答各种各样的问题。每个公司有多少个不同的广告?哪个公司的广告最受欢迎?每个广告带来的收入是多少?当前记账期中每个公司的总费用是多少?现在我们已经介绍了关系数据库的理论,足以理解本书其余部分了,我们不必探究第三范式、实体关系图以及所有这一类的东西。如果您确实需要了解这些东西,那就太令人恐怖了,而且这也不是地方。建议您从阅读C.J.Date 和E 。 F.Codd 的某些书籍入手。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    6#
     楼主| 发表于 2011-2-18 08:42:17 | 只看该作者
    续:

    简单的讲,这样将会把文件data.sql中的内容导入到表Orders中,如mysqlimport工具一样,这个命令也有一些可以选择的参数。比如您需要把自己的电脑上的数据导入到远程的数据库服务器中,您可以使用下面的命令:

    LOAD DATA LOCAL INFILE ”C:\MyDocs\SQL.txt“ INTO TABLE Orders;

    上面的LOCAL参数表示文件是本地的文件,服务器是您所登陆的服务器。

    这样就省去了使用ftp来上传文件到服务器,MySQL替你完成了。

    您也可以设置插入语句的优先级,如果您要把它标记为低优先级(LOW_PRIORITY),那么MySQL将会等到没有其他人读这个表的时候,才把插入数据。可以使用如下的命令:

    LOAD DATA LOW_PRIORITY INFILE ”/home/mark/data.sql“ INTO TABLE Orders;

    您也可以指定是否在插入数据的时候,取代或者忽略文件与数据表中重复的键值。替代重复的键值的语法:

    LOAD DATA LOW_PRIORITY INFILE ”/home/mark/data.sql“ REPLACE INTO TABLE Orders;

    上面的句子看起来有点笨拙,但却把关键字放在了让您的剖析器可以理解的地方。

    下面的一对选项描述了文件的记录格式,这些选项也是在mysqlimport工具中可以用的。他们在这里看起来有点不同。首先,要用到FIELDS关键字,如果用到这个关键字,MySQL剖析器希望看到至少有下面的一个选项:

    TERMINATED BY character

    ENCLOSED BY character

    ESCAPED BY character

    这些关键字与它们的参数跟mysqlimport中的用法是一样的。 The

    TERMINATED BY 描述字段的分隔符,默认情况下是tab字符(\t)

    ENCLOSED BY描述的是字段的括起字符。比方以引号括起每一个字段。

    ESCAPED BY 描述的转义字符。默认的是反些杠(backslash:\ )。

    下面仍然使用前面的mysqlimport命令的例子,用LOAD DATA INFILE语句把同样的文件导入到数据库中:

    LOAD DATA INFILE ”/home/mark/Orders.txt“ REPLACE INTO TABLE Orders FIELDS TERMINATED BY ‘,’ ENCLOSED BY ‘”’;

    LOAD DATA INFILE语句中有一个mysqlimport工具中没有特点:

    LOAD DATA INFILE 可以按指定的列把文件导入到数据库中。

    当我们要把数据的一部分内容导入的时候,这个特点就很重要。比方说,我们要从Access数据库升级到MySQL数据库的时候,需要加入一些栏目(列/字段/field)到MySQL数据库中,以适应一些额外的需要。

    这个时候,我们的Access数据库中的数据仍然是可用的,但是因为这些数据的栏目(field)与MySQL中的不再匹配,因此而无法再使用mysqlimport工具。尽管如此,我们仍然可以使用LOAD DATA INFILE,下面的例子显示了如何向指定的栏目(field)中导入数据:

    LOAD DATA INFILE “/home/Order.txt” INTO TABLE Orders(Order_Number, Order_Date, Customer_ID);

    如您所见,我们可以指定需要的栏目(fields)。这些指定的字段依然是以括号括起,由逗号分隔的,如果您遗漏了其中任何一个,MySQL将会提醒您

    Importing Data from Microsoft Access (从Access中导入数据,略)
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    5#
     楼主| 发表于 2011-2-18 08:42:07 | 只看该作者
    计算机四级考试之批处理对MySQL进行数据操作
    批处理是一种非交互式运行MySQL程序的方法,如同您在mysql中使用的命令一样,你仍然将使用这些命令。

    为了实现批处理,您重定向一个文件到mysql程序中,首先我们需要一个文本文件,这个文本文件包含有与我们在mysql中输入的命令相同的文本。

    比如我们要插入一些数据,使用包含下面文本的文件(文件名为New_Data.sql,当然我们也可以取名为New_Data.txt及任何其他的合法名字,并不一定要以后缀sql结尾):

    USE Meet_A_Geek;

    INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, “Block”);

    INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, “Newton”);

    INSERT INTO Customers (Customer_ID, Last_Name) VALUES(NULL, “Simmons”);

    注意上面的这些句子的语法都必须是正确的,并且每个句子以分号结束。

    上面的USE命令选择数据库,INSERT命令插入数据。

    下面我们要把上面的文件导入到数据库中,导入之前要确认数据库已经在运行,即是mysqld进程(或者说服务,Windows NT下面称为”服务“,Unix下面为”进程“)已经在运行。

    然后运行下面的命令:

    bin/mysql –p 《 /home/mark/New_Data.sql

    接着按提示输入密码,如果上面的文件中的语句没有错误,那么这些数据就被导入到了数据库中。

    命令行中使用LOAD DATA INFILE 从文件中导入数据到数据库:

    现在您可能会问自己,“究竟为什么我要输入所有的这些SQL语句到文件中,然后通过程序运行它们呢?”

    这样看起来好像需要大量的工作。很好,你这样想很可能就对了。但是假如你有从所有这些命令中产生的log记录呢?现在这样就很棒,嗯,大多数数据库都会自动产生数据库中的事件记录的log。而大部分log都包含有用过的原始的SQL命令。因此,如果您不能从您现在的数据库中导出数据到新的mysql数据库中使用,那么您可以使用log和mysql的批处理特性,来快速且方便地导入您地数据。当然,这样就省去了打字的麻烦。

    LOAD DATA INFILE

    这是我们要介绍的最后一个导入数据到MySQL数据库中的方法。这个命令与mysqlimport非常相似,但这个方法可以在mysql命令行中使用。也就是说您可以在所有使用API的程序中使用这个命令。使用这种方法,您就可以在应用程序中导入您想要导入的数据。

    使用这个命令之前,mysqld进程(服务)必须已经在运行。

    启动mysql命令行:

    bin/mysql –p

    按提示输入密码,成功进入mysql命令行之后,输入下面的命令:

    USE Meet_A_Geek;

    LOAD DATA INFILE ”/home/mark/data.sql“ INTO TABLE Orders;
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    4#
     楼主| 发表于 2011-2-18 08:41:30 | 只看该作者
    计算机四级考试Mysql中临时表使用方法讲解
    当工作在非常大的表上时,你可能偶尔需要运行很多查询获得一个大量数据的小的子集,不是对整个表运行这些查询,而是让MySQL每次找出所需的少数记录,将记录选择到一个临时表可能更快些,然后多这些表运行查询。

    创建临时表很容易,给正常的CREATE TABLE语句加上TEMPORARY关键字:

    CREATE TEMPORARY TABLE tmp_table (

    name VARCHAR(10) NOT NULL,

    value INTEGER NOT NULL



    临时表将在你连接MySQL期间存在。当你断开时,MySQL将自动删除表并释放所用的空间。当然你可以在仍然连接的时候删除表并释放空间。

    DROP TABLE tmp_table

    如果在你创建名为tmp_table临时表时名为tmp_table的表在数据库中已经存在,临时表将有必要屏蔽(隐藏)非临时表tmp_table。

    如果你声明临时表是一个HEAP表,MySQL也允许你指定在内存中创建它:

    CREATE TEMPORARY TABLE tmp_table (

    name VARCHAR(10) NOT NULL,

    value INTEGER NOT NULL

    ) TYPE = HEAP

    因为HEAP表存储在内存中,你对它运行的查询可能比磁盘上的临时表快些。然而,HEAP表与一般的表有些不同,且有自身的限制。详见MySQL参考手册。

    正如前面的建议,你应该测试临时表看看它们是否真的比对大量数据库运行查询快。如果数据很好地索引,临时表可能一点不快。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    3#
     楼主| 发表于 2011-2-18 08:41:10 | 只看该作者
    MSSQL数据库:存储过程学习
    这个例子里面我们从两个表中取出头两行,然后合并到一个表中。

    在现实中我们常常会遇到这样的情况,在一个数据库中存在两个表,假设表1储存着公司个产品本季度销售信息,表2储存着公司本季度欠款金额情况。在一个页面中我们想把这两个信息显示出来。通常的做法是在程序中进行两次SQL查询,返回两个结果集,在分别显示出来,非常麻烦。

    下面是实现这个功能的代码:

    CREATE PROCEDURE test

    AS

    SET NOCOUNT ON --指示存储过程不返回查询影响的行数

    DECLARE @col1c varchar(20),@col2c varchar(20), @index int

    SET @index = 1

    CREATE TABLE #tmptbl --创建一个临时表,用于储存我们的结果



    colID int IDENTITY(1,1) PRIMARY KEY CLUSTERED,

    col1 varchar(20),

    col2 varchar(20)



    DECLARE cur1 CURSOR FOR SELECT TOP 2 customerid FROM orders

    DECLARE cur2 CURSOR FOR SELECT TOP 2 regiondescription FROM region

    OPEN cur1

    OPEN cur2

    FETCH cur2 INTO @col2c

    FETCH cur1 INTO @col1c

    WHILE @@FETCH_STATUS = 0

    BEGIN

    INSERT INTO #tmptbl (col1, col2) VALUES (@col1c, @col2c)

    FETCH NEXT FROM cur1 INTO @col1c

    FETCH NEXT FROM cur2 INTO @col2c

    END

    CLOSE cur1

    CLOSE cur2

    DEALLOCATE cur1

    DEALLOCATE cur2

    SELECT * FROM #tmptbl

    DROP TABLE #tmptbl

    GO

    说明:

    @@FETCH_STATUS,返回被fetch语句执行的最后游标状态。

    返回值:0-FETCH语句执行成功

    1-FETCH语句失败,或此行不再结果集中。

    2-被提取的行不存在。
    回复 支持 反对

    使用道具 举报

  • TA的每日心情
    奋斗
    2024-11-8 12:09
  • 签到天数: 547 天

    连续签到: 1 天

    [LV.9]测试副司令

    2#
     楼主| 发表于 2011-2-18 08:39:36 | 只看该作者
    软件测试如何重用测试用例:
    跟测试工程师打交道最多的可能就是测试用例了,先设计出一些测试用例,然后这些测试用例要经过评审,之后要执行这些测试用例,完了以后还有可能需要对这些测试用例进行更新。测试用例的重用是一个很有必要的活动。那怎么重用呢?很多人可能第一时间想到了一些测试管理工具能帮上忙,例如QualityCenter,Test Link;又或者是一些保存测试用例的工具,例如Word,Excel。

    不过这些东西真的能帮助我们重用测试用例么?我想未必。测试用例的重用,应该是测试用例里面的设计思想的重用,而不是具体某个测试用例的,因为对于功能测试的测试用例来说,大多数的测试用例都跟某个具体的被测应用有想到大的关联性,例如要测试一个博客编辑器,对于MySpace的博客编辑器和facebook的博客编辑器来说,它们的主要功能是相似的,都有发表博客,编辑博客,修改博客等……但是由于这是两个不同公司的产品,他们的具体功能或者UI是完全不一样的,所以拿到的两套测试用例,也应该是不一样的。如果分别提取出测试用例的核心思想(就是那些可以重用的部分),应该能看到很多的共同点,或许会有这么一条共同的用例思想。

    1.打开博客编辑器

    2.点击插入视频的按钮

    3.粘贴视频代码

    4.点击保存,发布

    期望结果是该视频能正确显示在博客上。

    这条用例可以提取为“验证博客编辑器能够插入视频”,至于实现的细节,可能两家的处理不一样,可能前者用标签,后者用标签。回到实际的测试用例,前者可能要求将博客编辑器切换到HTML编辑模式下,要看到…。的代码,另外一个就是要检查有…。《/embed》的代码。其实测试用例是测试工程师之间的很好的沟通交流工具。通常在一些研讨会上,有人抛出一个问题“对于日期输入框大家会怎么进行测试”,大家接着七嘴八舌地进行讨论,这样的讨论结果就是大家都知道了一些,又好像不知道一些。如果这时候有人拿出自己的测试用例,那么会不会更加一目了然,更加有系统性?

    举个例子

    CRUD模式(创建,获取,更新,删除)

    1.选择并确定出一条记录或者一个字段

    2.产生一个随机的等价类item

    3.检查这个新产生的item是没有存在的

    4.添加一个新的item

    5.读取并且验证这个item的正确性

    6.修改该item并且验证item确是已经被修改

    7.删除该item并且验证item缺少已经删除

    以上测试用例可以应用于不同的场景,例如MySpace中的一个帐号,也可以是一条歌单,还可以是一篇博客。这种类型的用例才是可重用的,而不是发布一篇博客,修改博客,删除博客……测试用例的重用,也就是测试用例的精华部分,其设计思想,而不是一些存在QC,TD中的01010100101001。
    回复 支持 反对

    使用道具 举报

    本版积分规则

    关闭

    站长推荐上一条 /1 下一条

    小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

    GMT+8, 2024-11-25 12:56 , Processed in 0.077777 second(s), 26 queries .

    Powered by Discuz! X3.2

    © 2001-2024 Comsenz Inc.

    快速回复 返回顶部 返回列表