<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    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 閱讀(318) | 評論 (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 閱讀(211) | 評論 (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 閱讀(593) | 評論 (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 閱讀(246) | 評論 (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 閱讀(210) | 評論 (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 閱讀(248) | 評論 (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 閱讀(309) | 評論 (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 閱讀(1365) | 評論 (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 閱讀(330) | 評論 (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 閱讀(259) | 評論 (0)編輯 收藏

    僅列出標題
    共394頁: First 上一頁 9 10 11 12 13 14 15 16 17 下一頁 Last 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲欧美日韩中文无线码| 亚洲精品宾馆在线精品酒店| 国产亚洲AV无码AV男人的天堂| 99热在线观看免费| MM1313亚洲精品无码久久| 亚洲av第一网站久章草| 久久久亚洲裙底偷窥综合| 久久国产亚洲电影天堂| 亚洲AV日韩精品久久久久久| 亚洲毛片在线观看| 亚洲成A∨人片天堂网无码| 最近2019中文字幕免费直播 | 国产精品免费小视频| 无码国产精品一区二区免费3p | 国产亚洲Av综合人人澡精品| 精品成人一区二区三区免费视频 | 久久精品亚洲AV久久久无码 | 日本一道在线日本一道高清不卡免费 | 亚洲最大黄色网址| 亚洲国产一二三精品无码| 亚洲成av人片天堂网| 亚洲精品资源在线| 久久亚洲精品国产亚洲老地址| 亚洲成年轻人电影网站www| 亚洲一区二区影院| 亚洲啪啪AV无码片| 亚洲AV伊人久久青青草原| 久久久久亚洲精品无码网址| 亚洲国产精品成人精品无码区在线 | 精品国产免费人成电影在线观看| 三年片在线观看免费观看高清电影 | 西西大胆无码视频免费| 特级淫片国产免费高清视频| 亚洲黄色免费网站| 精品国产免费观看| 国产AⅤ无码专区亚洲AV| 亚洲av手机在线观看| 亚洲国产另类久久久精品黑人 | 亚洲av无码专区在线观看素人| 亚洲国产精品成人久久| 亚洲精品综合在线影院|