qileilove

blog已经转移至github,大家请访问 http://qaseven.github.io/

用IETester执行web兼容性测试

IETester,从名号上就知道事针对IE浏览器测试的,上一篇文章介绍的MutipleIE不支持IE7和IE8。当前IE7和IE6是主流,但随着越来越多的用户装Windows7,IE8也必将在测试要考虑的。
  IETester可能在一台电脑上安装多个版本的IE浏览器,支持版本有IE5.5,IE6,IE7,IE8,支持的系统有WindowsXP,Vista,Windows7,其他就系统不支持。需要特别提醒的是,如果是WindowsXP,Vista,Windows7这三个系统安装IETester,至少需要安装IE7,也就是说IETester不支持IE6。
  IETester一款自由软件,大家可以免费使用,当前最新版本是0.4.2,从版本号来看,IETester还比较不成熟,改进提升的空间还很大。IETester的界面山寨了Office2007的风格,山寨的很像,第一眼看到我还以为是Office2007。IETester支持多个Tab,每个Tab可以不同的IE版本实例。
  最后,需要的同学们可以去下载安装,安装的时候主意选择中文组件。

posted @ 2014-11-28 10:16 顺其自然EVO 阅读(306) | 评论 (0)编辑 收藏

使用Visual Studio进行单元测试

一、使用Visual Studio进行单元测试的几个建议
  1.先写单元测试(依我愚见,应该是接口先行,如果有的话) -> 测试失败 -> 以最小的改动(即编写实际代码)使测试通过(而在VS2012中已经不能通过现有项目直接生成测试项目了,我觉得这个功能还是应该保留,微软总是这副德行,强迫用户适应他们的产品,但是又不得不适应);
  2.不因单元测试而追加功能(代码),即逻辑不受单元测试影响;
  3.改变了代码的逻辑(增删改),应及时运行单元测试;
  4.在测试方法声明Attribute —— TestCategory("分类或特征名");
  5.在单元测试项目添加Fakes程序集分离外部依赖(如数据库访问,获取配置信息等);
  6.初始化单元测试类中的成员等信息,可添加方法并声明Attribute[TestInitialize](方法需为public);
  二、下面我们以VS2012为例,来看一下如何在Visual Studio中进行单元测试
  1.首先,右键点击解决方案(Solution)弹出右键菜单(Context)
  选择添加(Add) - 新项目(New Project), 在给出的模版中,选择 Visual C# - Test -Unit Test Project 如图。
  2.得到模版如图
  3.在测试方法中(此处为默认的TestMethod1,一般修改为 需要测试的方法名+Test )添加自己需要测试的代码
  例如添加类XmlSerializationTest,代码如下:
[TestClass]
public class XmlSerializationTest
{
private XmlSerialization serialization;
[TestInitialize]
public void InitTest()
{
this.serialization = new XmlSerialization(@"F:\\usermodel.seri");
}
[TestMethod]
public void TestWriteXml()
{
UserModel user = new UserModel();
bool flag = serialization.WriteXml<UserModel>(user);
Assert.IsTrue(flag);
Assert.IsFalse(serialization.WriteXml<UserModel>(null));
}
[TestMethod]
public void TestReadXml()
{
UserModel user = new UserModel();
user.LoginName = "aa";
serialization.WriteXml<UserModel>(user);
UserModel model = serialization.ReadXml<UserModel>();
Assert.IsNotNull(model);
Assert.AreEqual(user.LoginName, model.LoginName);
//路径不存在,应返回null
UserModel modelnull = serialization.ReadXml<UserModel>(@"F:\\notexists.seri");
Assert.IsNull(modelnull);
}
}
  4.测试代码写好后, 即可点击上方菜单Test-Run- AllTests等,来进行测试
  测试完毕后。下方会产生结果列表。红色为未通过的TestCase。若想对其进行DEBUG,可右击红色的TestCase,选择Debug selected Tests。修改后,也可右击想要重新测试的TestCase,选择Run Selected Tests.
English »
 
Text-to-speech function is limited to 100 characters

posted @ 2014-11-28 09:50 顺其自然EVO 阅读(195) | 评论 (0)编辑 收藏

Linux使用fuser命令找出访问文件系统的进程

 fuser用于标识访问文件或socket的进程信息。下面以经常会遇到的不能卸载光驱为例,讨论fuser的用法:
  1).卸载光驱文件系统:
  [root@vserver01 ~]# umount /mnt
  umount: /mnt: device is busy
  umount: /mnt: device is busy
  2).找出依然在访问该文件系统的进程号:
  [root@vserver01 ~]# fuser -c /mnt
  /mnt:                 2563c
  [root@vserver01 ~]# ps -ef | grep 2563
  root      2563  2499  0 15:19 tty1     00:00:00 -bash
  root      5462  5383  0 16:11 pts/0    00:00:00 grep 2563
  3).kill进程:
  [root@vserver01 ~]# kill -9 2563
  [root@vserver01 ~]# ps -ef | grep 2563
  root      5488  5383  0 16:11 pts/0    00:00:00 grep 2563
  4).成功卸载光驱文件系统:
  [root@vserver01 ~]# umount /mnt
  [root@vserver01 ~]#

