将测试进行到底,寻找不断进步的源泉和动力。

发布新日志

  • 面试。。。

    2009-11-13 21:25:52

    今天面试了一个人,印象很深刻。

    他很诚恳也很有想法,但是作为leader似乎会想得更多。虽然面试的过程很愉快,对他的感觉还不错,但是还是有些东西让人犹豫。

    他聪明,但是就会让人觉得不是很踏实,做测试重要的是要认真和踏实。

    他有个性,但是工作中似乎不需要太多的个性,他坦诚的告诉我他觉得工作不是他的全部,问到为什么,他说他的兴趣在其他方面而测试不是他的最爱。如今的工作对他似乎只是一个饭碗。

    其实还有很多东西,让我觉得他似乎还小,就像是90后的感觉。

    还好,我将我的想法告诉他,让他自己做决定,如果他为自己做好了决定,那么他应该会安心的培养对测试的兴趣,对工作的兴趣。

     

  • Being Look down upon by a silly goose

    2009-10-23 21:48:50

    Today I was looked down upon bye a silly goose who work in the HR department.

    The feeling was so bad. Maybe he had a reason to look down upon me, he didn't know me.Maybe he just thought, "Who are you? No old than me, why can you talk to me in the same level". yes, this is true. But even he didn't know, just for a stranger, you should treat him or her with the basic respect.

    and for this kind of thing, I have encountered for serveral times. and this is also the different between these two company. what is fun is that this people is also come from the former company, I am a person who will remeber this kind of thing for a long time. So I will find a way to let him know that he has hurt a important person and this person will be a big stone in his career. So I must work more hard, Maybe the yong present of the company is good example to me, No matter how old are you, how many experience you have, you can be a hight level person, the people who ignore you, must learn from that.

     

  • 3年四个公司是不是频繁了些呢?

    2009-08-17 23:19:41

    其实只能说是第三个吧,中间的那个不算。

    面对金钱的诱惑,我似乎已经选择了接受。好久没有看刘墉的东西了,艺术人生的匆匆几句似乎又让我找到了奋斗的力量。如果看到了更高的山,那么你现在要做的首先是爬下现在的山。

    面对前面,我不甚了解,只是知道以后的沟通肯定都是英语,没有使用汉语的机会。report的person是个韩国人,对于韩国人一贯的做事方式。。。我不敢一概而论。但是我还是期待更多很英国佬打交到的机会。希望公司中充斥着更多的英国人吧。

    面对眼前,唯一让我不舍的是leader的职位和聊得来的同事们。我不知道我走之后这个组会变成什么样子,但是真的是一个很好的团队,虽然有人的做事方式不是自己喜欢的,但是也有她的可取之处。生活中大家更像是同学或者说是朋友吧。我也不知道我提出辞职会对刚刚稳定下来的组织有什么影响,我能做的或许就是招进一个好的leader,来继续带领这个年轻的团队。有时候也想,或许我的离开是好事,对于大家,对于他们来说。可以招进一个更senior的leader,那么也会带给他们多的动力和压力吧。对于组,也能争取更多的新features的测试。

    所以选择离开,去迎接新的挑战。

     

     

     

  • 对榨汁机进行测试

    2009-06-20 00:03:41

    回到题目上来,我们假设题目有所改变,该榨汁机是一台普通的榨汁机,插电后放入水果或者蔬菜,按动开关,就可以榨汁。(和市面上能买到的差不多)那么需要如何考虑测试用例?虽然没实际用过榨汁机,但是靠想象应该也差不多。

    1. 考虑90%以上用户的使用习惯,确保最基本的功能-榨汁能够正常运作。

    • 通常的水果:西瓜、番茄、黄瓜、苹果、草莓、香蕉、李子、甘蔗等单独作为输入。
    • 非常见:玉米
    • 水果的混编作为输入。
    • 在输入容器所能容纳的情况下,输出的量杯是否足够大能容纳榨出的液体。
    • 在水果较硬的情况下,是否能正常工作。
    • 水果较软的情况下,是否能正常工作。
    • 如果有按钮或开关调节,测试按钮或开关的可用性和有效性。

    2. 易用性测试

    • 榨汁机的外观是否美观。这是用户选择的关键。
    • 榨汁机的电源线长度是否足够。
    • 量杯大小测试

    3. Force Error测试

    • 在空转情况(无输入)下做榨汁
    • 在有异物(如蔬果的枝叶)的情况下做榨汁
    • 在榨汁过程中停电,看是否能恢复
    • 110v电源输入测试
    • 在高温的情况是否能正常工作(40度以上)
    • 在周围有磁场的情况下是否能正常工作
    • 掉落测试

    4. Security 测试

    • 是否有儿童手指保护措施?
    • 在榨汁有漏出的情况下,是否会有漏电?

    5. 耐用性测试

    • 刀片耐用度测试
    • 平均无故障时间统计
    • 按钮或开关耐用度测试
    • 榨汁机使用寿命测试
    • 榨汁机本体容器压强测试

    基本上来讲,就是这些,对于一个只在电视上看过,从来没用过的人已经是一件不容易的事情了。

  • 对测试用例的看法

    2009-06-17 20:26:38

    前一天去一个不是很想去的公司面试,想想好久没有面试了,去积累一下面试的经验,以便过几天不至于紧张。

    开始的几个问题回答的还不错,记不清是第几个了问题了,

    “有三年的测试经验了,对测试用例这块有没有自己的见解”

    一时间我似乎蒙了,不知道该怎么回答,回答一些理论上的知识吗?那些又不是我自己的看法,人家问的是我的见解。三年了,前两年的公司基本没有什么测试流程,更不用提测试用例的编写了,写不写都可以,那时候当然就是偷懒不写了,或者是计划上写了,自己也象征性的写了些测试用例,可是真正到测试的时候也不会去按照自己写的去跑。正是因为这样,我选择了离开。到了现在这家公司,流程上面很成熟,没有测试用例是不行的,但是因为是外包而且组也是刚刚成立,也因为项目的业务流程很复杂,所以进一年来我们都是做回归测试,这样可以更好的了解业务上面的知识,即使快接触1年了也会有不知道的东西,不会跑的case。可想业务的复杂程度。编写case的机会也不是没有,但只是小小的一个功能。或许是因为自己的心虚,所以坦白说自己没怎么编写过case,这样一来,面试官觉得我虽然有3年的工作经验,但是还不能是个senior的tester,所以匆匆的就结束了面试。

    回来后,我仔细想了想,3年虽然写case的机会不是很多,但是自己也是有些对case的看法的。

    首先从整体上面看,测试用例是必须要有的,虽然可能刚开始建立的时候会难些,有时候我会想如果我再回去原来的公司,我应该怎样做,我想我首先要做的就是针对产品建立测试用例库。不要说case没有用什么的,或者写起来很乏味之类的,对于原来的公司或者说很多公司都是这样的,产品不是release一个版本就finish了,而是会不断的有升级,不断的要维护,所以建议测试用例库是不要的,一旦有了用例库,这样以后涉及到的版本的升级测试就显的容易,case主要针对新功能就可以,版本发布后执行之前的case进行回归测试就可以。相反如果没有,自己都不清楚该测什么,不清楚哪里没有测,是件可怕的事情。都说不能被一块石头绊倒两次,如果有了用例库,那么平时出现的一些刁钻的条件下产生的问题都被记录在案,下一个版本,或者下一个产品就不会被同类的bug造成经济上的损失。所以说测试用例不仅是保证测试覆盖率的很好的工具而且也是个知识积累的过程。此为一,测试用例一定要有。

    第二点呢,有了测试用例还不够,要对测试用例进行分级。一些case是保证基本功能的,在验收测试(acceptance test)时执行的,一些case是基本功能的扩展的,一些是用户很少用到的,但是如果出错也会影响公司的形象的。有了这样的分级就可以确定什么时候用哪些case。如果项目的时间很紧张,也可以选出基本的case执行。保证基本的功能。现在做得项目就是这样的,case分了4个级别,在验收测试的时候只要跑0,1级别的就可以。

    第三点,case可以有不同的版本,这个就是针对产品的升级。产品升级case当然也要跟着升级。

    第四点,不要care太多case的管理工具,都可以。excel有时候就可以,不要在测试管理工具的选择上面花太多的时间。

    第五,在具体case的编写上面,可以利用黑盒测试用例编写方法进行编写,只要参考对象是Spec。保证测试的覆盖率。case可以写的简单些,只要执行的人明白即可。现在公司的那些case有时候就是一句话。当然这个一句话是有上下case的背景的。也可以一个case包含很多的具体的小case。

    暂时想到这么多,希望看过这篇文章的可以提供更多的内容。我一会不断更新。

  • 为了忘却的纪念

    2009-05-15 16:29:52

    一、黑盒测试的测试用例设计方法
    1. 等价类划分方法
    2. 边界值分析方法
    3. 错误推测方法
    4. 因果图方法
    5. 判定表驱动分析方法
    6. 正交实验设计方法
    7. 功能图分析方法
    二、等价类划分
    等价类划分方法是把所有可能的输入数据,即程序的输入域划分成若干部分(子集),然后从每一个子集中选取少数具有代表性的数据作为测试用例。该方法是一种重要的、常用的黑盒测试用例设计方法。
    1. 等价类的概念
    等价类:等价类是指某个输入域的子集合。在该子集合中,各个输入数据对于揭露程序中的错误都是等效的。并合理地假定,测试某等价类的代表值就等于对这一类其它值的测试。因此,可以把全部输入数据合理划分为若干等价类,在每一个等价类中取一个数据作为测试的输入条件,就可以用少量代表性的测试数据。取得较好的测试结果。等价类划分可有两种不同的情况:有效等价类和无效等价类。
    有效等价类:是指对于程序的规格说明来说是合理的,有意义的输入数据构成的集合。利用有效等价类可检验程序是否实现了规格说明中所规定的功能和性能。
    无效等价类:与有效等价类的定义恰巧相反。
    设计测试用例时,要同时考虑这两种等价类。因为,软件不仅要能接收合理的数据,也要能经受意外的考验。这样的测试才能确保软件具有更高的可靠性。
    2. 划分等价类的方法
    下面给出六条确定等价类的原则:
    1) 在输入条件规定了取值范围或值的个数的情况下,则可以确立一个有效等价类和两个无效等价类。
    2) 在输入条件规定了输入值的集合或者规定了“必须如何”的条件的情况下,可确立一个有效等价类和一个无效等价类。
    3) 在输入条件是一个布尔量的情况下,可确定一个有效等价类和一个无效等价类。
    4) 在规定了输入数据的一组值(假定n个),并且程序要对每一个输入值分别处理的情况下,可确立n个有效等价类和一个无效等价类。
    5) 在规定了输入数据必须遵守的规则的情况下,可确立一个有效等价类(符合规则)和若干个无效等价类(从不同角度违反规则)。
    6) 在确知已划分的等价类中各元素在程序处理中的方式不同的情况下,则应再将该等价类进一步的划分为更小的等价类。
    3. 设计测试用例
    在确立了等价类后,可建立等价类表,列出所有划分出的等价类:
    输入条件 有效等价类 无效等价类
    。。。。。。。。。
    。。。。。。。。。
    然后从划分出的等价类中按以下三个原则设计测试用例:
    1) 为每一个等价类规定一个唯一的编号。
    2) 设计一个新的测试用例,使其尽可能多地覆盖尚未被覆盖地有效等价类,重复这一步。直到所有的有效等价类都被覆盖为止。
    3) 设计一个新的测试用例,使其仅覆盖一个尚未被覆盖的无效等价类,重复这一步。直到所有的无效等价类都被覆盖为止。
    三、边界值分析法
    边界值分析方法是对等价类划分方法的补充。
    边界值分析方法的考虑:
    长期的测试工作经验告诉我们,大量的错误是发生在输入或输出范围的边界上,而不是发生在输入输出范围的内部。因此针对各种边界情况设计测试用例,可以查出更多的错误。
    使用边界值分析方法设计测试用例,首先应确定边界情况。通常输入和输出等价类的边界,就是应着重测试的边界情况。应当选取正好等于,刚刚大于或刚刚小于边界的值作为测试数据,而不是选取等价类中的典型值或任意值作为测试数据。
    基于边界值分析方法选择测试用例的原则:
    1) 如果输入条件规定了值的范围,则应取刚达到这个范围的边界的值,以及刚刚超越这个范围边界的值作为测试输入数据。
    2) 如果输入条件规定了值的个数,则用最大个数,最小个数,比最小个数少一,比最大个数多一的数作为测试数据。
    3) 根据规格说明的每个输出条件,使用前面的原则1)。
    4) 根据规格说明的每个输出条件,应用前面的原则2)。
    5) 如果程序的规格说明给出的输入域或输出域是有序集合,则应选取集合的第一个元素和最后一个元素作为测试用例。
    6) 如果程序中使用了一个内部数据结构,则应当选择这个内部数据结构的边界上的值作为测试用例。
    7) 分析规格说明,找出其它可能的边界条件。
    四、错误推测法
    错误推测法:基于经验和直觉推测程序中所有可能存在的各种错误,从而有针对性的设计测试用例的方法。
    错误推测方法的基本思想:列举出程序中所有可能有的错误和容易发生错误的特殊情况,根据他们选择测试用例。例如,在单元测试时曾列出的许多在模块中常见的错误。以前产品测试中曾经发现的错误等,这些就是经验的总结。还有,输入数据和输出数据为0的情况。输入表格为空格或输入表格只有一行。这些都是容易发生错误的情况。可选择这些情况下的例子作为测试用例。
    五、因果图方法
    前面介绍的等价类划分方法和边界值分析方法,都是着重考虑输入条件,但未考虑输入条件之间的联系,相互组合等。考虑输入条件之间的相互组合,可能会产生一些新的情况。但要检查输入条件的组合不是一件容易的事情,即使把所有输入条件划分成等价类,他们之间的组合情况也相当多。因此必须考虑采用一种适合于描述对于多种条件的组合,相应产生多个动作的形式来考虑设计测试用例。这就需要利用因果图(逻辑模型)。
    因果图方法最终生成的就是判定表。它适合于检查程序输入条件的各种组合情况。
    利用因果图生成测试用例的基本步骤:
    1) 分析软件规格说明描述中,那些是原因(即输入条件或输入条件的等价类),那些是结果(即输出条件),并给每个原因和结果赋予一个标识符。
    2) 分析软件规格说明描述中的语义。找出原因与结果之间,原因与原因之间对应的关系。根据这些关系,画出因果图。
    3) 由于语法或环境限制,有些原因与原因之间,原因与结果之间的组合情况不不可能出现。为表明这些特殊情况,在因果图上用一些记号表明约束或限制条件。
    4) 把因果图转换为判定表。
    5) 把判定表的每一列拿出来作为依据,设计测试用例。
    从因果图生成的测试用例(局部,组合关系下的)包括了所有输入数据的取TRUE与取FALSE的情况,构成的测试用例数目达到最少,且测试用例数目随输入数据数目的增加而线性地增加。
    六、判定表驱动分析方法
    前面因果图方法中已经用到了判定表。判定表(Decision Table)是分析和表达多逻辑条件下执行不同操作的情况下的工具。在程序设计发展的初期,判定表就已被当作编写程序的辅助工具了。由于它可以把复杂的逻辑关系和多种条件组合的情况表达得既具体又明确。
    判定表通常由四个部分组成。
    条件桩(Condition Stub):列出了问题得所有条件。通常认为列出得条件的次序无关紧要。
    动作桩(Action Stub):列出了问题规定可能采取的操作。这些操作的排列顺序没有约束。
    条件项(Condition Entry):列出针对它左列条件的取值。在所有可能情况下的真假值。
    动作项(Action Entry):列出在条件项的各种取值情况下应该采取的动作。
    规则:任何一个条件组合的特定取值及其相应要执行的操作。在判定表中贯穿条件项和动作项的一列就是一条规则。显然,判定表中列出多少组条件取值,也就有多少条规则,既条件项和动作项有多少列。
    判定表的建立步骤(根据软件规格说明):
    1) 确定规则的个数。假如有n个条件,每个条件有两个取值(0,1),故有n2种规则。
    2) 列出所有的条件桩和动作桩。
    3) 填入条件项。
    4) 填入动作项。等到初始判定表。
    5) 简化。合并相似规则(相同动作)。
    适合使用判定表设计测试用例的条件:
    1) 规格说明以判定表形式给出,或很容易转换成判定表。
    2) 条件的排列顺序不会也不影响执行哪些操作。
    3) 规则的排列顺序不会也不影响执行哪些操作。
    4) 每当某一规则的条件已经满足,并确定要执行的操作后,不必检验别的规则。
    5) 如果某一规则得到满足要执行多个操作,这些操作的执行顺序无关紧要。

  • Proxy

    2009-03-27 11:00:36

    英文原义:Proxy
      中文释义:代理
      注解:防火墙的一类。工作在应用层,特点是两次连接(browser与proxy之间,proxy与web server之间)。
      代理服务器(Proxy Server)的功能:将远程之前所存取过的档案、网页数据,在近端的proxy内复制一份备份,若联机设定有指定proxy的话,则当每次在连结到网页时,都会先检查之前是否有其它人上过同样的网站,有的话就可以直接传回数据,不必连接到外面。
      代理服务器的作用:⒈提高访问速度;
      ⒉可起到防火墙的作用;
      ⒊访问一些不能直接访问的网站;
      ⒋安全性得到提高.

    代理服务器的作用   代理服务器英文全称是ProxyServer,其功能就是代理网络用户去取得网络信息。形象的说:它是网络信息的中转站。在一般情况下,我们使用网络浏览器直接去连接其他Internet站点取得网络信息时,是直接联系到目的站点服务器,然后由目的站点服务器把信息传送回来。代理服务器是介于浏览器和Web服务器之间的另一台服务器,有了它之后,浏览器不是直接到Web服务器去取回网页而是向代理服务器发出请求,信号会先送到代理服务器,由代理服务器来取回浏览器所需要的信息并传送给你的浏览器。

      大部分代理服务器都具有缓冲的功能,就好像一个大的Cache,它有很大的存储空间,它不断将新取得的数据储存到它本机的存储器上,如果浏览器所请求的数据在它本机的存储器上已经存在而且是最新的,那么它就不重新从Web服务器取数据,而直接将存储器上的数据传送给用户的浏览器,这样就能显著提高浏览速度和效率。

      更重要的是:代理服务器是 Internet链路级网关所提供的一种重要的安全功能,它的工作主要在开放系统互联 (OSI) 模型的对话层,从而起到防火墙的作用。

      鉴于上述原因,代理服务器大多被用来连接INTERNET(国际互联网)和INTRANET(局域网)。在国内,所谓中国多媒体公众信息网和教育网都是独立的大型国家级局域网,是与国际互联网隔绝的。出于各种需要,某些集团或个人在两网之间开设了代理服务器,如果我们知道这些代理服务器的地址,就可以利用它到达网外网,例如从169到达163。代理服务器就象是连接两岸的桥梁,但是169与163之间的代理服务器一般的都被设置了访问密码,或者要收代理费用,阿Z搜索并提供的是完全免费的代理服务器地址,完全没有任何限制,不需缴交任何额外费用!

      ■ 为何要开设代理服务器?

      1、连接Internet与Intranet充当firewall(防火墙):因为所有内部网的用户通过代理服务器访问外界时,只映射为一个IP地址,所以外界不能直接访问到内部网;同时可以设置IP地址过滤,限制内部网对外部的访问权限;另外,两个没有互联的内部网,也可以通过第三方的代理服务器进行互联来交换信息。

      2、节省IP开销:如前面所讲,所有用户对外只占用一个IP,所以不必租用过多的IP地址,降低网络的维护成本。这样,局域局内没有与外网相连的众多机器就可以通过内网的一台代理服务器连接到外网,大大减少费用。当然也有它不利的一面,如许多网络黑客通过这种方法隐藏自己的真实IP地址,而逃过监视。

      3、提高访问速度:本身带宽较小,通过带宽较大的proxy与目标主机连接。而且通常代理服务器都设置一个较大的硬盘缓冲区(可能高达几个GB或更大),当有外界的信息通过时,同时也将其保存到缓冲区中,当其他用户再访问相同的信息时,则直接由缓冲区中取出信息,传给用户,从而达到提高访问速度的目的。 使用代理服务器有那些好处?

      在我国,上网分为163和169两种。169用户又分为三类(全国各地分类口径可能不同),一类用户拥有网外权,可以直接享受国际互联网的所有服务;另一类为注册用户,使用注册的帐号上网,第三类称为GUEST用户,使用公用的账号上网,采取主叫记费制。无网外权用户的收费低廉,但只能与中国多媒体信息网中的(IP地址以10开头)的网站连接。所谓\"畅游网络世界\"只不过是句空话!您是否也经历过这样的痛苦:由于钞票所限,每天只能徘徊在169上,仰头望着163中一堆堆的国际互联网信息、资源和免费大餐,口水直流……哎!

      现在好了,有了代理服务器,我们大家就可以任意出国,用169的低廉代价得到163中的服务了!正如前面讲到的,如果我们知道这些代理服务器的地址,就可以利用它到达网外网,从169到达163。阿Z搜索并提供的是完全免费的代理服务器地址,完全没有任何限制,不需缴交任何额外费用!INTERNET上的免费电子信箱、主页空间、ICQ、FTP、各种信息资源……统统敞着来吧!你仍然只需支付169的低廉上网费用!另外,由于目的服务器只能查出你所使用的代理服务器的IP,所以还有一些不言而喻的好处,例如在聊天室不容易轻易被人踢出去了!使用代理的上网速度怎样?

      代理服务器实际上是一个网络上的高速缓存,它接受终端申请后先对网络服务器提出要求并接受传送来的文件,然后再发送到终端。当信息第一次经过这样一个中转站时,速度可能或多或少的打了点折扣。

      但是代理服务器本身相当于一个高速缓存,如果您要浏览的网页不久前有人浏览过,而且代理服务器上保存的时最新的纪录的话,代理服务器就不用再到主机上申请数据,而是直接把网页发送给您,这样的话速度又会比较直接联上目的服务器快很多!特别是代理服务器本身有高速出口、而服务器档次又很高的话,对速度的影响几乎可以忽略不记!经过测试,好的代理从发出申请到接收到文件的时间不到10毫秒,一般的也只有0.5-1秒,而且速率可以达到5-6K。从实际操作中,几乎区别不出使用代理和直接用163的差别,某些地区还会出现169+代理服务器要快于163的现象!

      当然,如果代理服务器不行的话,可能等上几分钟一个页面还不能完全显示出来,您不得不关掉浏览器的多媒体和其他功能,面对一个枯燥的网络世界!本站的目的就是尽可能的为您提供更快更好的代理服务器,经常来看看,保证您大有收获!

      ■ 使用代理服务器合法吗?

      代理服务器除了网络服务商为了各种目的而开设外,大部分是新建网络服务器设置的疏漏!虽然法律尚无具体规定,但没有经过允许而使用他人的服务器当然还是不太好!虽然目的主机一般只能得到您使用的代理服务器IP,似乎有效的遮掩了你的行程,但是值得一提的是:网络服务商开通的专业级代理服务器一般都有路由和流程记录,因此可以轻易的通过调用历史纪录来查清使用代理服务器地址的来路。

      当然,利用多层代理会增加被捕获的难度,但也不是不可能的。去年报上就有报道有人使用代理服务器进攻\"天府热线\",进行非法活动而被抓的消息。因此,建议菜鸟级的黑客们不要利用代理服务器来进行特别行动!只要你不使用代理进行非法活动,一般是没有关系的。

      ■ 搜索代理服务器

      代理服务器的存在一般是不公开的,特别是中国公众多媒体信息网(169)上的更是在地下活动!要得到代理服务器一般有如下的途径:代理服务器的管理员公开或秘密传播;网友在聊天室或BBS热情提供;自己搜索;从专门提供代理服务器地址的站点获得。

      搜索代理服务器域要专门的软件,比如:NewProxy、ProxyVer等。搜索的原理很简单:向IP地址发送请求信息,如果服务器能够传回正确的反馈,则证明该服务器是可用的。

      当然,搜索代理服务器并不简单。您有可能在花费了数个小时的搜索后,仍然得不到一个可用的代理服务器!白白花费了时间和金钱。本站就是为了解决您的这个烦恼,从此您不必再白白浪费精力、时间和金钱,只要经常到本站一游,保证您总有新的收获!

      ■ 使用代理服务器要交费吗?

      代理服务器一般有收费和免费两种。收费的大部分是ISP开设的,我们就不管他了。阿Z提供的都是免费代理服务器,这意味着您除了正常的169使用费之外,不必付出任何其它费用,这正是169代理服务器的魅力之所在!提醒各位的是:您必须非常清楚您所在地的网络服务和收费情况。中国电信各地169提供的服务各不相同,使用代理服务器能够节省费用的前提是您所在地电信提供的169服务收费要比163低。否则,您就没有必要使用代理服务器上网了!

      ■ 挑挑拣拣选个好代理

      对大家来说,选择一个好的代理,可以提高上网速度、访问一些原本访问不了或是访问速度极慢的网站。不过,有的网友使用诸如ProxyHunter、PortScanner之类的代理搜索软件,经常是损人不利己:它们不但会加重你的ISP的负担,而且影响其他用户的上网速度。下面,将自己选择代理服务器的经验介绍给大家,以期达到交流经验的目的

      位于网络中客户机软件(如 Web 浏览器)与另一台服务器之间的服务器。该服务器侦听所有对服务器请求以确定其自身是否可以完成这些请求。如果不能完成,就将请求转发给另一台服务器。

  • several concept in c#

    2009-03-17 14:41:36

    program,types,members,namespace,and assembly

    program is consist of source files

    source files could contain types(such as classes and interfaces)which may have some members such as property,methods,fields,and events.

    types can be orgnized under the namespaces.

    when the program is compiled it is in an assembly(such as .exe or .dll)

  • 外包的郁闷

    2009-03-13 12:04:21

    最郁闷的就像现在这样,“分配”下来的任务不知道是不是真的“分配”下来的。

    邮箱里面一封接一封的邮件都是有关这个新的功能测试的,隔天就会有新的版本发布,也会有测试的bug状态的发布,但是似乎跟我们没有什么关系。都是客户那边的开发和测试的讨论。而我们似乎还在那个cycle的外面。

    没有办法,confused?即使提出来也没有用的,leader也是confused的,所以,硬着头皮,测吧。这边前天开始测试,登录到那边的服务器去看event,隔天就受到邮件,问我是不是bounce了他们的服务什么的,问我登录到里面做什么,晕死,真的是验证了人家都不知道我们是那波的,根本就不知道还有我们这波测试的这折腾呢。

    真的是没有动力了,

    唉,选择逃避还是继续坚持?

     

     

     

  • 用c#实现对文件的读写操作

    2009-03-06 10:46:05

    1.新建一个txt文件,写人数据,读出文件中内容;

    static void Main(string[] args)

    {

         WriteToFile();

         ReadFromFile(@"c:MyTestFile.txt");

    }

    static void WriteToFile()

    {

         StreamWriter SW;

         SW = File.CreatText(@"c:MyTestFile.txt")

         SW.WriteLine("My happy Life");

         SW.WriteLine("This is the second line");

         SW.Close();

         Console.WriteLine("Have created file succesfully");

         Console.ReadLine();

    }

    static void ReadFromFile(string filename)

    {

         StreamReader SR;

         string S;

         SR = File.OpenText(filename);

         S = SR.ReadLine;

         while (S!= null)

        {

             Console.WriteLine(S);

             Console.ReadLine();

             S = SR.ReadLine();

         }

          SR.Close();

    }

     

  • VBScript 处理文件

    2009-03-05 18:23:41

     
     

    有两种主要的文件处理类型: 

    • 创建、添加或删除数据,以及读取文件 
    • 移动、复制和删除文件 

    创建文件

    创建空文本文件(有时被叫做“文本流”)有三种方法。

    第一种方法是用 CreateTextFile 方法。 下面的示例示范了在 VBScript 中如何用这种方法来创建文本文件:

    Dim fso, f1
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f1 = fso.CreateTextFile("c:\testfile.txt", True)

    要在 Visual Basic Scripting Edition 中用这种方法,则使用下面的代码:

    var fso, f1;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    f1 = fso.CreateTextFile("c:\\testfile.txt", true);

    创建文本文件的第二种方法是,使用 FileSystemObject 对象的 OpenTextFile 方法,并设置 ForWriting 标志。在 VBScript 中,代码就像下面的示例一样: 

    Dim fso, ts
    Const ForWriting = 2
    Set fso = CreateObject("Scripting. FileSystemObject")
    Set ts = fso.OpenTextFile("c:\test.txt", ForWriting, True)

    要在 Visual Basic Scripting Edition 中使用这种方法来创建文本文件,则使用下面的代码:

    var fso, ts;
    var ForWriting= 2;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    ts = fso.OpenTextFile("c:\\test.txt", ForWriting, true);

    创建文本文件的第三种方法是,使用 OpenAsTextStream 方法,并设置 ForWriting 标志。要使用这种方法,在 VBScript 中使用下面的代码:

    Dim fso, f1, ts
    Const ForWriting = 2
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CreateTextFile ("c:\test1.txt")
    Set f1 = fso.GetFile("c:\test1.txt")
    Set ts = f1.OpenAsTextStream(ForWriting, True)

    在 Visual Basic Scripting Edition 中,则使用下面示例中的代码:

    var fso, f1, ts;
    var ForWriting = 2;
    fso = new ActiveXObject("Scripting.FileSystemObject");
    fso.CreateTextFile ("c:\\test1.txt");
    f1 = fso.GetFile("c:\\test1.txt");
    ts = f1.OpenAsTextStream(ForWriting, true);

    添加数据到文件中

    一旦创建了文本文件,使用下面的三个步骤向文件添加数据:

    打开文本文件。 

    写入数据。 

    关闭文件。 

    要打开现有的文件,则使用 FileSystemObject 对象的 OpenTextFile 方法或 File 对象的 OpenAsTextStream 方法。

    要写数据到打开的文本文件,则根据下表所述任务使用 TextStream 对象的 Write、WriteLine 或 WriteBlankLines 方法。

    任务 方法
    向打开的文本文件写数据,不用后续一个新行字符。 Write
    向打开的文本文件写数据,后续一个新行字符。 WriteLine
    向打开的文本文件写一个或多个空白行。 WriteBlankLines

    要关闭一个打开的文件,则使用 TextStream 对象的 Close 方法。

    注意  新行字符包含一个或几个字符(取决于操作系统),以把光标移动到下一行的开始位置(回车/换行)。注意某些字符串末尾可能已经有这个非打印字符了。

    下面的 VBScript 例子示范了如何打开文件,和同时使用三种写方法来向文件添加数据,然后关闭文件:

    Sub CreateFile()
       Dim fso, tf
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set tf = fso.CreateTextFile("c:\testfile.txt", True)
       写一行,并且带有新行字符。
       tf.WriteLine("Testing 1, 2, 3.") 
       '向文件写三个新行字符。        
       tf.WriteBlankLines(3) 
       '写一行。
       tf.Write ("This is a test.") 
       tf.Close
    End Sub

    这个示例示范了在 Visual Basic Scripting Edition 中如何使用这三个方法:

    function CreateFile()
    {
       var fso, tf;
       fso = new ActiveXObject("Scripting.FileSystemObject");
       tf = fso.CreateTextFile("c:\\testfile.txt", true);
       // 写一行,并且带有新行字符。
       tf.WriteLine("Testing 1, 2, 3.") ;
       // 向文件写三个新行字符。  
       tf.WriteBlankLines(3) ;
       // 写一行。
       tf.Write ("This is a test.");
       tf.Close();
    }

    读取文件

    要从文本文件读取数据,则使用 TextStream 对象的 ReadReadLine 或 ReadAll 方法。下表描述了不同的任务应使用哪种方法。

    任务 方法
    从文件读取指定数量的字符。 Read
    读取一整行(一直到但不包括新行字符)。 ReadLine
    读取文本文件的整个内容。 ReadAll

    如果使用 Read 或 ReadLine 方法,并且想跳过数据的特殊部分,则使用 Skip 或 SkipLine 方法。read 方法的结果文本存在一个字符串中,该字符串可以显示在一个控件中,也可以用字符串函数(如 LeftRight 和 Mid)来分析,连接等等。

    下面的 VBScript 示例示范了如何打开文件,和如何写数据到文件中并从文件读取数据:

    Sub ReadFiles
       Dim fso, f1, ts, s
       Const ForReading = 1
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
       写一行。
       Response.Write "Writing file <br>"
       f1.WriteLine "Hello World"
       f1.WriteBlankLines(1)
       f1.Close
       读取文件的内容。
       Response.Write "Reading file <br>"
       Set ts = fso.OpenTextFile("c:\testfile.txt", ForReading)
       s = ts.ReadLine
       Response.Write "File contents = '" & s & "'"
       ts.Close
    End Sub

    下面的代码示范了在 Visual Basic Scripting Edition 中做同样的事:

    function ReadFiles()
    {
       var fso, f1, ts, s;
       var ForReading = 1;
       fso = new ActiveXObject("Scripting.FileSystemObject");
       f1 = fso.CreateTextFile("c:\\testfile.txt", true);
       // 写一行。
       Response.Write("Writing file <br>");
       f1.WriteLine("Hello World");
       f1.WriteBlankLines(1);
       f1.Close();
       // 读取文件的内容。
       Response.Write("Reading file <br>");
       ts = fso.OpenTextFile("c:\\testfile.txt", ForReading);
       s = ts.ReadLine();
       Response.Write("File contents = '" + s + "'");
       ts.Close();
    }

    移动、复制和删除文件

    FSO 对象模式各有两种方法移动、复制和删除文件,如下表所述。

    任务 方法
    移动文件 File.Move 或 FileSystemObject.MoveFile
    复制文件 File.Copy 或 FileSystemObject.CopyFile
    删除文件 File.Delete 或 FileSystemObject.DeleteFile

    下面的 VBScript 示例,在驱动器 C 的根目录中创建一个文本文件,向其中写一些信息,然后把它移动到 \tmp 目录中,并在 \temp 中做一个备份,最后把它们从两个目录中删掉。

    要运行下面的示例,需要先在驱动器 C 的根目录中创建 \tmp 和 \temp 目录:

    Sub ManipFiles
       Dim fso, f1, f2, s
       Set fso = CreateObject("Scripting.FileSystemObject")
       Set f1 = fso.CreateTextFile("c:\testfile.txt", True)
       Response.Write "Writing file <br>"
       '写一行。
       f1.Write ("This is a test.")
       '关闭文件。
       f1.Close
       Response.Write "Moving file to c:\tmp <br>"
       '获取 C 的根目录(C:\)中的文件的句柄。
       Set f2 = fso.GetFile("c:\testfile.txt")
       '把文件移动到 \tmp 目录。
       f2.Move ("c:\tmp\testfile.txt")
       Response.Write "Copying file to c:\temp <br>"
       '把文件复制到 \temp 目录。
       f2.Copy ("c:\temp\testfile.txt")
       Response.Write "Deleting files <br>"
       '获得文件当前位置的句柄。
       Set f2 = fso.GetFile("c:\tmp\testfile.txt")
       Set f3 = fso.GetFile("c:\temp\testfile.txt")
       '删除文件。
       f2.Delete
       f3.Delete
       Response.Write "All done!"
    End Sub

    下面的代码示范了在 Visual Basic Scripting Edition 中做同样的事:

    function ManipFiles()
    {
       var fso, f1, f2, s;
       fso = new ActiveXObject("Scripting.FileSystemObject");
       f1 = fso.CreateTextFile("c:\\testfile.txt", true);
       Response.Write("Writing file <br>");
       // 写一行。
       f1.Write("This is a test.");
       // 关闭文件。
       f1.Close();
       Response.Write("Moving file to c:\\tmp <br>");
       // 获取 C 的根目录(C:\)中的文件的句柄。
       f2 = fso.GetFile("c:\\testfile.txt");
       // 把文件移动到 \tmp 目录。
       f2.Move ("c:\\tmp\\testfile.txt");
       Response.Write("Copying file to c:\\temp <br>");
       // 把文件复制到 \temp 目录。
       f2.Copy ("c:\\temp\\testfile.txt");
       Response.Write("Deleting files <br>");
       // 获得文件当前位置的句柄。
       f2 = fso.GetFile("c:\\tmp\\testfile.txt");
       f3 = fso.GetFile("c:\\temp\\testfile.txt");
       // 删除文件。
       f2.Delete();
       f3.Delete();
       Response.Write("All done!");
    }
     

  • VBScript常用函数

    2009-02-19 10:59:45

    字符串函数

    Len函数

    1)返回字非常的长度

    2)Len(string|varname)

    3)Dim MyString

      MyString = Len("happy") '5

    4)LenB 返回字符串的字节数

    Left 函数

    1)返回指定数目的从字符串的左边算起的字符

    2)Left(string,length)

    3) Dim MyString,LeftString

       MyString = "VBSCript"

       LeftString = Left(Mystring,3)

    4)LeftB 返回字节数

    Right函数

    1)从字符串右边返回指定数目的字符

    2)Right(string,length)

    3) Dim AnyString,MyStr

       AnyString = "Hello World"

       MyStr = Right(AnyString,1) '返回“d”

       MyStr = Right(AnyString,6) 'return" World"

       MyStr = Right(AnyString,20) 'return"Hello World"

    4)RightB 返回字节数据

    Mid 函数

    1)返回从字符串string中start指定的起始位置处开始,截取Length个字符。如果省略或length超过文本的字符数,将返回字符串中从start到结尾的所有字符。

    2)Mid(string,start[,length])

    3)Dim MyString,FirstWord,LastWord,MidWords

      MyString = "Mid Function Demo"

      FirstWord = Mid(MyString,1,3) 'return"Mid"

      LastWord = Mid(Mystring,14,4) 'return"Demo"

      MidWord = Mid(Mystring,5) 'return"Function Demo"

    4)MidB

    InStr

    1)返回从start位置开始搜索某字符串(string2)在另一字符串(string1)中第一次出现的位置。

    2)InStr([start,]string1,string2 [,compare])

    3) compare = 0 二进制比较,=1 文本比较

    4)Dim SearchString, SearchChar, MyPos
    SearchString ="XXpXXpXXPXXP"   ' String to search in.
    SearchChar = "P"   ' Search for "P".
    MyPos = Instr(4, SearchString, SearchChar, 1)   ' A textual comparison starting
    at position 4. Returns 6.

    MyPos = Instr(1, SearchString, SearchChar, 0)   ' A binary comparison starting
    at position 1. Returns 9.   

    MyPos = Instr(SearchString, SearchChar)   ' Comparison is binary by default
    (last argument is omitted). Returns 9.

    MyPos = Instr(1, SearchString, "W")   ' A binary comparison starting
    at position 1. Returns 0 ("W" is not found).

  • ASP.NET的身份验证和授权

    2009-01-14 14:16:28

    ASP.NET提供了Windows 和Forms身份验证。
    对于web应用程序,常用的是Forms身份验证。
    模式: 安全控件--Membership API---成员提供程序(用于访问Access数据库,SQL Server数据库或Active Directory中的用户)还可以定制的提高城乡,来访问XML文件和其他定制存储器。
  • QTP和××对比

    2009-01-08 12:09:30

    考虑到公司保密的机制,我只能有××来代替了。
    **跟QTP相比太过复杂,用它做自动化的话跟开发没有什么区别了。
    首先是手工的建立对象库;对涉及到的所有网页进行定义,网页上的所有控件进行识别。(这个过程的组织和开发不亚于开发的工作了)。
    对象库建立起来后就是case的设计。如果到了这一步似乎就不是那么难了。不知道QTP的自动化脚本在实际应用中是基于什么的,××是基于手工case的,先有手工的case,然后根据手工case的step编写自动化执行的脚本。
    然后就是执行。利用一个工具,可以批量的执行case,并显示执行的结果。
    也许QTP最大的问题就是对象识别问题,但是它却没有这个问题。QTP有他的好处,容易上手。
    这些是我今天的理解。还要深入的了解具体的思路...

    1.*是代码级别的,然而QTP提供Ui界面,可以对工具本身进行操作。
    2.因为×是代码级别的所以灵活性很强,对于测试中出现的问题可以很好的去处理;
    3.×现在只是针对本公司的web应用就像测试。但是qtp就不同了,工具嘛,谁都可以用,也就是说将工具和测试的代码分离,然而×却没有分离。工具本身就是个solution。case也包含其中。
    4.×可以提供一种思路。其实这种思路和其他的测试工具都一样。识别对象,分离测试数据,执行动作,进行验证,测试结果分析等。
    5.×的具体思路,一个文件夹存储对象,就像qtp的对象库。这个对象库包含对象上的所有控件以及各个控件的“小动作”如click等。一个文件夹存储数据。然后就是具体的case。case可以想象为不同小动作的联合,以及动作过程总不同数据的输入。当然case中英包含具体的verify信息。

  • 09年总体计划

    2009-01-06 15:33:32

    1.       c#语言。了解公司的自动化测试框架,能用c#编写case。

    2.       web方面知识积累。学习自己创建一个网站。包括HTML.JAVAscrīpt和服务器端脚本语言等

    3.       工作上业务知识积累,或许这只是对公司的贡献,但是也可以开阔视野,积累软知识。

    4.       工作上相关技术知识的了解,例如各种开发平台等等

    5.       锻炼自己的管理能力,把小店管理的井井有条。(包含的东西太多。)

    6.       QTP测试工具研究,对比现在公司的自动化测试框架优缺点对比。

    7.       英语。--Not nervous when talking to a foreigner.

     

     

  • 我的2009...

    2009-01-06 14:56:27

    不知道自己的09年如何度过。

     

    毕业两年半,似乎一直在释放着压力。从可以不顾一切的大睡,到工作上的不思进取。

     

    然而现在,应该是醒悟的时候,用2年半的时间来放松,来弥补也可以了,接下来的就是继续的奋斗和努力,取得工作上的进步,和自己知识的不断积累。应该还记得那个面试官的表情吧,现在想想也是有原因的。自己那是的确懂得太少。大学学的用别人的话就是,又还回去了。然而工作上接触的又是对一个机械的使用。自己似乎也醒悟过,但似乎是为了下一个面试。一个不成功的面试让我来到现在的公司。然而面对那么的好的机会自己还是没有能力把握住。有时常常自己骗自己,人家要研究生啊;公司离现在住的地方太远啊。其实真正的原因只有自己知道。没有出色的表现,没有以知识为基础的自信。

     

    我自认醒悟的时间到了,(自己似乎永远是一个后知后觉的人)。

     

    最大的弱点就是做事没有计划。早就意识到了,但是似乎从没认真的想过去克服。

     

    09年伊始,给自己一个计划,等到09年年底的时候,让自己可以面对自己的计划。

  • QQ面试归来

    2008-05-07 19:36:51

       已经通过了3轮了,不知道接下来的结果怎么样,这种等待的感觉很难受,因为面试的时候感觉还不错,觉得肯定没有问题,但是就是等不到再去复试的通知,这种感觉真的很煎熬,不知道是不是自己钻牛角尖了,好像非它不去的感觉。

       听说他们的测试做得也不是很好,而且真正的牛人也没有几个...但是自己这是怎么了呢?

      

     

  • loadrunner学习体会 4

    2008-03-28 23:04:32

    今天只能用半天的时间来学习lr。

    不过还是很有收获的,apache配置成功,可以用lr的监控器来监控了 ,其实自己似乎走了点弯路,安装网上查询到的方法就可以了,只是自己没有明白加载模块的意思,现在总算明白了,呵呵,加载模块,就是要去掉两个地方的#就可以了,也就是说加载moudle-status模块,就是loadmoudle和addmoudle这个模块就可以,然后去掉“extrastatus on”前面的#就可以了,因为默认是关闭的状态。

    搞定了这个,可以进行测试bugfree系统了,现在就剩下最后的分析了,对于一些具体的性能目标自己还不是很理解。继续努力,fighting!!

  • loadrunner学习体会 3

    2008-03-27 21:19:08

    今天继续学习lr。

    具体是掌握了参数化的方法,还了解到监控器的设置方法,可以说在以前的学习上面更近了一层吧。具体用bugfree来做练习,参数化的时候要注意在脚步中进行全部的替换。

    现在遇到的问题是关于apache的监控问题,对于apache也是前一段时间才听说的名词,或许是以前自己的知识面太窄了吧,今天有了大概了了解,但是仍然不知道具体的设置方法,虽然网站上的一些帖子说明的添加的方法,但是试过之后还是不行,可能是bugfree的esayphp和普通的apache在初始设置的时候不同吧,所以明天在深入的学习一下apache的配置过程。估计问题可以解决。

    如果能够成果的配置,要练习分析一下测试结果。

  • 第一次

    2007-08-12 11:13:25

    以此来提高自己

    希望自己能有所收获

Open Toolbar