【工作经历:阿里巴巴搜索技术研发中心QA ,百度新产品测试部QA】 【领域:测试分析,自动化测试,性能测试,安全测试 】 【个人定位:高级测试工程师+培训师+领域产品专家】

发布新日志

  • linezing量子统计

    2010-04-27 23:17:25

    Bash Framework的统计可真是一波三折啊。

    本来使用google document的表单功能统计所有的访问记录。但是google document功能很快就被墙了。
    后来改用zoho,发现一直有限制,非常不爽。浪费了这么多的精力去研究如何使用shell提交代码了。
    采用了半个月,就达上限了。

    听说百度统计不错,一上网站,才发现只给收费用户免费使用。汗。。。
    最后辗转到了yahoo的量子统计上了。
    看来是免费的,貌似也没有什么限制。就写了一行代码开始使用linezing。

    linezing ()
    {
        curl 'http://img.tongji.linezing.com/你的ip/tongji.gif' -e "http://www.bash_framework.com/$*" &>/dev/null
    }


    通过附加特殊的refer头信息,让提交自己的个性化请求。
    在量子统计中,正巧也有页面的访问记录。使用起来,还是不错的。

    使用过程中发现,数据的更新比较慢,发请求上去需要等2分钟才可以出现。
    估计要么就是机器,数据库反应迟缓,要么就是采用了搜索引擎的设计,采用了增量更新方式解决的。所以才造成时间差。
    另外,深夜更新的数据,会发生丢失现象。唉。
    测试不到位。


    先凑活着用用吧。一直想找个稳定的地方,可以好好的记录下Bash Framework的成长史。
    可惜,一直未能如愿。

    参考网址
    http://tongji.linezing.com/report.html?unit_id=1654429


    分析图








    关于Bash Framework想说的。

    Bash Framework的目标是作为一门新语言,就像Rails on ruby, Groovy on java那样的语言。
    同时,它也是一套测试工具集,可以极大的提升个人的工作效率。
    同时,它也是一套团队协作的管理体制,就像svn那样,可以实现一定的协作。
    同时,它也可以体现一种标准,介入到工作相关的各个领域。

    目前一直在忙项目,也不急于推广应用。短期内,先计划在小组内进行推广。
    实现一定的应用。有价值是最重要的。








  • 开始转向Groovy与JRuby

    2010-04-17 17:51:15

    买了两本书。关于这方面的。

    使用ruby的过程中,发现ruby的类库太少了。很多功能用起来不爽,又没有精力去重写。很多地方需要依赖其他的三方库。公司里面的java开发需要一定的java方面的人,目前部门里面的人这方面有建树的人太少了。
    已经形成了一个技术瓶颈。
    自己已经从算法测试中脱离出来了。这方面的知识就不要想了。也没有精力去投入了。慢慢就被边缘化了。
    我要专注在自己的领域里了。


    1、测试技术方案提供。
    2、后台测试自动化设计与实现。
    3、评审后端设计,提供设计意见,测试范围评估。
    4、接口测试。
    5、性能测试

    c++方面,因为岗位关系,已经无法深入了。java还是大有可为的,开始计划转到java方面去研究。

    这方面的后续的计划

    1、java学习
    2、Groovy与JRuby调用java研究。
    3、使用Groovy或者JRuby进行Java方面的接口测试,单元测试。
    4、java代码级别的性能检测
    4、java代码级别的静态检测。







  • 系统级mock脚本

    2010-04-17 17:38:38

    图片空间上传满了。只上传一个图片。
     

    背景

    小组内存在测试数据构造困难的问题。前段的web测试,需要依赖后端平台进行测试。

    为了配合mock方法的推进,专门开发了mock工具。

    采用python+Bash技术。

     

    Mock工具已经开发完成。欢迎大家测试。

     

    用法介绍

    使用方法:


     

    执行mock命令

     

    此命令会在本机监听一个端口,默认的端口和被mock的服务端口是一样子的。可以手工指定端口,如果有冲突的话。

    会在当前目录中生成2个目录,bindataBin存放mock文件,用于解析。

    Dta存放查询的结果数据。还有一个mock.conf文件,保存mock的信息。

     

    mock  -url http://10.20.146.4:6146/bin/search?sample_en?q=  -port 8000

     

    url参数为你要mock的请求地址。去掉参数。

     

    此时,mock程序会进入一种学习状态。

     

     

    你可以在前段查询MP3,手机,之类的关键词。如果mock发现之前没有查询过这次关键词,没有这些query的保存结果,就自动去被mock的真正服务上去取数据。然后保存。

    如果发现之前查询过,就会取之前的查询结果。你可以在之前的查询结果中修改原来的输出。

     

     

    首先搭建好前段的web环境,然后修改sq,或者isearch的环境为mockip与端口。

     

    第一次查询mp3mp4mp5


    系统会自动保存对应的数据文件


     

    查询mp3的结果

     

     

    真实服务器的查询结果与mock程序的结果比对。是一样的。

     

     

     

    出于测试的需要,我去修改mp3的结果输出。直接去mockdata目录下修改q=mp3文件的内容

     


     

     

     

    然后再次查询MP3

     

     

     

     

     

    其他高级功能

     

    如果是下次想重新使用之前的数据进行mock。直接执行mock就可以了。它会读取默认的配置,启动先前的mock。不需要做初始化工作。

     

    Mock –url ‘http://10.20.146.4:6146/bin/search?sample_en?q=mp3’ #启动mock

    Mock –url ‘http://10.20.146.4:6146/bin/search?sample_en?q=mp3’ –port 8000 #设定端口

    Mock –url ‘http://10.20.146.4:6146/bin/search?sample_en?q=mp3’  -data  key.data #一次性读取key.data里面的所有关键词,然后自动去被mock服务上去查询,用于预先的学习。

     

     

    Mock百度搜索

     

     


     

     

     

    Mock google搜索,被google查出来了。看来google的确小心了很多。不过相信通过设置一定的header可以绕过这个限制。

     


     

     

     

     

     

     

    应用场景

    可以用于基于http协议的服务mockMock后台服务以及其他的接口。实现数据的干预与输出结果自定义。

    理论上经过扩展可以支持tcp协议级别的mock

    目前可应用于后端的接口测试中。

     


    完整的代码





    :<<mock_help
    Mock -url 'http://10.20.146.4:6146/bin/search?sample_en?q=mp3'
    Mock -url 'http://10.20.146.4:6146/bin/search?sample_en?q=mp3' -port 8000
    Mock -url 'http://10.20.146.4:6146/bin/search?sample_en?q=mp3' -data  key.data
    mock -url http://www.baidu.com/s?wd= -port 8000
    mock
    mock_help
    mock()
    {
        local port url  mock_ip mock_port data # service=SimpleHTTPServer
        seven_getopt "$@"   
        [[ -n $url ]] &&
        {
            #service=CGIHTTPServer
            mkdir bin data
            echo '#!/bin/bash
            echo "Content-type: text/html"
            echo
            if [ "$REQUEST_METHOD" = "POST" ]; then
                if [ "$CONTENT_LENGTH" -gt 0 ]; then
                    read -n $CONTENT_LENGTH POST_DATA <&0
                fi
            fi
            request_data="$QUERY_STRING$POST_DATA"       
            ' > bin/http.sh
            chmod +x bin/http.sh
            mock_ip=`echo "$url" |awk  -F'//' '{print $2}' |awk -F ':|/' '{print $1}'`
            mock_port=`echo "$url" |awk  -F'/' '{print $3}' |awk -F ':|/' '{if(NF==2) print $NF; else print "80";}'`
            [[ -z $port ]] && port=$mock_port
            bin_dir=`echo "$url" | awk -F '?' '{print $1}' |awk -F/ '{for(i=4;i<NF;i++) printf  $i"/"}'`
            bin_file=`echo "$url" | awk -F '?' '{print $1}' |awk -F/ '{print $NF}'`
            mkdir -p $bin_dir &>/dev/null
            echo -e '#!/bin/bash\n. bin/http.sh;data_file=data/${request_data}_data
                [[ -f $data_file ]] && cat $data_file && exit;
            . mock.conf;
            curl "http://$mock_ip:$mock_port$SCRIPT_NAME?$request_data" 2>/dev/null |tee data/${request_data}_data
            ' > $bin_dir$bin_file
            chmod +x $bin_dir$bin_file       
            echo -e "port=$port\nmock_port=$mock_port\nmock_ip=$mock_ip\nbin_dir=$bin_dir\nbin_file=$bin_file"  |tee mock.conf
        }
        [[ -n $data ]] &&
        {   
            while read line
            do
                curl "$url$line" 2>/dev/null  | tee data/${line}_data
                echo -e "$line===data/${line}_data" >> data/data.conf
            done < $data
        }   
        #python -m $service $port
        [[ -f mock.conf ]] && . mock.conf
        print "Start Listenning , Try visit http://`ip`:$port/$bin_dir$bin_file"
        echo -e "
        \rfrom CGIHTTPServer import CGIHTTPRequestHandler
        \rfrom BaseHTTPServer import HTTPServer
        \rclass Handler(CGIHTTPRequestHandler):
        \r\tcgi_directories = ['/cgi-bin','/bin','$bin_dir','$bin_dir$bin_file']
        \rserver_address=('',$port)
        \rhttpd = HTTPServer(server_address, Handler)
        \rhttpd.serve_forever()
        " |python


    }


  • 利用系统级别的mock进行测试

    2010-04-14 21:42:35

    以前部门在测试相关的产品的时候,经常会遇到数据构造的难题。
    比如A系统接受一个query,返回一个搜索结果。

    实际的后台实现是A把query,比如MP3这个请求发送到B系统。B系统进行一定的算法计算,把结果返回给A。
    A系统进过处理后再返回给客户。

    这样,当我们期望可以覆盖A系统的某个功能点,或者逻辑路径的时候,就不得不依赖于B系统的计算.
    而B系统的设计又非常的复杂,这样就导致了一个较大的瓶颈。
    在黑盒测试下,A无法轻易的通过自身的接口来测试自己的所有逻辑路径。因为B系统返回的结果,常常是未知的。每种返回结果,都会影响到B系统的返回。
    研究出从A到B,再到A这个数据流是非常棘手的事情。导致了A系统的测试经常受阻。

    不久前,我们那个天才级的主管提出了使用系统级别的mock来实现这种测试数据构造。就是直接构造一个mock系统。非常不错的想法。

    让我想起了以前瑞星杀毒软件的一个漏洞。当时瑞星通过网络去激活相应的认证过程。
    当时的瑞星,通过向瑞星的网站,发送一个包含特定header的http消息,服务端收到header中的数据,进行验证,然后再把验证结果返回给客户端。
    有人就想出来一个妙招,就是修改host,屏蔽了真正的瑞星网站。自己使用asp搭建一个站点,把瑞星网站域名重定向到自己的站点上。然后在asp脚本中,直接返回一个验证成功的消息给客户端。这样杀毒软件就通过验证了。
    当时读过那个文章后,感到作者果然是非常牛叉,太聪明了。
    然后,就有人开始利用这种对付很多的正版验证,我知道的不多。好像当初的著名木马pcshare,就是这样被破解的。
    很有创意。

    今天,我们又重新回到了这个话题上。
    我们如何构造一个假的服务,让A系统可以接收到所有的B系统的返回。从而可以覆盖大多数的逻辑路径。

    我想大家已经有所启发了吧。

    首先搭建一个http服务,然后自己写个同名的请求文件,可以是静态的,也可以是动态的。从而可以自由的定义输出。
    以百度为例吧。

    搜索
    http://www.baidu.com/s?wd=阿里巴巴

    我们假设,百度的首页,其实是个web展示系统,这个展示系统会调用百度后台的搜索引擎。
    如果想测试这个web展示系统的话,搭建一个搜素引擎是ok的,但是我需要的数据,可能不一定能很好的得到。
    比如有的时候,我想看看在百度搜索后,如果前N个字符内,有英文,或者特殊符号的时候,百度的摘要信息,是不是会超过2行的摘要。
    去查找是不可能的,因为索引中可能没有这种类型的。但是不排除以后没有。去构造的代价又很大。需要修改数据源,然后经过一些列的“长途跋涉”,才能到前段。
    又或者,百度的搜索引擎要进行升级,要增加一种新的输出格式,需要看看web端能不能兼容。在后台引擎没有完成研发任务前,前段即使开发完成,但是却一直会被block。导致测试不容易。

    而通过系统级别的mock则可以轻易的解决这类的事情。


    假如搜索阿里巴巴
    实际query是http://www.baidu.com/s?wd=阿里巴巴
    发送到百度的后台搜索引擎可能会变为  http://www.baidu.com/bin/search?query=阿里巴巴

    那么我可以自己搭建一个http的服务器,然后在bin目录下,创建一个search文件。此文件可以自己定义。
    这样。当web系统把后台引擎指向这个mock系统的时候,他就可以自定义返回内容了。
    就可以轻松的控制返回给web系统的数据了。
    这样很多测试就可以进展了。不必要非要等到后台搞定的时候才能进行前端的测试。



    具体的执行

    搭建http服务器。python -m CGIHTTPServer 80。很简单吧。
    然后创建特定的路径即可。比如百度的。那就是bin/search这个文件。
    我就可以轻易的在这个文件里面构造数据了。可以纯文本的,
    也可以是根据query进行动态变化的。这是完全可以自定义的。


    我以简单的mock百度的前端为例。

    1、在hosts文件中添加
    10.20.137.22  www.baidu.com
    2、在特定的主机上,启动python -m CGIHTTPServer 80。 linux上需要使用sudo。创建s文件。可以是个文本,也可以是cgi脚本。都是可以的。也可以使用wget直接下载特定的网页。比如wget 'http://www.baidu.com/s?wd=阿里巴巴',然后重命名为s。
    3、修改s文件,简单修改下。
    4、访问 http://www.baidu.com/s?wd=baidu。
    修改前与修改后的结果对比。

    通过这样的原理,其实我们是可以模拟很多其他依赖的对象的,最终通过分离各个模块,实现更好的操纵数据的构造。从而覆盖更多的逻辑。









  • 六小时

    2010-04-07 06:21:06


    10:00到12:00  本来是与另一个小组的讨论会,会议室预定不到了,需要通知大家。
    12:30到1:30 主管关于Web Search以及Mock测试的培训。
    16:00到18:00 我预定了会议室,留作与另一个小组的讨论会,应该要买些小吃。

    任务:
    XX项目沟通,明确问题所在。并重新安排测试计划。
    XXX项目的测试总结报告。
    XXXX项目的测试计划发布,测试TC评审。项目有可能提测延期,需要和PM沟通。

    这本来是4月6号一天的全部任务。


    我在床上,盯着闹钟,看个秒针滴滴答答的转动着。
    想象着如果我不去,会发生什么事情。
    主管会找我,leader会找我,项目组成员会找我,测试同事会问我。
    回去了还会有不停的质问,不停的解释。
    也许当我再次回到工位的时候,我会看到一封被Fire的辞退信。

    从10点半到下午4点半。
    我还在床上,像个思考者一样,还呆呆的看着闹钟。
    继续听着闹钟滴滴答答的走动。

    项目,工作,同事,邮件,签名,信任,责任。
    很多事情,在脑海里一直不停的转。
    像故事一样,在自己脑海里不断的推演。
    想象着,如果这样,如果那样,结果会如何。。。。

    深夜12点赶到公司,看内网上的分享。看到一个只有标题的分享。
    名字叫做《当你感觉不舒服的时候,就是成长的时候》。
    成长无法像技术一样,可以通过努力速成,很多事情,要经历。
    比如人际关系,包容误解,管理方式,做事方式等。













  • 东京爱情故事

    2010-04-06 06:03:18

    终于看完了《东京爱情故事》,被感动的眼泪哗哗的。
    自己的性格倒和莉香很像。
    莉香虽然活泼开朗,而实际上,内心是个悲观的人。
    即使知道前途会如何,她仍然会开朗的去过每一天。
    这点让自己很惭愧。
    还有她对丸子无保留的爱。让人很是动容。

    莉香一个人在爱媛寻找丸子曾经的足迹的时候,那种情景让人感到好心痛。
    我一直在想,莉香找到刻着永尾完治的那个柱子时,会是什么样的感觉。
    当她在旁边刻上自己名字的时候,能不能承受那种压抑在心底的痛楚。

    这个世界上,像莉香一样的女孩太少了。












  • 报名去青川啦

    2010-04-01 22:50:13


    姓名:xxx
    工号:xxxx
    手机:xxxxxxxxx
    部门:b2b-QA部门
    特长:没有。想把希望与信心带给他们。
    参与批次:第二批


    自己是个双面性格的人。朋友在的时候,开朗,任性,放肆。经常鬼主意很多。
    一个人的时候,孤僻,寡言少语,常常有偏激的想法。
    我是个处女座的人,感情常常是不稳定的。常常喜欢感情用事。
    我常常会忽略别人抛过来的橄榄枝,却无法忘怀在街头对乞丐的一次回眸。
    看到处于苦难中的人,常常可以激起自己很深的同情。
    仿佛,自己也曾经无家可归浪荡街头一样。
    经常做的一个梦,
    梦到自己在他乡流浪,无处归宿,在阴暗的角落里,只有流浪的猫狗是我的朋友。
    在阴暗的下水道里,体验着水声滴答滴答的安静。
    后来我结交了一个同样的人,我们成为形影不离的好朋友。
    无意义的流浪开始变成了开心的旅程。世界开始充满阳光。
    可是突然的某一天,那个人不见了,世界又重新回归了安静,剩下我孑然一身的发呆。
    然后自己醒了。

    一次又一次的做着类似的梦,这种梦让自己的思想在潜移默化,开始变得悲观,怀旧。
    仿佛自己的一生,就是要不停的去寻找一个人,寻找一种朋友,或者一种感情的依托。
    还有另外一个梦,也是我这些年一直无法忘掉的。
    在那个梦里,我变成了一只白狐,在雪山里我一直守护着一棵梅树。为梅花的绽放开心,为梅花的凋零而痛楚。
    当最后一朵梅花被风吹落,飘进溪水里时,自己终于忍不住失落,也纵身跳入溪水。

    后来看了法国导演吕克贝松执导的《大海深蓝》,英文名《Big Blue》这部电影,自己被影片深深触动了。
    自己看了很多遍,眼泪也流过了很多次。知道了世界上的确会有特殊的一种人。拥有着特殊的感情。

    这个世界,会有一些人,爱护别人多于关心自己。会从别人的开心中获得安慰。
    会有一些人希望社会可以更美好,会有一种人能够给陷于困难中的人一份帮助。

    以前很窘困,一直在蛰伏,一直也浑浑噩噩。现在自己已经有所改善了,应该去做些事情,为那些还处于苦难中的人,提供自己的一点微薄之力。给他们带去希望,带去一种信心与精神。
    看到那些善良的人们开心,自己总会感到很满足。
    自己的一生,要给身边的人带来希望,幸福。
    活者,不要只为了自己。否则自己的一生,无法原谅。










  • 更好的安排工作

    2010-03-31 23:57:11

    最近在做很多吃力不讨好的事情。
    为了不耽误项目,很多项目我都勉强接下来了。结果因为项目中出现了一些问题。比如发现了新的bug,测试环境不够用,提测版本有问题等,出现了一些延误。
    导致最近任务很重。

    为了避免以后的悲剧出现。制定如下原则。

    1、未提前通知我的项目,一律不测。防止干扰现有的工作安排。
    2、细化工作安排。把测试的各个过程时间,明确好,并切实执行。
    3、安排好任务优先级。项目优先,个人推进事项优先,会议优先,然后是技术类的规划。
    4、学会拒绝。杂事可以不用care,比如电话面试,安排会议室等。
    5、保持项目之间的buffer。不做勉强的事情。坚决走流程。
    6、不能被研发或者PD赶进度胁迫。
    7、提测项目中一旦发现了新的问题,及时抛给其他人去解决。严重级别的,把版本打回。
    8、把工作那排给其他人。学会授权。脱离不重要的事情。去做更有价值的事情。



  • hadoop单机版环境搭建

    2010-03-30 23:58:47

    项目中需要用到了hadoop,原有的hadoop环境因为其他原因,有些冲突。自己就重新搭建了一套。
    也为了以后自己可以更方便的测试。

    1、下载hadoop。这个在我之前的函数库中已经封装好了地址。直接hadoop_download 即可。

    hadoop_download ()
    {
        rsa `hostname -a`;
        wget 'http://labs.xiaonei.com/apache-mirror/hadoop/core/hadoop-0.18.3/hadoop-0.18.3.tar.gz' 'http://cds.sun.com/is-bin/INTERSHOP.enfinity/WFS/CDS-CDS_Developer-Site/en_US/-/
    USD/VerifyItem-Start/jdk-6u14-linux-x64.bin?BundledLineItemUUID=Ev1IBe.p.mYAAAEilUYHlhw5&OrderID=AvVIBe.p208AAAEigkYHlhw5&ProductID=tPxIBe.oz2IAAAEhmh0zLjfT&FileName=/jdk-6u14-l
    inux-x64.bin';
        tar zxvf hadoop-0.18.3.tar.gz;
        cd hadoop-0.18.3;
        [[ -z $JAVA_HOME ]] && print please set JAVA_HOME
    }


    2、设置单机版的配置。在conf/hadoop-site.xml中,添加如下的配置


    <configuration>

    <property>

        <name>fs.default.name</name>

        <value>hdfs://localhost:9000</value>

      </property>

      <property>

        <name>mapred.job.tracker</name>

        <value>hdfs://localhost:9001</value>

      </property>

      <property>

        <name>dfs.replication</name>

        <value>1</value>

      </property>

    </configuration>




    在conf/hadoop-env.sh中,添加export JAVA_HOME=jdk的路径。

    3、准备工作

    把本机打通认证。就是让自己登陆自己不需要密码提示。使用函数库中的rsa 本机ip   即可。
    格式化namenode
    bin/hadoop namenode –format

    4、启动
    bin/start-all.sh  即可。
    不过一般,可能会遇到一些奇怪的错误。比如


    INFO hdfs.DFSClient: org.apache.hadoop.ipc.RemoteException: java.io.IOException: File <filename> could only be replicated to 0 nodes, instead of 1

    当初遇到这种情况的时候,着实郁闷了一番。google无果。有人提出了方法,但是也不对。
    后来考虑了下,可能是本机有其他的hadoop环境也在运行,可能是公用的东西有冲突。一般是/tmp下的文件。

    我直接删除了/tmp下的相关文件,修改了所有的端口。然后重新格式化namenode。
    然后重新启动。

    结果OK。解决这个问题,是本次最大的收获。。




    4、多机版的配置
    触类旁通吧,修改相关的配置文件即可。做测试的话,单机版就OK.不够的话,就需要再conf/slave里面多添加几列ip吧。




    5、若干问题记录。
    hadoop的slave文件,是个鸡肋。系统读取相关的资源,是从hadoop-default.xml与hadoop-site.xml中读取的。配置好这两个文件是关键。
    master,与slave只不过是client端使用。
    启动后可以通过web界面去访问相关的信息,查看是否正常工作。
    访问50070即可。




  • 放飞自己

    2010-03-23 22:54:51

    上年的工作节奏很乱。很多人得出了一个结论。
    认为我没有能力去做时间安排。时间管理很差,分不清轻重缓急。
    不过自己一直不认同。呵呵。
    那是因为彼此心中看重的事情,是不一样的。

    我总会要求自己,想到就要去做到。从不会拖拉。
    在工作中,难免会遇到一些工作与技术的分歧。
    之前,我的确是太过于相信技术了。太相信技术可以解决问题了。
    然后就会受到各种各样的困难。常常陷于两难。
    傻傻的坚持,最终全都变成了不可理喻。

    以前总是会拼命工作,时间再紧,工作再忙,也会义无反顾的投入到技术研究,或者xx任务的推进上。
    现在学会了保留。技术也知道放下了。本职工作高于一切。

    小组N多事情,环境管理,流程推进,测试范围评估,领域测试规划,故障跟进,自动化等。
    我都压着了。安稳的忙着项目。果然轻松了很多。
    不是不想去做,而是感觉时机不成熟。
    忙工作,等时机。

    以前是宁愿多做,但是多劳无益。
    现在尝试着职业化些,时机不成熟,就不做。要么不做,要做就要做好。

    很久没有听歌了。把工作都放了放,留个一段时间给自己,听听歌。
    放松下。。。。
    很喜欢这个mv,蓝天白云,芳香青草。。。。。
    开始追求生活,部门里的一个猥琐的同事也谈恋爱了,感觉自己的压力好大哦。
    很孤单,不只是因为没有女朋友,连一起玩的朋友也没有。
    看着公司里众多的派系,活动,不知道何去何从。
    什么,才是真正的自己啊。

    找机会去旅游,放飞自己的心灵。做回开心的自己。

    Flash: 淡淡的歌
  • 职业化生存

    2010-03-21 23:39:43

    职业化。
    这三个字的痛苦,我想只能自己用痛去回忆了。
    这也是我现在的leader,之前劝我的三个字。

    拼命工作,带着感情去工作,凭激情去工作。
    信念的力量,让我在2009年做出了很多事情。
    对的,错的。还有很多让人难以理解的事情。

    上年,被各种事情所折磨,差一点不得不离开公司。
    经历了很多的是是非非,一切终于又平静下来了。
    失败也好,失望也好。庆幸我没有倒下。

    在工作的路上,感觉越来越孤独,走的越来越累。
    很多的事情,都不想做了。

    我有独特的优点,也有独特的缺点。
    我追求完美。我的选择只有两个,要么做最好,要么不做。
    我喜欢创新,也是因为我追去完美。我会发散出很多的思路,去实现自己的目标。
    我不能忍受停顿,所以我负责的事情,我都会一直去跟。
    我信奉专业,专注,专心。
    我也会很热心的去帮助其他的同事解决一些跟自己不相关的问题。

    但是工作的性质,决定了很多事情不能做。
    如果按照职业化的思路,很多很好的想法,很好的事情,本来做起来很容易,但是却不能去做。


    上一年,是我自己任性。今年自己已经没有任性的权利了。
    重提很久都没有做的计划了。


    后续的大体方针

    1、本职工作优先。其他工作放一放。把本职工作做好。
    2、要事优先,次要事情放一放。
    3、业务优先,技术放一放。要做到专业。
    4、闭上眼,自扫门前雪,莫管别人瓦上霜。
    5、脱离一些虚职。被束缚,不如放弃。
    6、慢慢脱离工作,腾出精力去做其他的事情。
    7、开始和周围的人交往。开始正常的生活。
    8、乐观的生活。
    9、今年要去一次青川。


    技术leader,这是2年前,自己给自己定位的目标。
    现在发现,这个目标,自己还差很远,有一层的能力,自己还没有修炼到。
    我应该重新定位自己并规划自己的职业发展。Q1结束的时候,要完成对自己的重新定位。










  • Bash Framework更新计划2010

    2010-03-21 17:18:56

    看到了google release了几个安全类的工具了。
    这几个工具,用来做安全测试是很有用的。而且部门里已经有了安全测试的领域,这个方向可以加入到函数库中。

    最近很忙,所以把计划列一下。


    1、bash framework帮助文档整理。很多人对这个有误解,都以为只是一个bash的函数库,其实它所代表的工作模式,其他人理解的都很长。
    2、之前写的函数,功能太炫了。导致了移植不方便。所以在逐步的梳理。
    3、性能测试函数库,配置管理函数库,c++代码测试函数库,搜索引擎函数库,安全测试函数库的整理与数理。


    上述工作,可能要一个月之后才能完成了。最近争取从繁忙的工作中脱离出来。
    如果上述工作完成,并且达到了我的满意程度,我会用邮件在公司里面推广。

    目前感觉还不太完善,工作又忙,所以一直delay着。
  • 平静工作

    2010-03-14 20:48:05

    好久没有写blog了。
    这一年,变动很大。触动也很大。
    现在工资涨了,终于超过了交女朋友的门槛。我终于可以有信心去找女朋友了。
    上年糟糕的心情,终于没有了。我还清了所有的债务。脱离了卡奴与月光族。

    听到涨工资的消息后,我的第一感觉是痛苦以及与一种失败感。我知道自己失败了,没有做好。
    而我的第一表现却是微笑与激动。我不想让主管看到我的失落。我不想辜负他的用心良苦。

    工资涨了,同时我也输掉了很多最珍贵的东西:包括信任。也包括了对自我的肯定。
    我上年所有的努力与付出,全都变成了只是为了钱。我成为了一个追着钱走的行尸走肉。

    以前喜欢主动,太过于强求,犯了很多的错误。
    过往的错误,开始变成一种不堪回首的伤疤。
    现在,冷静了。从张扬开始转向收缩,开始兢兢业业的去做好本职工作。
    激情没有了,看到了工作最本质的一面。

    感觉到了孤独,不是爱情的缺失,而是一种氛围的缺失。
    就像经历了好久的狂风暴雨,突然天晴了,我却不知该何去何从。

    工作,生活,人生,会是什么样子。
    什么才是幸福,什么才是圆满,我不知道。

    一切从新开始吧,我做错了很多事情,我接受这一切,承担这一切的后果。
    但是我不放弃。


    从09年的年末,到2010年的年初,这一段几近自我崩溃的时期里,感谢很多朋友没有放弃我。
    谢谢你们,欠了你们一份人情。我会找机会偿还的。










  • bash下使用百汇zohoAPI

    2010-03-13 15:49:39


    ZohoReport API:
    https://zohoreportsapi.wiki.zoho.com/Request-Format.html

    获取API Key与ticket:
    http://writer.zoho.com/public/help/zohoapi/fullpage#AccessingAPI


    1、zoho上申请一个自己的账户。
    2、在上面创建自己的数据库。
    3、创建自己的表,设计字段
    4、读zoho report的api。看看示例。
    5、在linux shell下,使用curl,构造请求,发送请求。我的请求格式。
    curl 'http://reports.zoho.com/api/username/seven/use?ZOHO_ACTION=ADDROW&ZOHO_OUTPUT_FORMAT=XML&ZOHO_ERROR_FORMAT=XML&ZOHO_API_KEY=yourkey&ticket=yourticket&ZOHO_API_VERSION=1.0' -d "&user=$USER@$HOSTNAME&svn=$QA_svn&version=$QA_version&action=$1"
    6、封装为函数
    zoho_report()
    {
    .....
    }
    7、以后就可以使用zoho_report在linux下发送数据了。
    8、效果


    9、后续可以使用zoho进行绘图分析。比如自动生成曲线图。
    bash framework每天的使用情况统计图
    https://reports.zoho.com/ZDBDataSheetView.cc?OBJID=141061000000008035&STANDALONE=true&privatelink=9430aba12f31e13efda74764bc511590&LP=RIGHT&ZDB_THEME_NAME=blue&REMTOOLBAR=true



    Bash Framework一直使用google的表单工具去统计数据,最近发现google document被墙了。
    只好换用zoho。说实话,zoho非常好用。有些方面,比google还好。

    以后还是要善加利用。zoho也提供了一些客户端的api,比如java,python封装的库去调用。
    非常不错。可以试试。

  • sikuli————GUI自动化新方法

    2010-02-06 21:21:59

    http://sikuli.org/

    美国理工学院学生的一个杰作,非常有意思。比较符合人类的思维。
    具体的例子可以去官方的文档。
    表面上看,是采用图像判断的方式去执行。
    支持测试使用。不过测试比较简单。

    使用了一下,发现不错。
    可以进行重新的封装与改造。用来做测试,是非常优秀的。

    它的工具的亮点,就是模拟了人是思维。
    目前GUI自动化的最大缺点,就是按照机器思维,而不是人的思维去实现。
    结果就导致了公司里面的自动化比较难以应对变化。
    UED的修改,对测试造成了很大的影响,给重用带来了不小的阻力。

    改进的方式,除了测试影响研发与UED外,还可以通过完善脚本来实现。
    其实,自动化,不要专注于某个自动化对象的name,或者id。
    而更应该关注的是对象的对人类可见的属性,比如带什么名字的按钮,什么颜色的按钮等。
    这样可以让传统的自动化脚本,可以更加的应对GUI变化。

    而sikuli,正是基于这个思路。

    不过sikuli的缺点也是很明显的。纯粹的图像比对是不能解决问题的,如果某个按钮的字体没有改变,但是颜色改变了,那么自动化也会是个问题。
    更好的GUI自动化,应该是针对人类视觉的模拟+传统方式的识别。

    sikuli的测试断言功能目前比较弱,只有
    assertExist与assertNotExist

    虽然目前它不够完善,管理机制不够健全,离项目应用还有很大的差距。
    但是值得一试。。。。

    小例子
    http://sikuli.org/documentation.shtml#/trac/wiki/HelloWorld





    下面是整理的几个相关链接

    5个基于图像识别的自动化工具

    sikuli只是新鲜并不代表流行


  • 朋友们聚会啦

    2010-01-29 01:57:14

    已经一年了,在51testing上,也又呆了一年。
    中间有不少的酸甜苦辣般的经历与人生宝贵的收获。

    无论是开心,还是不开心,无论是寂寞,还是张狂。
    不少陌生的朋友,在这个blog上留下了他们真诚的建议。
    真诚的感谢这些朋友。

    为了表示我的感激,我决定邀请这些朋友,去杭州乐园的火锅店里吃火锅。就在我住的楼下。
    只是一般的吃火锅,聊工作,谈生活,交朋友。

    还有些朋友,比如小叶子,可惜在国外,无法过来了。希望你回国,我可以请你吃饭啦。小叶子这一年,给了我很多的鼓励。

    聚会的地点:杭州乐园,第一世界大酒店旁边。大家到那的话,直接call我即可。不过我们吃饭的地方,是个口味不错的餐馆。
    聚会时间:2月6号
    我的手机:请大家秘密留言,或者发消息给我。请注明自己的身份啊。呵呵。我会给大家回,也可直接告诉我手机,我会到时通知。



  • 熊猫

    2010-01-29 00:01:43




    今天测试工作完成了,突然想看看熊猫,因为和研发聊天,他们对熊猫很感兴趣。
    在网上搜索了很多关于熊猫的黑白片。
    被熊猫憨憨的姿态逗乐了。
    http://player.youku.com/player.php/sid/XNDQxNzU2MA==/v.swf

    Flash: 感到意外的熊猫


    然后就搜索到了《功夫熊猫》,中文翻译的果然很诙谐而且水平很高。
    然后就记住了乌龟大师给熊猫说的一段话。

    放弃,不放弃,
    做面条,不做面条。
    你患得患失,太在意从前,又太担心将来。
    有句话说的好,昨天是个历史,今天是个谜团。
    而今天是个天赐的礼物,
    像珍惜礼物一样珍惜今天。



    往事已成事实,应该珍惜重新的开始。
  • Bash Framework加入了新成员BashUnit

    2010-01-27 02:03:54

    试用了一把bashunit。发现很不错。
    把它加入到了bash Framework中。

    用法

    编写你的脚本,每个TC为一个函数。
    每个函数使用test_开头,风格和xunit一样。同样支持setup与teardown函数。

    test_xxx1()
    {
            echo "xxx"
            assert_pass_message "ffffffff"
    }
    test_xxx2()
    {
            echo 'ffffffffffffffff'
            ls ddd
            assert_fail_message "testxxxxxx"
    }

    test_xxx3()
    {
            [[ 2 == 3 ]] && assert_pass_message "xx33333333333333" || assert_fail_message "xx333333333333333 faul"
    }

    建议你按照test_xxx3的使用方法去使用,这样更明确些。
    保存为test.sh
    然后使用bashunit去执行。我已经别名了一下,使用bu即可。

    执行
    bu test.sh

    [huangysh@qa17 bashunit]$ bu test.sh
    xxx
    .ffffffffffffffff
    ls: ddd: No such file or directory
    FF
    FAILURES!!!
    Runs = 3 Success = 1 Failures = 2
    test.sh:10: test::test_xxx2 (testxxxxxx)
    test.sh:15: test::test_xxx3 (xx333333333333333 faul


    蛮不错的一个小框架。里面还有不少值得改进的地方。
    春节后好好的用用,然后改进下。

    已经更新至shell函数库中。
  • 岗位调整

    2010-01-26 23:11:10

    最近进行了小的岗位调整。
    很多事情一言难尽。

    调整的原因。

    1、我的时间管理能力不强,并发能力弱。不能合理安排时间。
    2、这半年一直做工作冲刺,最后时刻情绪出现了波动。丧失了工作信心与希望。
    3、最近接了一个公司里面非常重要的项目。测试过程中发现,很多地方需要改善。但是又一时无法解决。因为是与积累,条件,配合,资源相关的一些问题。推动的话,阻力太大,感觉这样下去很危险,所以我退缩了。
    之前的项目也是,我无法投入充足的精力去完善测试体系。
    这样疲劳的测试下去,感觉严重与自己的测试理念不符。我不想去救火。只想去做完备的测试。
    我不害怕承担责任,而是害怕这样的测试。我希望有一天我死后,我的墓碑上刻着的是专业的测试人员。而不是资深测试人员。
    4、自己与leader配合不好。中间有一些误解与芥蒂。团队配合不好。因为我在自我封闭。
    5、主管有意提升我的业务测试能力。因为我一直是被认为是疏于业务,精于技术。
    6、个人的工作领悟。有些事情很无奈。
    7、生活问题影响。接连好几个月的经济拮据。有几次因为信用卡透支过度,一天只吃一顿饭。对家人,对朋友,一直感觉无法面对。

    总体来说,就是情绪,理念,能力,沟通都出了问题。
    同样这些问题,也不是一时可以解决的。
    时间点仍旧是年后,还是要继续等。

    我不赞同变动,因为我还是很喜欢现有的工作内容。变动会导致我的几个研究计划搁浅。
    但是无论如何,我会适应变化。接受公司安排。

    变动之后,我可以在年后腾出时间去研究项目相关的领域,把DW部门的知识翻个遍。研究下测试方法,推动自动化测试的覆盖。


    今天没有去上班,在杭州乐园散步了下,感觉整个世界好陌生。
    下午去公司后,在篮球场徘徊了一会,然后去健身房一个人捣球去了。
    主管打电话后来问我情况,我无言以对。
    拿着球杆,在阳光的黄色光辉下,依着玻璃墙发呆了一会。
    只是感觉自己掉进了沼泽里面,无法抽身。


    反问了自己几个问题

    1、为什么一直无法提起精神,无法乐观面对。始终被抑郁困扰。
    2、为什么知道错还是一直错下去。无力去改正。
    3、我是不是太追求专业,责任这些词语了。以至于我宁愿丢掉了锻炼与自我成长的机会。去追求险隘的专业。
    4、我整天都在忙什么。
    5、是不是我辞职对公司会更有好处,是不是换个人,会做的比我好。
    6、是不是我的人生一直就是这个样子了。开始靠着时间去熬级别与工资。


    还是什么都不想和别人谈,
    我还是一直等。
    一直等2010年的年终奖,
    一直等着放假。

    距离放假,还有十五天。



  • 把自己培养成精英

    2010-01-24 18:17:10

    从公司的内网上的分享上看到的。写的不多。
    可能有些地方我不太赞同,但是还是值得去思考的。




       1.别为你自己和别人下定论,你所看到听到的可能只是一面,为这个失去可能的朋友,很不值。
      2.你可以有喝醉的时候,我们可以接受,但是你要明白和真正的朋友一醉才能让伤心事方休,否则,你只会是别人的谈资和笑柄。

      3.如果你的个性让很多人对你敬而远之,那么你的个性是失败的,个性的成功在于能吸引,而不是能排斥。

      4.别怕丢人,如果你实在不行就别怕丢人,行的话,建议你们-去追求丢人,那是一种成功的尝试,至于为此笑话你的人,你可以把他们从你将来人生对手的名单中排除了,所以你也不要笑话那些上台丢人的人。

      5.你的确要学得有心计,但是记住,永远记住,在社会上要胜利的唯一的方法永远只是一个,那就是实力,永远不用怀疑。

      6.你可以看不惯一些东西,但是你应该学会接受,让自己去适应环境,因为环境永远不会来适应你,但要和同流合污划清界限。

      7.好汉不吃眼前亏,但是在很多时候,要冷静下来,多收集一些数据材料,想更明白点再说,别去争论,可以回忆一下,你会发现,人不可能赢得争论,可以说,争论所提级的话题都是不值得去争论的。

      8.要有精英意识,没有不可能的事情,真的没有!莫过于耿直,莫过于圆滑,外圆内方即可。

      9.遇到可相信的朋友时,要好好和他相处下去。因为在人的一生中,可遇到知己真的不易。

      10.没有什么东西比围观者们更能提高你的保龄球的成绩了。所以,平常不要吝惜你的喝彩声。

      11.把未出口的”不”改成:”这需要时间”、”我尽力”、”我不确定”、”当我决定后,会给你打电话”……

      12.你在表演或者是演讲的时候,只要有一个人在听也要用心地继续下去,即使没有人喝采也要演,因为这是你成功的道路,是你成功的摇篮,你不要看的人成功,而是要你成功。

      13.不要期望所有人都喜欢你,那是不可能的,让大多数人喜欢就是成功的表现。不要把别人的好,视为理所当然,要知道感恩。

      14.每个人都有孤独的时候,要学会忍受孤独,这样才会成熟起来。不要因为寂寞而乱了方寸,而去做无聊无益的事情,白白浪费了宝贵的时间。

      15.管住自己的嘴巴,不要谈论自己,更不要议论别人。谈论自己往往会自大虚伪,在名不副实中失去自己。议论别人往往陷入鸡毛蒜皮的是非口舌中纠缠不清。

      16.写出你一生要做的事情,人生要有目标,要有计划,要有提醒,要有紧迫感。一个又一个小目标串起来,就成了你一生的大目标。生活富足了,环境改善了,不要忘了那张薄薄的单子。

      17.有资格坐轿的人,争着抬轿的很多,你再凑热闹,别人也未必注意你,不妨扶一下旁边那个走得筋疲力尽的人,对于他,每一次帮助都意味着一种人世的温暖。

      18.不论你在什麽时候开始,重要的是开始之後就不要停止。不论你在什麽时候结束,重要的是结束之後就不要悔恨,有理想在的地方,地狱就是天堂,有希望在的地方,痛苦也成欢乐,从绝望中寻找希望,人生终将辉煌。

      19.当你能飞的时候就不要放弃飞;当你能梦的时候就不要放弃梦;当你能爱的时候就不要放弃爱。

      20.如你想要拥有完美无暇的友谊,可能一辈子找不到朋友。

      21.世上最累人的事,莫过于虚伪的过日子,活出真实的自己。

      22.在有多个出席者的场合,主动介绍自己的朋友给其他人,或者主动在你认识的朋友之间穿针引线。

      23.在受到别人对自己的相貌、事情、人品赞扬时,不要表现出理所当然的样子,也不要假意否认,合适的方式是表示感谢,尤其感谢朋友的肯定与支持。

      24.虽然在商言商,但是我们要尽量不谈回报地先为别人做点什么,这样就赢得了在心理上比别人优越的债权感。一个人的社会地位是别人对他负有的社会债务感的总和。

      25.不逃课的学生不是好学生。什么课都不逃,跟什么课都逃掉没什么两样。一定要掌握学习的主动性,不要像读中学一样被老师牵着鼻子走。逃课没有错,但是不要逃错课。同时,既要逃课,又要让老师给高分。

      26.做事不如做人,人脉决定成败。一个人有多少钱并不是指他拥有多少钱的所有权,而是指他拥有多少钱的使用权。一个人具备多少能力,不只是说他一个人的时候能做什么,还包括他能通过别人做什么。

      27. 大学期间一定要多去图书馆多去自习室。很多书你现在不读,一辈子就再也没有机会去读了。虽然不是每本书看了都一定有用,但是,因为你不知道究竟哪本书以后会有用,所以只好多看书,尽管每次网到鱼的不过是一个网眼,但要想捕到鱼,就必须要编织一张网。

      28.养成个人风格,找出你所喜欢的,不论是衣着或是爱好,哪怕是与众不同的小习惯也好。没有个性的人无法踏入社会的顶层(但注意第3点)。

      29.学会授权他人,许多人不肯或不能这样做,因此始终被钉在从属的职位上。授权他人是成功的一半,一个事无巨细,不能将工作授权别人的人,注定会遇到极大的障碍。

      30.长相出众最好,如果长得不好,就让自己有才气,如果才气也没有,那就要经常微笑。气质是首要,你的形象价值100万美元。

      31. 远离搬弄是非、挑拨离间之人。手段高明的,用小人以驱驰;能力高强的,还小人以颜色;品德高尚的,待小人以宽容;血压偏高的,怕只有被小人气死的份儿了。宁得罪十个君子,也不要得罪一个小人。

      32.对社会的简单形容就是:全是人、全是人、全是人——但社会肯定会分出层次,只有一个办法,那就是竞争,你必须努力,必须使自己成为社会的强者,强者才能拥有一切,而不是金钱可以买到一切,否则结局就是被压在社会的底层。
1722/9<123456789>
Open Toolbar