posted @ 2014-11-27 12:01 顺其自然EVO 阅读(584) | 评论 (0)编辑 收藏

Oracle RAC Database 11.1.0.6监听故障案例

 晚上接到电话,客户的一套核心Oracle RAC数据库连接不上,连接时报无监听程序,客户的Oracle RAC版本为11.1.0.6,平台为AIX 6.1.05,使用了IBM HACMP 5.5.0.8。
  当我远程过去的时候,发现节点2已经没有任何oracle用户的进程,且concurrent的vg没有激活,HACMP的服务也offline。
  另一个节点Oracle的实例是正常的,且有部分服务器进程依然在工作,但是本地监听器出现了故障,导致新的连接无法连接到实例,通过crs_stat -t看到两个实例的监听也都是OFFLINE状态。
  在节点上并没有发现有LISTENER进程,且手动杀掉了所有的服务器进程,在oracle用户下启动监听时收到以下的报错:
$ lsnrctl start listener_cdfy740a
LSNRCTL for IBM/AIX RISC System/6000: Version 11.1.0.6.0 - Production on 20-NOV-2014 20:09:09
Copyright (c) 1991, 2007, Oracle.  All rights reserved.
Starting /oracle/app/oracle/product/11.1.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for IBM/AIX RISC System/6000: Version 11.1.0.6.0 - Production
System parameter file is /oracle/app/oracle/product/11.1.0/db_1/network/admin/listener.ora
Log messages written to /oracle/app/oracle/diag/tnslsnr/cdfy740a/listener_cdfy740a/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.107.64.1)(PORT=1521)))
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.107.64.1)(PORT=1521)(IP=FIRST)))
TNS-12542: TNS:address already in use
TNS-12560: TNS:protocol adapter error
TNS-00512: Address already in use
IBM/AIX RISC System/6000 Error: 67: Address already in use
Listener failed to start. See the error message(s) above...
  10.107.64.1是该节点的vip地址,下面是RAC环境的hosts配置:
10.107.64.1     vip1
10.107.64.2     vip2
10.107.64.3     cdfy740a
10.107.64.4     cdfy740b
172.201.201.1   prv1
172.201.201.2   prv2
  手动停掉该节点的nodeapps服务:
  cdfy740a@root[/oracle/app/11.1.0/crs/bin]./srvctl stop nodeapps -n cdfy740a
  成功停止后,VIP在主机层面已经消失:
cdfy740a@root[/oracle/app/11.1.0/crs/bin]ifconfig -a | more
en0: flags=1e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN>
inet 172.200.200.1 netmask 0xffffff00 broadcast 172.200.200.255
tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0
en1: flags=1e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN>
inet 172.201.201.1 netmask 0xffffff00 broadcast 172.201.201.255
tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0
en4: flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),PSEG,LARGESEND,CHAIN>
inet 10.107.64.3 netmask 0xffffff00 broadcast 10.107.64.255
tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0
lo0: flags=e08084b,c0<UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,LARGESEND,CHAIN>
inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255
inet6 ::1%1/0
tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1
 再次启动节点nodeapps服务:
cdfy740a@root[/oracle/app/11.1.0/crs/bin]./srvctl start nodeapps -n cdfy740a
CRS-1006: No more members to consider
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:LSNRCTL for IBM/AIX RISC System/6000: Version 11.1.0.6.0 - Production on 20-NOV-2014 20:13:07
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:Copyright (c) 1991, 2007, Oracle.  All rights reserved.
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:Starting /oracle/app/oracle/product/11.1.0/db_1/bin/tnslsnr: please wait...
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:TNSLSNR for IBM/AIX RISC System/6000: Version 11.1.0.6.0 - Production
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:System parameter file is /oracle/app/oracle/product/11.1.0/db_1/network/admin/listener.ora
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:Log messages written to /oracle/app/oracle/diag/tnslsnr/cdfy740a/listener_cdfy740a/alert/log.xml
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.107.64.1)(PORT=1521)))
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.107.64.1)(PORT=1521)(IP=FIRST)))
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:TNS-12542: TNS:address already in use
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr: TNS-12560: TNS:protocol adapter error
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:  TNS-00512: Address already in use
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:   IBM/AIX RISC System/6000 Error: 67: Address already in use
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:Listener failed to start. See the error message(s) above...
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:LSNRCTL for IBM/AIX RISC System/6000: Version 11.1.0.6.0 - Production on 20-NOV-2014 20:13:08
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:Copyright (c) 1991, 2007, Oracle.  All rights reserved.
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=vip1)(PORT=1521)))
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:TNS-12541: TNS:no listener
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr: TNS-12560: TNS:protocol adapter error
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:  TNS-00511: No listener
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:   IBM/AIX RISC System/6000 Error: 79: Connection refused
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.107.64.1)(PORT=1521)(IP=FIRST)))
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:TNS-12541: TNS:no listener
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr: TNS-12560: TNS:protocol adapter error
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:  TNS-00511: No listener
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:   IBM/AIX RISC System/6000 Error: 79: Connection refused
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.107.64.3)(PORT=1521)(IP=FIRST)))
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:TNS-12541: TNS:no listener
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr: TNS-12560: TNS:protocol adapter error
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:  TNS-00511: No listener
cdfy740a:ora.cdfy740a.LISTENER_CDFY740A.lsnr:   IBM/AIX RISC System/6000 Error: 79: Connection refused
CRS-0215: Could not start resource 'ora.cdfy740a.LISTENER_CDFY740A.lsnr'.
  之前使用lsnrctl status listener_cdfy740a查看监听器状态时也收到Connection refused的错误。
  查看主机层面已经成功绑定了VIP地址:
