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

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

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

    qileilove

    blog已經(jīng)轉(zhuǎn)移至github,大家請訪問 http://qaseven.github.io/

    敏捷測試用例和User Story的關(guān)聯(lián)關(guān)系

      測試用例軟件測試的基礎(chǔ),是測試人員和開發(fā)團隊其他成員深入了解產(chǎn)品開發(fā)需求的介質(zhì)之一,也是產(chǎn)品質(zhì)量的保障。因此合理設(shè)計測試用例不僅有助于掌握客戶的產(chǎn)品真實需求,使得研發(fā)團隊所有人員對需求的理解處于同一平面上,也確保產(chǎn)品在整個動態(tài)的研發(fā)過程中,始終符合用例的設(shè)計,實現(xiàn)用戶最終期望的功能。
      在傳統(tǒng)開發(fā)模式中,需求分析往往占用較長時間,分析階段由核心的開發(fā)人員和測試人員參與。在進入研發(fā)階段后,將需求傳遞給其他開發(fā)和測試人員,測試人員根據(jù)需要在設(shè)計完測試用例和開發(fā)完成以后,進行各種類型的測試。這樣的結(jié)果往往由于測試人員沒有參與最初的需求討論,因此對需求的理解存在一定偏差,很多用例的編寫基于測試人員的假設(shè)。而且因為開發(fā)周期較長,最終交付的功能已經(jīng)發(fā)生改變。
      在敏捷開發(fā)模式中,測試人員和開發(fā)人員的節(jié)奏是同步的,即開發(fā)人員增量地開發(fā)功能的同時或甚至之前,測試人員也增量地設(shè)計相應(yīng)的測試用例,等功能完成后馬上可以對功能性測試。對于還未開始開發(fā)或者需求暫不明確的功能,不進行測試用例的深度分析工作。這樣就能把更多的精力投入到最重要功能上去。
      功能性測試用例和需求的關(guān)聯(lián)
      在敏捷測試中,需求一般以用戶故事的形式存在,是將用戶的需求用實例或者故事的方式記錄到待辦事項列表中(backlog)。 測試用例和用戶故事之間是緊密關(guān)聯(lián)的,在產(chǎn)品經(jīng)理(PO)設(shè)計、解釋完成用戶故事后,測試人員根據(jù)用戶故事設(shè)計測試用例。測試用例可以是對用戶故事驗收標準的細分,也可以把多個用戶故事進行串聯(lián)形成一個用例,這取決于用戶故事和測試用例設(shè)計的粒度大小。由于用戶故事會隨著需求的細化和拆分,因此很難對用戶故事和測試用例做一一對應(yīng),而且后期維護成本較高,因此需要在用戶故事和測試用例中增加模塊屬性,來管理測試用例和用戶故事之間的關(guān)聯(lián)關(guān)系。而且兩者應(yīng)該在一個統(tǒng)一平臺進行維護和更新。
      非功能性測試用例和需求的關(guān)聯(lián)
      對于非功能性的測試用例,往往并不關(guān)聯(lián)具體功能模塊,但是會有對應(yīng)的用戶故事,例如:性能需求,安全需求等,建立這類測試的測試用例的時候,可以通過建立性能模塊,安全模塊等并不存在的模塊,和其他用例等同處理。
      單元/組件測試用例的關(guān)聯(lián)
      敏捷軟件開發(fā)的其中一個非常有用的實踐是測試驅(qū)動開發(fā),這需要開發(fā)人員編寫單元測試,在單元測試過程中,對于復(fù)雜邏輯的函數(shù)或者組件,也需要設(shè)計單元測試用例。這些測試用例本身不以實際文檔的形式存在用例庫中,往往和測試人員一起討論并參考測試人員設(shè)計的測試用例來進行編寫簽入到單元測試中。因此做測試用例個數(shù)統(tǒng)計時,需要包括單元/組件測試測試用例數(shù)量,或者為單元測試/組件測試單獨設(shè)立統(tǒng)計指標。同時沒有特別必要和模塊或者用戶故事做關(guān)聯(lián)。

    posted @ 2014-05-20 10:21 順其自然EVO 閱讀(244) | 評論 (0)編輯 收藏

    11-3URLTestDemo實例操作完成URL單元測試

     11-3URLTestDemo
      1、File -> New -> Project
      在左邊模板中選擇Visual C#里的Web,對應(yīng)到的項目類型選擇ASP.NET MVC3 Web Application,并給項目取名字為11-3URLTestDemo,默認的解決方案名自動為相應(yīng)的11-3URLTestDemo。
      2、在解決方案管理器中,鼠標右擊解決方案名字Solution’ 11-3URLTestDemo’,選擇Add -> New Project,如下圖。
      打開“Add New Project”對話框后,在左邊的模板選擇Visual C#里的Test,對應(yīng)的項目類型選擇Test Project,并取名字為URLTestDemo.UnitTests,如下圖。
      創(chuàng)建好項目后,可以將不用的Class1.cs文件和URLTestDemo.UnitTests項目中的UnitTest1.cs文件刪除掉。
      3、給URLTestDemo.UnitTests項目添加Moq程序包和對項目11-3URLTestDemo的依賴。
      在URLTestDemo.UnitTests項目名上右擊鼠標,選擇Manage NuGet Packages…,在打開的對話框中在線搜索Moq,并安裝。再次在URLTestDemo.UnitTests項目名上右擊鼠標,選擇Add Reference,在打開的對話框中選擇對項目11-3URLTestDemo的依賴。

    posted @ 2014-05-20 10:21 順其自然EVO 閱讀(188) | 評論 (0)編輯 收藏

    在Linux環(huán)境下使用TCP的keepalive機制

     Linux內(nèi)置支持keepalive機制,為了使用它,你需要使能TCP/IP網(wǎng)絡(luò),為了能夠配置內(nèi)核在運行時的參數(shù),你還需要procfs和sysctl的支持。
      這個過程涉及到keepalive使用的三個用戶驅(qū)使的變量:
      tcp_keepalive_time:表示的是最近一次數(shù)據(jù)包(簡單的不含數(shù)據(jù)的ACKs包)發(fā)送與第一次keepalive探針發(fā)送之間的時間間隔;當(dāng)連接被標記為keepalive之后,這個計數(shù)器就不會再使用。
      tcp_keepalive_intvl:表示的是并發(fā)keepalive探針之間的時間間隔。
      tcp_keepalive_probes:在確定連接已經(jīng)斷開并且通知應(yīng)用層之前所發(fā)送的沒有得到回復(fù)的探針數(shù)。
      對于這三個參數(shù)可以在Linux系統(tǒng)的終端中查看和修改它們的缺省值:
      查看三個參數(shù)的值:
    [root@Server3 ~]# cat /proc/sys/net/ipv4/tcp_keepalive_time
    7200
    [root@Server3 ~]# cat /proc/sys/net/ipv4/tcp_keepalive_intvl
    75
    [root@Server3 ~]# cat /proc/sys/net/ipv4/tcp_keepalive_probes
    9
      通過命令對這三個參數(shù)值進行修改(圖中將三個參數(shù)值分別設(shè)為:600、60、20):
      [root@Server3 ~]# echo 600 > /proc/sys/net/ipv4/tcp_keepalive_time
      [root@Server3 ~]# echo 60 > /proc/sys/net/ipv4/tcp_keepalive_intvl
      [root@Server3 ~]# echo 6 > /proc/sys/net/ipv4/tcp_keepalive_probes
      這種方式重置三個參數(shù)值,在系統(tǒng)重啟后三個參數(shù)的值又會恢復(fù)到默認值,具體如何讓系統(tǒng)永遠記住自己設(shè)置的值,可參考其他資料,我們現(xiàn)在關(guān)系的是如何在程序中使用keepalive機制并設(shè)置這三個參數(shù)的值。
      在程序中使用keepalive機制
      想在程序中使用這種機制,只需要使用setsockopt()函數(shù)。
      setsockopt()函數(shù)用于任意類型、任意狀態(tài)套接口的設(shè)置選項值。盡管在不同協(xié)議層上存在選項,但本函數(shù)僅定義了最高的“套接口”層次上的選項。選項影響套接口的操作,諸如加急數(shù)據(jù)是否在普通數(shù)據(jù)流中接收,廣播數(shù)據(jù)是否可以從套接口發(fā)送等等。
      下面為setsockopt()函數(shù)的原型:
      #include <sys/types.h>
      #include <sys/socket.h>
      int setsockopt(int sock, int level, int optname, const void *optval, socklen_t optlen);
      參數(shù):
      sock:將要被設(shè)置或者獲取選項的套接字。
      level:選項所在的協(xié)議層。
      optname:需要訪問的選項名。
      optval:對于getsockopt(),指向返回選項值的緩沖。對于setsockopt(),指向包含新選項值的緩沖。
      optlen:對于getsockopt(),作為入口參數(shù)時,選項值的最大長度。作為出口參數(shù)時,選項值的實際長度。對于setsockopt(),現(xiàn)選項的長度。
      為了使用函數(shù)setsockopt()將某個特定的套接字的keepalive機制打開,參數(shù)s是一個socket文件描述符,必須要在這之前使用socket()函數(shù)進行創(chuàng)建;參數(shù)level必須設(shè)置為SOL_SOCKET;第三個參數(shù)必須設(shè)置為SO_KEEPALIVE;optval參數(shù)必須是一個布爾型整型變量,表示想要使能這個選項;最后一個參數(shù)表示第四個參數(shù)的大小。
     程序?qū)崿F(xiàn)心跳包檢測機制
      首先要在備份機和源機之間建立一個專門的socket鏈路來進行心跳檢測。
      在源機端,在進行數(shù)據(jù)遷移之前,會建立一個socket來監(jiān)聽備份機的連接,并將這個socket和對應(yīng)的處理函數(shù)放入原軟件的io處理列表中,代碼如下:
    int listenfd;
    struct sockaddr_in server_sin;
    /* establish socket */
    listenfd=socket(AF_INET,SOCK_STREAM,0);
    server_sin.sin_family=AF_INET;
    server_sin.sin_addr.s_addr=htonl(INADDR_ANY);
    server_sin.sin_port=htons(PORT);
    bind(listenfd,(struct sockaddr *)&server_sin,sizeof(server_sin));
    /* establish end */
    listen(listenfd,1024);
    qemu_set_fd_handler2(listenfd, NULL, tcpkeepalive_server, NULL,
    (void *)(intptr_t)listenfd);
      該socket對應(yīng)的處理函數(shù)如下:
    static void tcpkeepalive_server(void *opaque)
    {
    int connfd;
    struct sockaddr_in client_sin;
    socklen_t client_len=sizeof(client_sin);
    int listenfd = (intptr_t)opaque;
    connfd=accept(listenfd,(struct sockaddr *)&client_sin,&client_len);
    }
      在備份機端,當(dāng)其開始作為備份機時,會建立socket連接源機的監(jiān)聽端,并設(shè)置對應(yīng)的tcpkeepalive參數(shù),然后將socket和對應(yīng)的處理函數(shù)加入io處理列表。
      我們建立的socket是一個心跳檢測專用鏈路,其上不會有數(shù)據(jù)流動,只有一種情況備份機端會收到數(shù)據(jù),那就是源端出現(xiàn)了故障,tcpkeepalive機制會返回一個錯誤信息,所以捕捉到了這個信息,備份機就會跳轉(zhuǎn)到對應(yīng)的處理函數(shù),接替源機開始運行。
      對應(yīng)代碼如下:
    int sockfd;
    struct sockaddr_in sin;
    int optval;
    socklen_t optlen = sizeof(optval);
    sockfd=socket(AF_INET,SOCK_STREAM,0);
    sin.sin_family=AF_INET;
    sin.sin_addr.s_addr=addr.sin_addr.s_addr;
    sin.sin_port=htons(PORT);
    optval = 1;
    setsockopt(sockfd, SOL_SOCKET, SO_KEEPALIVE, &optval, optlen);
    optval = 5;
    setsockopt(sockfd, SOL_TCP, TCP_KEEPCNT, &optval, optlen);
    optval = 1;
    setsockopt(sockfd, SOL_TCP, TCP_KEEPIDLE, &optval, optlen);
    optval = 1;
    setsockopt(sockfd, SOL_TCP, TCP_KEEPINTVL, &optval, optlen);
    connect(sockfd,(struct sockaddr *)&sin,sizeof(sin));
    qemu_set_fd_handler2(sockfd, NULL, tcpkeepalive_vm_start, NULL,
    (void *)(intptr_t)sockfd);
      該socket對應(yīng)的處理函數(shù)很簡單,就是讓備份機開始運行:
      static void tcpkeepalive_vm_start(void *opaque)
      {
      vm_start();
      }

    posted @ 2014-05-19 10:17 順其自然EVO 閱讀(1063) | 評論 (0)編輯 收藏

    JAVA程序在windows計劃任務(wù)里執(zhí)行的問題

     寫了一個簡單的JAVA類,定時從一個ORACLE數(shù)據(jù)庫取數(shù)據(jù)放到另一個mysql數(shù)據(jù)庫中,寫了一個腳本如下:
    set classpath=.;%classpath%;./classes12.jar;./mysql-connector-java-5.1.6-bin.jar;E:\workfile\SAP-to-MYSQL\getsapdata.class
    set path=%path%;D:\develop\Java\jdk1.6\bin
    set JAVA_HOME=D:\develop\Java\jdk1.6
    cd  E:\workfile\SAP-to-MYSQL
    java getsapdata >>getsapdata.log
      手動執(zhí)行的時候完全沒有問題,當(dāng)時加到windows計劃任務(wù)里就是執(zhí)行不成功,程序執(zhí)行的DOS窗口一閃而過,也看不到是什么錯誤,網(wǎng)上搜了半天,也沒找到可行的答案,后來在腳本里加入了延遲語句 ping -n 5 127.1>nul,才看到報的是找不到類的錯誤:
    Exception in thread "main" java.lang.NoClassDefFoundError: getsapdata
    Caused by: java.lang.ClassNotFoundException: getsapdata
    at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301
    at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
    Could not find the main class: getsapdata.  Program will exit.
      明明就在這個目錄下,怎么就找不到呢,迷惑,又是一陣搜索,還是沒答案,想著難道windows定時任務(wù)挑分區(qū)嗎,就把程序挪到C盤,結(jié)果計劃任務(wù)真的執(zhí)行成功了,那是怎么回事呢,想想找不到類怎么也應(yīng)該是環(huán)境變量路徑類的問題吧,后來想到我以前經(jīng)常用DOS窗口敲命令,打開DOS窗口默認在C盤,而我的應(yīng)用一般都在其他分區(qū),所以每次敲命令比如:cd e:\work\shell,運行完后當(dāng)前路徑并沒有改變,必須再敲一下e:,才進入到e:\work\shell目錄,會不會是windows計劃任務(wù)開啟DOS執(zhí)行窗口也是默認在C盤,我雖然在腳本里加了 cd  E:\workfile\SAP-to-MYSQL命令,但實際上系統(tǒng)的當(dāng)前路徑還是會在默認的C:\Users\Administrator 目錄下,我的程序移動到C盤的時候,因為系統(tǒng)默認路徑也在C盤,所以 cd  命令是成功進入了c盤的我的應(yīng)用程序目錄,但不是C盤的就不行了,網(wǎng)上查了下,原來cd 的時候加個 /d 參數(shù)可以直接改變盤符,哎,以前居然一致沒用過,把腳本中的 cd 命令改為 cd /d E:\workfile\SAP-to-MYSQL  后,再次執(zhí)行計劃任務(wù)則執(zhí)行成功。

    posted @ 2014-05-19 10:16 順其自然EVO 閱讀(933) | 評論 (0)編輯 收藏

    Tomcat配置數(shù)據(jù)庫連接池

    本例為myeclipse+tomcat7.0+sqlserver2008配置數(shù)據(jù)庫連接池
      具體步驟:
      1、在server.xml中設(shè)置數(shù)據(jù)源,以sql server 2008數(shù)據(jù)庫為例,如下:
      在<GlobalNamingResources> </GlobalNamingResources>節(jié)點中加入,
    <Resource
    name="jdbc/DBPool"
    type="javax.sql.DataSource"
    password="aaaaaa"
    driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
    maxIdle="2"
    maxWait="5000"
    username="sa"
    url="jdbc:sqlserver://localhost:1433;DataBaseName=COFFEE"
    maxActive="4"/>
      屬性說明:name,數(shù)據(jù)源名稱,通常取”jdbc/XXX”的格式;
      type,”javax.sql.DataSource”;
      password,數(shù)據(jù)庫用戶密碼;
      driveClassName,數(shù)據(jù)庫驅(qū)動;
      maxIdle,最大空閑數(shù),數(shù)據(jù)庫連接的最大空閑時間。超過空閑時間,數(shù)據(jù)庫連接將被標記為不可用,然后被釋放。設(shè)為0表示無限制。
      MaxActive,連接池的最大數(shù)據(jù)庫連接數(shù)。設(shè)為0表示無限制。
      maxWait ,最大建立連接等待時間。如果超過此時間將接到異常。設(shè)為-1表示無限制。
      2、在你的web應(yīng)用程序的web.xml中設(shè)置數(shù)據(jù)源參考,如下:
      在<web-app></web-app>節(jié)點中加入,
    <resource-ref>
    <description>DB Connection Pool</description>
    <res-ref-name>jdbc/DBPool</res-ref-name>
    <res-type>javax.sql.DataSource</res-type>
    <res-auth>Container</res-auth>
    <res-sharing-scope>Shareable</res-sharing-scope>
    </resource-ref>
      子節(jié)點說明: description,描述信息;
      res-ref-name,參考數(shù)據(jù)源名字,同上一步的屬性name;
      res-type,資源類型,”javax.sql.DataSource”;
      res-auth,”Container”;
      res-sharing-scope,”Shareable”;3、在tomcat目錄下的context.xml中設(shè)置數(shù)據(jù)源鏈接,如下:
      在<Context></Context>中加入:
    <ResourceLink
    name="jdbc/DBPool"
    type="javax.sql.DataSource"
    global="jdbc/DBPool"/>
      屬性說明:name,同第2步和第3步的屬性name值,和子節(jié)點res-ref-name值;
      type,同樣取”javax.sql.DataSource”;
      global,同name值。
      4、測試:
    import java.sql.Connection;
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.SQLException;
    import javax.naming.Context;
    import javax.naming.InitialContext;
    import javax.naming.NamingException;
    import javax.sql.DataSource;
    public class Test {
    private static DataSource pool;
    public static void main(String[] args) {
    Context env = null;
    try {
    env = (Context) new InitialContext().lookup("java:comp/env");
    pool = (DataSource)env.lookup("jdbc/DBPool");
    if(pool==null)
    System.err.println("'DBPool' is an unknown DataSource");
    } catch(NamingException ne) {
    ne.printStackTrace();
    }
    Connection conn;
    try {
    conn = pool.getConnection();
    String sql = "select * from allbook";
    PreparedStatement ps;
    ps = conn.prepareStatement(sql);
    ResultSet rs=ps.executeQuery();
    while(rs.next()){
    System.out.println(rs.getString("BOOKNAME"));
    }
    } catch (SQLException e) {
    e.printStackTrace();
    }
    }
    }

    posted @ 2014-05-19 10:16 順其自然EVO 閱讀(286) | 評論 (0)編輯 收藏

    Jmeter參數(shù)化

    參數(shù)化:簡單的來理解一下,我們錄制了一個腳本,這個腳本中有登錄操作,需要輸入用戶名和密碼,假如系統(tǒng)不允許相同的用戶名和密碼同時登錄,或者想更好的模擬多個用戶來登錄系統(tǒng)。
      這個時候就需要對用戶名和密碼進行參數(shù)化,使每個虛擬用戶都使用不同的用戶名和密碼進行訪問。
      前提:
      假如,我們錄制好了一個腳本(可以用badboy工具錄制),在jmeter中打開,找到有用戶名和密碼的頁面。如下:
      1.我們需要“參數(shù)化”的數(shù)據(jù),這里我用記事本寫了五個用戶名和密碼,保存為.dat格式的文件。
      我將這個文件放在了我的( D:\test.dat  )路徑下。關(guān)于如何得到成百上千的用戶名和密碼,首先要在數(shù)據(jù)庫中創(chuàng)建這些數(shù)據(jù),將數(shù)據(jù)導(dǎo)出,整理保存,這里就不深究。
      2.好,我們要編寫函數(shù)來調(diào)用這個test.dat文件,怎么弄,
      點擊菜單欄“選項”---->函數(shù)助手對話框,看下圖。
     3.把我們寫好的函數(shù)復(fù)制到“登錄”頁面用戶名和密碼胡位置。
      好了,現(xiàn)在我們的參數(shù)化設(shè)置完成,在腳本的時候,會調(diào)用我們D盤下面的test.dat文件,第一列是用戶,第二列是密碼。
      注意用戶名和密碼是一一對應(yīng)的,中間用戶逗號(,)隔開。 3.把我們寫好的函數(shù)復(fù)制到“登錄”頁面用戶名和密碼胡位置。
      好了,現(xiàn)在我們的參數(shù)化設(shè)置完成,在腳本的時候,會調(diào)用我們D盤下面的test.dat文件,第一列是用戶,第二列是密碼。
      注意用戶名和密碼是一一對應(yīng)的,中間用戶逗號(,)隔開。

    posted @ 2014-05-19 10:15 順其自然EVO 閱讀(670) | 評論 (0)編輯 收藏

    Jira 6.0.3 安裝與破解

    一、 安裝準備
      1. 去Jira官方網(wǎng)站下載
      http://www.atlassian.com/software/jira/downloads/binary/atlassian-jira-6.0.3-x32.exe
      2. 去Jira官方網(wǎng)站注冊一個帳號,以便獲取license。
      https://id.atlassian.com/profile/signUp.action?application=mac&continue=https://my.atlassian.com
      二、 安裝
      1. 雙擊atlassian-jira-6.0.3-x32.exe文件啟動安裝過程。
      安裝完成后默認將打開Jira Portal進行配置。
      Server Language選擇English(United States),其他保留默認選項,一直單擊Next按鈕。
      當(dāng)跳轉(zhuǎn)到license key頁面時,選擇"I have an account but no key". 這時會讓你輸入注冊帳號和密碼,然后單擊按鈕“sign in and generate license key”,將為你自動生成一個試用版的license  key. 繼續(xù)直到安裝完成。
      這時你會看到在System Dashboard頁面時License顯示為
      JIRA: Evaluation
      (Expires in 29 days, 2 hours on 12/Mar/14)
      2. Stop Jira Service
      開始菜單 -> Jira -> Stop Jira Service。
      三、 破解
      1. 下載Jira 6.0.3破解包
      http://download.csdn.net/download/joinandjoin/5542683
      2. 解壓破解包到你的硬盤指定目錄下,然后按如下指令操作。
      2.a 用atlassian-extras-2.2.2.jar替換你的JIRA的安裝目錄的\atlassian-jira\WEB-INF\lib同名jar包。
      2.b 用atlassian-universal-plugin-manager-plugin-2.10.1.jar替換你的JIRA的安裝目錄的\atlassian-jira\atlassian-bundled-plugins.zip中的同名jar包。
      2.c 查看你在Jira網(wǎng)站的注冊帳號信息,按照如下格式填寫好自己的license,保存為txt文件,稍后使用。
    Description=JIRA: Commercial,
    CreationDate=你的安裝日期,格式(yyyy-mm-dd),
    jira.LicenseEdition=ENTERPRISE,
    Evaluation=false,
    jira.LicenseTypeName=COMMERCIAL,
    jira.active=true,
    licenseVersion=2,
      MaintenanceExpiryDate=你想設(shè)置的失效日期如:2099-12-31,
      Organisation=你的Company Name,
      SEN=你申請到的SEN注意沒有前綴LID,
      ServerID=你申請到的ServerID,
      jira.NumberOfUsers=-1,
      LicenseID=LID你申請到的SEN,注意LID前綴不要丟掉,
      LicenseExpiryDate=你想設(shè)置的失效日期如:2099-12-31,
      PurchaseDate=你的安裝日期,格式(yyyy-mm-dd)
      (注意,各項之間以逗號分隔)
    3. 啟動Jira Service
      開始菜單 -> Jira -> Start Jira Service
      4. 訪問Jira Portal,更新License。
      4.a 開始菜單 -> Jira -> Access JIRA,你將進入System Dashboard。這時候你看到的License顯示為“JIRA:EVALUATION”。
      4.b 單擊JIRA:EVALUATION鏈接,進入License管理頁面。打開你在2.c步驟準備好的txt文件,將內(nèi)容拷貝、粘貼到License文本框,單擊“Add”按鈕,License即更新成功。這時你應(yīng)該看到License Type顯示為
      JIRA:Commercial
      (Support and updates available until 30/Dec/99)。
      恭喜,破解成功!

    posted @ 2014-05-19 10:14 順其自然EVO 閱讀(2270) | 評論 (1)編輯 收藏

    Selenium C# 測試步驟

    1: VS2010中需要添加的DLL文件如下(注意,某些DLL是在http://docs.seleniumhq.org/download/下載,請選用匹配的.net 文件夾中的DLL文件,因為同樣的DLL名稱的文件會在不同文件夾中,請選對文件夾)
    名稱
      2:C#語句參照的是
      網(wǎng)址:http://www.docin.com/p-748751347.html
      3:可以測試多種瀏覽器,我正在研究其中的用途中,希望能跟大家分享經(jīng)驗。
      多種瀏覽器打開的語句:
    ISelenium selenium = new DefaultSelenium("localhost", 4444, "*chrome", "http://www.baidu.com/");
    //Open FireFox
    ISelenium selenium = new DefaultSelenium("localhost", 4444, "*iexploreproxy", "http://www.baidu.com/");
    //Open IE
    ISelenium selenium = new DefaultSelenium("localhost", 4444, "*googlechrome", "http://www.baidu.com/");
    //Open Google
      4: 我再總結(jié)一下流程
      參考:
      http://blog.csdn.net/chadcao/article/details/7989550
      1:下載IDE
      2:下載并安裝jdk
      3:下載RC Server
      http://docs.seleniumhq.org/download/
      (啟動Server后,就可以在VS2010中執(zhí)行C#的腳本)
      4:下載selenium-remote-control-1.0.3 (因為里面有相關(guān)的DLL文件可以放到VS2010中使用)
      5:下載Selenium Client & WebDriver Lanugage Bindings
      http://docs.seleniumhq.org/download/ (因為里面有相關(guān)的DLL文件可以放到VS2010中使用)
      6:錄制,編輯IDE的運行腳本,把以上相關(guān)的DLL文件放入VS2010中,運行RC Server
    版權(quán)聲明:本文出自 wchair 的51Testing軟件測試博客:http://www.51testing.com/?153101
    原創(chuàng)作品,轉(zhuǎn)載時請務(wù)必以超鏈接形式標明本文原始出處、作者信息和本聲明,否則將追究法律責(zé)任。

    posted @ 2014-05-19 10:14 順其自然EVO 閱讀(1108) | 評論 (0)編輯 收藏

    如何利用開發(fā)者賬號重簽ipa文件,并部署到IOS設(shè)備做測試

     最近在搞IOS平臺的測試,遇到了個不大不小的問題
      測試build是通過TestFlight遞交的,測試人員手上沒有源代碼,開發(fā)人員在國外,不方便共享源碼,如何能做IOS的自動化測試
      經(jīng)過折騰,發(fā)現(xiàn)了個可能的辦法,
      1. 先通過TestFlight安裝build
      2. 再把build通過ifanbox把build導(dǎo)出來成為ipa文件
      3. 下面就需要把ipa文件重新簽名,方法有兩種
      方法一:
      利用商業(yè)化工具簽名,SeeTest支持把ipa重新簽名,簽名需要提供 provision文件,和開發(fā)者證書私鑰和密碼
      方法二:
      自己想辦法簽,代碼參考如下
    unzip app.ipa
    rm -rf Payload/MyApp.app/_CodeSignature/
    cp ~/Downloads/AdHoc.mobileprovision Payload/MyApp.app/embedded.mobileprovision
    codesign -f -s "iPhone Distribution: Company Certificate" --resource-rules Payload/MyApp.app/ResourceRules.plist Payload/MyApp.app
    zip -qr app-resigned.ipa Payload/
      其中"iPhone Distribution: Company Certificate"是你證書的common name, 別的沒什么要注意的。
      方法三:
      網(wǎng)上有推薦用一個叫iresign的工具簽名,其實挺好用,該工具只能工作在mac下面
      個人推薦用方法三,但是要注意一個問題,就是iresign需要你提供四個信息,一個是ipa文件,一個是provision文件,一個是證書的common name,最后一個是entitlements.plist文件。前三個想必大家都懂,但是第四個之前真沒聽過,網(wǎng)上資料也有限。
      請用下面的方法生成entitlements.plist文件
    /usr/libexec/PlistBuddy -x -c "print :Entitlements " /dev/stdin <<< $(security cms -D -i production.app/embedded.mobileprovision) > entitlements.plist
    /usr/libexec/PlistBuddy -c 'Set :get-task-allow true' entitlements.plist
      生成之后,再利用iresign,就可以做出一個可以被xcode instrument的ipa包了。

    posted @ 2014-05-19 10:13 順其自然EVO 閱讀(2271) | 評論 (1)編輯 收藏

    Android中如何使用JUnit進行單元測試

      在我們?nèi)粘i_發(fā)android app的時候,需要不斷地進行測試,所以使用JUnit測試框架顯得格外重要,學(xué)會JUnit可以加快應(yīng)用的開發(fā)周期。
      Android中建立JUnit測試環(huán)境有以下兩種方法。
      一、直接在需要被測試的工程中新建測試類
      集成步驟:
      1.在androidManifest.xml文件中添加以下代碼:
    <instrumentation android:name="android.test.InstrumentationTestRunner"
    android:targetPackage="com.example.junittest" android:label="@string/app_name"
    ></instrumentation>
      <uses-library android:name="android.test.runner"/>
      以上代碼配置是添加測試指令和引入測試環(huán)境,完整的清單文件如下:
    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.junittest"
    android:versionCode="1"
    android:versionName="1.0" >
    <uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="18" />
    <instrumentation android:name="android.test.InstrumentationTestRunner"
    android:targetPackage="com.example.junittest" android:label="@string/app_name"
    ></instrumentation>
    <application
    android:allowBackup="true"
    android:icon="@drawable/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <uses-library android:name="android.test.runner"/>
    <activity
    android:name="com.example.junittest.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
    </activity>
    </application>
    </manifest>
     2.新建一個測試測試類并繼承AndroidTestCase類,編寫測試方法,在測試方法內(nèi)使用斷言assert來測試要測試的方法。
      3.點擊右面的大綱視圖,選擇要測試的方法,右鍵,run as --->Android JUnit test
      下面通過一個簡單的示例來演示一下如何使用JUnit單元測試
      1、先創(chuàng)建簡單的待測試類Calculator.java
    package com.example.junittest;
    public class Calculator {
    public int add(int x,int y){
    return x+y;
    }
    public int sub(int x,int y){
    return x-y;
    }
    public int divide(int x,int y){
    return x/y;
    }
    public int multiply(int x,int y){
    return x*y;
    }
    }
      2、創(chuàng)建一個測試類,此類需要繼承自AndroidTestCase
      示例代碼如下:
    package com.example.test;
    import junit.framework.Assert;
    import com.example.junittest.Calculator;
    import android.test.AndroidTestCase;
    import android.util.Log;
    public class CalculatorTester extends AndroidTestCase {
    private static final String TAG = CalculatorTester.class.getSimpleName();
    private Calculator calculator;
    /**
    *  This method is invoked before any of the test methods in the class.
    *  Use it to set up the environment for the test (the test fixture. You can use setUp() to instantiate a new Intent with the action ACTION_MAIN. You can then use this intent to start the Activity under test.
    */
    @Override
    protected void setUp() throws Exception {
    Log.e(TAG, "setUp");
    calculator = new Calculator();
    super.setUp();
    }
    /**
    * 測試Calculator的add(int x, int y)方法
    * 把異常拋給測試框架
    * @throws Exception
    */
    public void testAdd() throws Exception{
    int result = calculator.add(3, 5);
    Assert.assertEquals(8, result);
    }
    /**
    * 測試Calculator的divide(int x, int y)方法
    * 把異常拋給測試框架
    * @throws Exception
    */
    public void testDivide() throws Exception{
    int result = calculator.divide(10, 0);
    Assert.assertEquals(10, result);
    }
    /**
    * This method is invoked after all the test methods in the class.
    * Use it to do garbage collection and to reset the test fixture.
    */
    @Override
    protected void tearDown() throws Exception {
    Log.e(TAG, "tearDown");
    calculator = null;
    super.tearDown();
    }
    }
      一個好的習(xí)慣是每個測試方法都拋出異常:throws Exception,然后通過Assert對結(jié)果進行斷言。
      3、通過大綱視圖運行測試方法
      綠條表示測試通過,在代碼中我們測試的時3+5是否等于8,所以結(jié)果肯定是通過的,如果我們把assertEquals()中的8改為5的話,會出現(xiàn)以下結(jié)果:
      紅條表示測試沒通過,點擊右邊的錯誤信息可以定位到出錯的代碼行。  二、創(chuàng)建一個專門用于測試的工程
      推薦創(chuàng)建專門的測試工程,因為這樣可以降低代碼的耦合度。
      集成步驟:
      1.新建工程,選擇new ---- >   other  ---->android Test Project
      2.選擇要測試的工程
      3.接著和第一種建立測試類的方法是一樣的,這里比較簡單就略過了。
      使用這種方法的話,androidManifest.xml中已經(jīng)自動配置好相關(guān)的參數(shù),無需在進行配置,比較方便。

    posted @ 2014-05-19 10:10 順其自然EVO 閱讀(6936) | 評論 (1)編輯 收藏

    僅列出標題
    共394頁: First 上一頁 110 111 112 113 114 115 116 117 118 下一頁 Last 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導(dǎo)航

    統(tǒng)計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 国产大片免费网站不卡美女| 亚洲国产精品一区二区九九| 亚洲人av高清无码| 四虎在线播放免费永久视频| 99re6在线精品免费观看| 亚洲无线一二三四区| jizzjizz亚洲| 国产va精品免费观看| a级精品九九九大片免费看| 国产成人无码精品久久久免费 | 免费看国产成年无码AV片| 国产久爱免费精品视频 | 亚洲国产小视频精品久久久三级| 久久国产免费观看精品3| 一级做a爰片久久免费| 日韩国产精品亚洲а∨天堂免| 亚洲综合在线成人一区| 亚洲乱码国产一区三区| 成人免费无码大片A毛片抽搐色欲 成人免费无码大片a毛片 | 免费看香港一级毛片| 91久久精品国产免费一区| h视频在线观看免费网站| h片在线观看免费| 最近免费中文字幕MV在线视频3| 免费人成在线观看播放a| 亚洲精品一卡2卡3卡四卡乱码| 久久久久亚洲精品无码网址色欲| 又大又硬又粗又黄的视频免费看| 亚洲高清国产拍精品熟女| 亚洲熟妇av一区| 亚洲国产午夜精品理论片在线播放| 国产大陆亚洲精品国产| 亚洲精品美女久久7777777| 免费VA在线观看无码| 精品四虎免费观看国产高清午夜| yellow免费网站| 日韩免费高清大片在线| 男女作爱在线播放免费网站| 91成人免费观看在线观看| 2019中文字幕在线电影免费| a级毛片免费在线观看|