cdfy740a@root[/oracle/app/11.1.0/crs/bin]ifconfig -a | more
en0: flags=1e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN>
inet 172.200.200.1 netmask 0xffffff00 broadcast 172.200.200.255
tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0
en1: flags=1e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),LARGESEND,CHAIN>
inet 172.201.201.1 netmask 0xffffff00 broadcast 172.201.201.255
tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0
en4: flags=5e080863,c0<UP,BROADCAST,NOTRAILERS,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,CHECKSUM_OFFLOAD(ACTIVE),PSEG,LARGESEND,CHAIN>
inet 10.107.64.3 netmask 0xffffff00 broadcast 10.107.64.255
inet 10.107.64.1 netmask 0xffffff00 broadcast 10.107.64.255
tcp_sendspace 131072 tcp_recvspace 65536 rfc1323 0
lo0: flags=e08084b,c0<UP,BROADCAST,LOOPBACK,RUNNING,SIMPLEX,MULTICAST,GROUPRT,64BIT,LARGESEND,CHAIN>
inet 127.0.0.1 netmask 0xff000000 broadcast 127.255.255.255
inet6 ::1%1/0
tcp_sendspace 131072 tcp_recvspace 131072 rfc1323 1
  再次尝试手动启动本地监听器:
cdfy740a@root[/]su - oracle
$ lsnrctl start listener_cdfy740a
LSNRCTL for IBM/AIX RISC System/6000: Version 11.1.0.6.0 - Production on 20-NOV-2014 20:18:37
Copyright (c) 1991, 2007, Oracle.  All rights reserved.
Starting /oracle/app/oracle/product/11.1.0/db_1/bin/tnslsnr: please wait...
TNSLSNR for IBM/AIX RISC System/6000: Version 11.1.0.6.0 - Production
System parameter file is /oracle/app/oracle/product/11.1.0/db_1/network/admin/listener.ora
Log messages written to /oracle/app/oracle/diag/tnslsnr/cdfy740a/listener_cdfy740a/alert/log.xml
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=10.107.64.1)(PORT=1521)))
Error listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=10.107.64.1)(PORT=1521)(IP=FIRST)))
TNS-12542: TNS:address already in use
TNS-12560: TNS:protocol adapter error
TNS-00512: Address already in use
IBM/AIX RISC System/6000 Error: 67: Address already in use
Listener failed to start. See the error message(s) above...
  启动依然失败。
  检查监听器配置文件:
$ cat listener.ora
# listener.ora.cdfy740a Network Configuration File: /oracle/app/oracle/product/11.1.0/db_1/network/admin/listener.ora.cdfy740a
# Generated by Oracle configuration tools.
LISTENER_CDFY740A =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = vip1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.107.64.1)(PORT = 1521)(IP = FIRST))
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.107.64.3)(PORT = 1521)(IP = FIRST))
)
)
  在监听配置文件中,vip1和10.107.64.1是两个重复的地址,手动将10.107.64.1所在行去掉之后,监听即可正常的启动。
  之后恢复节点2的HACMP服务,Oracle RAC随即恢复正常。
  另外,还发现客户的监听日志已经被填得很大,大概在1.6GB左右,过大的监听日志文件也会导致监听器不稳定,这里将两个节点的监听日志进行了重命名操作。
  《10g RAC监听器配置文件listener.ora中的IP=FIRST》:http://blog.itpub.net/23135684/viewspace-715967/
  《IP=FIRST作用说明》:http://www.xifenfei.com/2713.html

posted @ 2014-11-27 12:00 顺其自然EVO 阅读(233) | 评论 (0)编辑 收藏

Java工程转换为Maven工程

 1. 前言
  在开发中经常要建立一个Maven的子工程,对于没有模板的同学来说从Java工程来转换也是一个不错的选择。本文就如何从一个Java工程创建一个Maven工程做了一个介绍,相信对于将一个Java工程转换为Maven工程的工作也是有帮助的。
  2. 创建Java工程。
  创建一个Java工程,如下图所示:
  3. 转换为Maven工程。
  选中此工程 -> 右键 -> Configure -> Convert to Maven project。出现如下的截图,天上相关的信息即可:
  点击Finish后再这个工程目录下面就会产生一个pom.xml文件,如下图:
  4. 配置pom.xml的父工程。
  在pom.xml文件中添加parent节的配置即可,这个节的配置形如:
  <parent>
  <groupId>com.alu.dashboard.common</groupId>
  <artifactId>qosac.dashboard.common</artifactId>
  <version>${module_version}</version>
  </parent>
 5. 改造这个工程。
  打开这个工程的目录,删除除了src和pom.xml以外的所有文件夹和文件:
  6. 构建目录。
  在src下建立main和test两个目录,然后在这两个目录下面分别建立java目录。在src/main下面建立resources目录。
  7. 重新导入改工程。
  在Eclipse中重新导入该工程,使用Maven -> Existing Maven Module的方式导入。工程构建完成后就已经成为了一个标准的Maven工程。
  8. 总结
  对于Web工程转Maven Web Module的工作是差不多的,如果有必要我会在以后的文章中介绍其转换的过程。

posted @ 2014-11-27 11:59 顺其自然EVO 阅读(197) | 评论 (0)编辑 收藏

Socorro Crash管理系统配置

问题1:数据连接问题把md5改成trust
# IPv4 local connections:
host    all             all             127.0.0.1/32            trust
# IPv6 local connections:
host    all             all             ::1/128                 trust
  只要获取对方的信任(trust),问题真的就不是问题了,呵。
  但这种做法对于服务器而言,相当于把自家的锁砸了:设置成trust后,根本就不需要口令。
  PostgreSQL 数据库口令与任何操作系统用户口令无关。各个数据库用户的口令是存储在 pg_authid 系统表里面。口令可以用 SQL 语言命令 CREATE USER 和 ALTER USER 等管理(比如 CREATE USER foo WITH PASSWORD 'secret'; 。缺省时,如果没有明确设置口令,那么存储的口令是空并且该用户的口令认证总会失败。
  《PostgreSQL 8.2.3 中文文档,20.2 认证方法》
  原来是这样啊,pg_authid表里的postgres用户的口令还是空的呢!

posted @ 2014-11-27 11:58 顺其自然EVO 阅读(238) | 评论 (0)编辑 收藏

对测试人员或开发人员来说相互沟通有多重要?

  要开始讨论的话题之前,我想举一个实际生活中的例子:
  丈夫和妻子住在同一所房子里,且不与对方沟通。或者说他们之间没有什么可以说的。他们只是用短信告知对方如果有什么重要事要注意。否则,两人都是在忙自己的生活,不怎么会打扰或者照顾对方。长久如此会发生什么?一种挫败感升高,刺激倍增,愤怒的表现和情绪失控的发生。一段关系只会在有频繁交流,难得争吵,大量共识以及彼此之间赞扬的情况下才能加强。
  现在,将上述情况与软件项目生命周期进行一下比较。
  开发人员和测试人员之间的关系也是类似的,双方都为一个项目工作为了要取得成功。世界上没有任何项目仅仅因为工具,预算,代码或基础结构而获得成功。往往是真实的人使得项目成功。而为了让事情顺利完成,需要的是一个团队,而不是个人。
  简述了这条主线后,我希望你深入理解为什么测试者和开发者都应该彼此沟通,作为一个团队进行工作。
  为什么测试人员和开发人员应该沟通,作为一个团队进行工作?
  首先,让我们看看如果开发人员和测试人员作为一个团队工作会有怎样的好处:
  #1.默认情况下项目是成功的:
  当项目过程中不存在开发团队和测试团队经常由于琐碎的问题和自我进行争吵的情况下,该项目保证是成功的。大多数时候,开发团队和测试团队都会玩分配的游戏。是的,bug的分配。每个人都想证明问题是由另一方造成的。如果大家都能够理解最终的问题是在前提(项目)中,并试图一起解决它的话,其他所有的问题也都可以得到解决。
  #2.个人的成长:
  如果有一个良性的竞争,而没有隐藏的斗争,那每个人都可以得到成长。分享想法并接受建议,给每个人一个机会去取得进步。
  #3.团队的成长:
  通过让团队成员彼此了解,并互相尊重对方的工作,能够最终使团队变得更强,更有竞争力。
  #4.为未来而学习
  在完成一个成功的项目后,每个人都学到了东西。使得团队未来的项目完成变得更成功,更轻松自由以及更流畅。
  好了,现在我们知道一起工作而不是单独作为一个开发人员或测试人员工作的好处,但是如何做到呢?
  测试人员和开发人员:沟通是关键
 彼此合作的方法:
  #1.不要将自我带入工作岗位:
  有意或无意,我们带着自我进入工作场所。我们认为自己正在尽力做到最好(毫无疑问),但是,这并不意味着其他人不是如此。
  如果开发人员认为,对于他所开发部分的任何缺陷的报告都是无知的,琐碎的,怀着恶意的想法或是努力在骚扰他,那么与其说这个缺陷是个bug还不如说这是一种自我意识问题。如果测试人员认为,他报告的错误被驳回,是因为开发人员试图伤害别人,因为开发人员不喜欢解决bug,因为开发人员认为,某个测试人员没有正确的理解,或者因为开发人员认为他是一名开发人员,他做的最好……那测试想法和发现的bug都会减少。
  由于展示与表现自我,我们使自己难以获得成长也使他人难以工作。
  所以,如果可能的话,不要想着你是一个测试人员,首先想到你是一个正在努力让一切正确完成的团队成员。不要因为bug被驳回而感到受伤,而是试试去了解背后的原因。不要因为知道测试的预计时间即将到来而停止。不要因为觉得开发工作是个伟大的工作从而看轻自己,也不要因为觉得自己的工作是给别人找他们工作上的错误而过分自信。
  ------------
  #2.现实一点:
  作为测试者,要面对的最痛苦的时候是,当你汇报的错误被驳回的时候。现实一些,试图去了解驳回背后的原因,试着去了解你怎么会误解或错误推测的,如果你认为你提出的方案是正确的,试图说服开发人员或项目经理,并尝试继续。
  #3.优先考虑项目:
  总是关注全局,并相应地优先考虑事情。项目整体比一个bug或个人更重要。放下你的自我,去开发人员那里,讨论,分享,理解和进行相应的工作。
  #4.要有耐心:
  事情并不会一夜之间改变,因此要有耐心,继续好好地完成你的工作。不要因为有人给你负面的评价或者开发人员一时不接受你找到的bug而丧失动力。
  #5.分享想法,但不要强调实现:
  开发和测试团队之间的频繁交流,有助于双方产生更多的想法。开发者可以建议有关如何更好的测试特定的模块,与此同时测试者可以建议如何纠正缺陷。放开自己去接受新的建议并交流想法。
  #6.接受人们是会犯错误的:
  找到一个关键的错误之后,不要在开发人员的面前嘲笑这个错误。要知道,测试人员在一个时间和预算紧缩的环境下工作,开发者也是如此。没有人可以创建一个毫无漏洞的软件,不然测试就不会存在了。因此,明白自己的角色,并帮助解决问题,而不是取笑它们。
  #7.了解多个团队总是比一个团队做的更好:
  测试团队孤立于所有其他开发团队,不能成为高产的团队。当一个测试人员调整自己与开发人员之间的关系,并发展相互的关系,就能创建一个良好的团队环境,当所有的开发人员和测试人员一起工作时,这对双方而言会是一个双赢的局面。
  #8.敏捷测试和结对测试:
  建议:敏捷方法,齐心协力,做好结对测试,与开发人员共同工作,讨论并经常开会,减少文件,给予同等的重视以及尊重每个人的工作。
  我总结为以下主题:
  如果你认为你是一个清洁工,你将永远是清洁工。
  然而
  如果你认为你正试图使世界变得更美好,干净,赶上垃圾收集车,并努力战略性的完成事情,世界肯定会更好。
  作者简介:这篇文章是由STH团队成员Bhumika Mehta所写。她是一个项目负责人,有着7年的软件测试经验

posted @ 2014-11-27 11:58 顺其自然EVO 阅读(302) | 评论 (0)编辑 收藏

安装运行Appium初体验

 最近有空玩了一下Appium,记录一下
  1.下载Appium for windows,现在是0.12.3版本
  解压后如下图
  双击Appium.exe就能启动Appium界面
  点击Launch开启服务
  2. 下载Android SDK
  解压后
  3. 配置系统环境变量
  ANDROID_HOME: C:\adt-bundle-windows-x86_64-20131030\sdk
  Path添加: %ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools
 4. 启动AVD,耗资源啊,这时候我T400的CPU已经100%了
  5. 编写Test,使用ADT安装好Maven插件,创建一个Maven项目,添加一个文件夹apps用来存放被测的app,这里测试的是ContactManager.apk
  pom.xml添加如下依赖
1   <dependencies>
2     <dependency>
3             <groupId>junit</groupId>
4             <artifactId>junit</artifactId>
5             <version>4.11</version>
6             <scope>test</scope>
7         </dependency>
8         <dependency>
9             <groupId>org.seleniumhq.selenium</groupId>
10             <artifactId>selenium-java</artifactId>
11             <version>LATEST</version>
12             <scope>test</scope>
13         </dependency>
14   </dependencies>
 编写AndroidContactsTest
1 package com.guowen.appiumdemo;
2
3 import org.junit.After;
4 import org.junit.Before;
5 import org.junit.Test;
6 import org.openqa.selenium.*;
7 import org.openqa.selenium.interactions.HasTouchScreen;
8 import org.openqa.selenium.interactions.TouchScreen;
9 import org.openqa.selenium.remote.CapabilityType;
10 import org.openqa.selenium.remote.DesiredCapabilities;
11 import org.openqa.selenium.remote.RemoteTouchScreen;
12 import org.openqa.selenium.remote.RemoteWebDriver;
13 import java.io.File;
14 import java.net.URL;
15 import java.util.List;
16
17 public class AndroidContactsTest {
18     private WebDriver driver;
19
20     @Before
21     public void setUp() throws Exception {
22         // set up appium
23         File classpathRoot = new File(System.getProperty("user.dir"));
24         File appDir = new File(classpathRoot, "apps/ContactManager");
25         File app = new File(appDir, "ContactManager.apk");
26         DesiredCapabilities capabilities = new DesiredCapabilities();
27         capabilities.setCapability("device","Android");
28         capabilities.setCapability(CapabilityType.BROWSER_NAME, "");
29         capabilities.setCapability(CapabilityType.VERSION, "4.4");
30         capabilities.setCapability(CapabilityType.PLATFORM, "WINDOWS");
31         capabilities.setCapability("app", app.getAbsolutePath());
32         capabilities.setCapability("app-package", "com.example.android.contactmanager");
33         capabilities.setCapability("app-activity", ".ContactManager");
34         driver = new SwipeableWebDriver(new URL("http://127.0.0.1:4723/wd/hub"), capabilities);
35     }
36
37     @After
38     public void tearDown() throws Exception {
39         driver.quit();
40     }
41
42     @Test
43     public void addContact(){
44         WebElement el = driver.findElement(By.name("Add Contact"));
45         el.click();
46         List<WebElement> textFieldsList = driver.findElements(By.tagName("textfield"));
47         textFieldsList.get(0).sendKeys("Some Name");
48         textFieldsList.get(2).sendKeys("Some@example.com");
49         driver.findElement(By.name("Save")).click();
50     }
51
52     public class SwipeableWebDriver extends RemoteWebDriver implements HasTouchScreen {
53         private RemoteTouchScreen touch;
54
55         public SwipeableWebDriver(URL remoteAddress, Capabilities desiredCapabilities) {
56             super(remoteAddress, desiredCapabilities);
57             touch = new RemoteTouchScreen(getExecuteMethod());
58         }
59
60         public TouchScreen getTouch() {
61             return touch;
62         }
63     }
64 }
  6. 运行Test,注意AVD里的Android如果没有解锁需要先解锁
  这时候我们可以看到AVD在运行了,
  同时Appium的命令行有对应的输出
  7. 更多信息请参考Appium的Github

posted @ 2014-11-27 11:57 顺其自然EVO 阅读(1350) | 评论 (0)编辑 收藏

Paros proxy:网页程序漏洞评估代理

 Paros Proxy的安装和运行需要预先配置JRE环境变量,安装JRE 1.4或以上版本,在PATH环境变量中输入JRE的安装路径,在CLASSPATH环境变量中输入LIB路径。然后就可以安装Paros Proxy了。windows下照提示安装。然后进行配置。
  首先,paros需要两个端口:8080和8443,其中8080是代理连接端口,8443是SSL端口,所以必须保证这两个端口并未其它程序所占用。(查看端口命令:开始—运行—cmd—netstat,查看目前使用的端口)
  然后配置浏览器属性:打开浏览器(如IE),工具-选项-连接-LAN设置-选中proxy server,proxyname为:localhost,port为:8080。(很显然这之后就不能通过浏览器直接上网了)
  如果你的计算机运行于防火墙之下,只能通过公司的代理服务器访问网络,你还需要修改PAROS的代理设置,具体的方法是:打开paros-工具 -Options-connection,修改”ProxyName” and “ProxyPort”两项为代理服务器的名称和端口。
  现在可以运行paros进行测试
  打开paros之后用浏览器就能上网了,运行你要测试的web应用,paros就会自动抓取其中位于第一层的URL(比如首页的URL),并显示在 左侧的“site”栏中。选中一个URL,右键—spider,就能抓取所选层次下一层的所有URL。这样可以把待测应用的所有URL都抓取出来。
  不过paros并不能识别一些特定的URL路径,比如一些URL链接需要在合法登录后才能被识别出来,因此在进行URL抓取时,一定先要登录网站。 对于未能被识别出来的那些URL,可以手动添加。打开paros—工具—manual request editor,输入未被抓取的URLS,然后单击SEND按钮,完成手动加入URL,添加成功后的URL将显示在左侧的“site”栏中。
  所有URL被抓取出来之后就可以逐一进行扫描了。可以对单一URL进行扫描,也可以对所有URLS进行扫描。扫描的结果会被保存到本地固定目录。
  例如:
  Report generated at Mon, 14 Dec 2009 11:19:21.
  Summary of Alerts
  Paros Scanning Report
  Alert Detail
  然后就可以对扫描结果进行验证了,比如扫描结果中有一是URL传递的参数中存在SQL注入漏洞,那么将该URL及参数输入到地址栏中,验证结果。
English »
 

posted @ 2014-11-27 11:55 顺其自然EVO 阅读(301) | 评论 (0)编辑 收藏

如何做好移动互联网应用测试

  首先很高兴的是移动测试会第八期在ucloud的赞助下非常非常圆满的成功了。人真的越来越多,妹子也越来越漂亮了。同时感谢小A和永达以及小马试驾创业公司的支持。移动测试会虽然最早是我个人创立的,但是一个人的能力毕竟有限,所以这第八期说明了团结就是力量:),也希望之后大家更多的来支持我们。
  11月8号支付宝上海要开始一天的专场招聘,所以最近我面试也非常的频繁。之前我写过一篇吐槽文章——《面试要求真的不高》。今天的活动我也碰见了一些朋友来咨询我,所以在这里我想小小的谈论下如何进行移动无线应用的测试学习
  为什么我定位移动无线互联网的测试,还是应用的测试呢,因为我个人就是做应用测试的,所以我系统测试也做过,不过不深入,所以我就不想去讨论自己不熟悉的领域了。其实在很久前我画过一张技能树的图,也许比较粗糙,但是也还是有价值的。
  在之前的文章中也已经提到过了行业中的几类人,那么我们应该怎么如何客观的学习呢?请不要觉得自己已经工作很多时间就不愿意往下看了,反正看了你也不少块肉。请跟着以下的文字慢慢阅读,问问自己达到几点,不要自欺欺人就好。
  现在不会做测试的拼命到处问怎么做测试,现在在手动测试的拼命问怎么做自动化,现在做自动化的拼命问怎么写测试框架,现在写测试框架的拼命让团队使用,现在写框架并且让团队使用的拼命问除了维护框架还有什么别的可以做,现在没有事情做的拼命在问到底测试做什么呢?
  不知道每天会有多少人,每秒钟会有多少人会去问怎么做自动化,多少人会去问自己发展方向是什么,学习方向又是什么。我很明确的说,你没有方向原因在于你的无知,人最大的敌人就是恐惧和无知,两者相辅相成,最终就是一事无成。你问那么多有什么用,踏踏实实的先开始学有什么不好。
  比如你要学习移动互联网的无线应用测试了,比如你要开始学习Android的应用测试了。那么首先第一步你先看google 提供的文档吧,sdk文档不说详细,先浏览一遍吧。然后既然你是一个做测试的,我们就说正常的道路,你至少先将文档中与test这个关键字相关的工具也好,框架也好看一下吧。不懂的可以随时google或者百度来帮助我们阅读完sdk的docs。什么?你从来不看官方文档?android是谁生的?你连亲爹妈都不看,那么你看啥?看后妈?然后抱怨怎么看不懂?你怪谁?
  ok,假设你老老实实的看完了,然后你说你了解你们产品的业务了,你就可以做应用的功能测试了吗?非也,试问大部分测试真的觉得自己够资格去做功能测试吗?觉得功能测试很简单吗?问起来很多人都很自信满满的说自己非常了解业务。ok,试问,你的app中每个功能对应哪些接口你知道吗?这些接口会有什么核心参数知道吗?试问,你的产品的核心代码你有阅读过吗?你的产品前端app对应的后台服务的代码你有阅读过吗?你说你测试的产品有视频是吧,视频格式有哪些?常见分辨率有哪几种?常见码流有哪些?如果这些你都不知道并不代表你不回做功能测试或者业务测试,而是你根本无法深层次的去设计测试用例,那么请问你这算会功能测试了吗?还有的同学和我说用户体验测试,ok,继续问,请问你看过google提供的android的UI Design Guide吗?也许你没有看过,也许你根本不知道,不管是哪条,那么还谈什么用户体验呢?简单来讲,我们做一个测试很简单,要深入做很困难,就如同今天移动测试会上茉莉说的wifi测试,也许让也许人去测试wifi测试也会测试,但是深入呢?我们做测试要踏踏实实,不要浮躁,浮躁只会让你继续sb,但是不会阻止别人nb。
  ok,假设功能测试的点你都清楚了,然后你说你技术多多少少知道点,然后你就可以去做应用的自动化测试了吗?非也。我们一个一个来看。大部分先来做的是UI Automation,ok,appium我在这边就不说了,也许2w字都吐槽吐不完,我就说robotium。那么你第一步是先看下robotium官方网站的sample和wiki,不要到处问例子或者直接上来就导入jar包去做。了解完毕之后,那么可以继续深入的去了解junit 和instrumentation,了解这两者能够让你对robotium更了解并且在写用例的时候更得心应手。然后你会写了sample,能够跑通就算ok了么?非也,那么接着碰见的问题就是如何管理suite,如何管理数据,比如testng,如何做参数配置,比如config.xml,如何进行用例的架构的维护,使用op等。接着如何将其集成到持续集成中?如果你仔细看过instrumentationtestrunner的官方文档你就不会问了。接着除了native的,也许会碰见自定义控件的自动化,最后还有webview和h5的自动化等。那么这些前提是你要先去了解这个自定义控件以及webview到底是什么吧,而不是直接拿robotium自定义的api直接食用,然后抱怨说,啊呀这个怎么跑不通。最后记得一定要结合业务去做设计和断言。
  接着很多人还会觉得很牛逼的去找到BDD的框架,gem安装,套用cucumber和robotium。但是又会发现各种问题,在做这个事情之前继续试问,ruby gem管理你去学习了么?cucumber是啥知道了么?BDD框架源码结构有看过吗?step怎么封装知道吗?官方的github的wiki和issue有过一遍吗?都没有?那么你还问啥,先去看再做讨论。
  为什么我那么强调学习能力和态度,因为移动互联网的测试已经不是一个工具或者平台能够制霸的时代了。移动互联网现在更多的是注重实用开源框架,注重灵活的使用工具和代码来提升自己的效率,而不是拿来一个工具学会怎么用,然后就给你一个结果告诉你缺陷在什么地方。故而不是再去想什么“怎么做性能自动化测试”这种问题。无论你用360这种app也好,或者别的工具也罢,首先你拿到的数据并非是你公司团队想要的,其次请问这个数据你知道是怎么获取的吗?这个工具告诉你,cpu,内存,电量,流量,GPU绘制消耗,或者crash信息你就信啊?那么请问要你有啥用?你说你连数据怎么来的如果都不知道这个信息你敢用来作为测试报告吗?我们至少得自己去学习一下怎么获取这些数据吧,然后你编写service也好,使用shell也罢将这些做成自动化工具,那么也是有理有据。否则请问你真的会做自动化测试吗?最后记得一定要结合业务,那么势必要详细的了解业务,请看上面。
  接着来说安全测试也是一样。不要去想“有什么工具能够做安全测试啊?”。好了,这个问题我就不展开讨论了额,否则很多人肯定会觉得我在鄙视他们的智商。安全的测试和大部分人知道的测试根本就是两个领域,不要妄想你连上面几点都不知道的情况下就去做安全测试,真的不是我看不起你们。
  其实我们需要想象我们掌握的知识点是一个一个积木,而现在你先去看哪些积木你还没有,你先去获得。就比如java都不怎么会,然后就说自己要去做自动化,android都不了解就说要做自动化。没有太大必要。积木一个一个去搭,然后方向自然而然的就有了。目前学习移动无线的应用测试没有什么一定的路,每个人所在公司不同,所处业务不同,不要去问别人,最重要的是自己静下心来,记住,是静下心来问自己,自己真的不懂,如果自己是什么都不懂,那么就踏踏实实的从语言的学习,android本身的文档,工具等一个一个去学,不要浮躁。只要踏实了,不会没有方向,方向永远在你的心中。
  最后想强调一点的是,请眼光放长远,站在更高的高度看问题,不要做了10年还在做UI自动化,而且还根本做的不深入。记住,UI只不过是自动化中的冰山一角,你要去看的还有很多。不要局限自己,不要让公司局限你,除非你一辈子就打算在这个公司养老了。如果你不赞同我,那么随意,本来我就不指望所有人都点赞。

posted @ 2014-11-27 11:54 顺其自然EVO 阅读(252) | 评论 (0)编辑 收藏

仅列出标题
共394页: First 上一页 9 10 11 12 13 14 15 16 17 下一页 Last 
<2024年5月>
2829301234
567891011
12131415161718
19202122232425
2627282930311
2345678

导航

统计

常用链接

留言簿(55)

随笔分类

随笔档案

文章分类

文章档案

搜索

最新评论

阅读排行榜

评论排行榜