<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/

    談談測試用例的分類

    一般來講,測試用例設計的時候可以采用二維的方式歸類:
      橫向:根據對用的FDD進行分類。
      縱向:根據測試類型進行分類。
      橫向
      橫向的分類主要根據功能模塊進行劃分。根據產品的不同而有所不同,但是一般每一個測試用例,都能追溯到一個具體的功能需求。具有類似功能需求的測試用例會放在一起,形成一個功能模塊的測試集。
      縱向
      縱向的分類主要根據測試的類型進行分類。主要有以下幾種類型:
      BAT(Build Acceptance Test)
      這類測試用例屬于最基本的測試用例。一般都不復雜,但都是非常重要的基本用例。BAT測試用例具有很高的穩定性。BAT的測試用例大概會占測試用例的總數的30%左右。BAT里面的測試用例,往往都是作為Regression測試用例的。BAT的測試用例用例一旦fail, 意味產品有重大缺陷,基本無法發布。對應的測試用例發現的問題,往往為P1的Bug
      Core(Core Regression Test)
      這類測試用例和BAT的測試用例很相似,代表核心功能,重要級別會比BAT要低些。測試用例會比較復雜,一般占整個總數的20%左右。一般Core集里面的測試用例fail, 對應的Bug也往往都是P1。Core和BAT比較難以劃分,但是可以將不屬于BAT和Func的測試用例劃入到這個里面。
      Func
      這類測試用例往往是對BAT和Core的補充。BAT和Core執行的主要路徑的測試用例,那么分支的測試用例往往都設計在Func里面,這類測試用例相對比較多和復雜,占整個測試用例的比例為50%左右。Func集里面測試用例fail, 對應的Bug往往為P2或者P3。
      其他一般還會有,UI, Security, Performance, Localization等等。
      大致結構和設計如下圖:

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

    Linux與BSD有什么不同?

    Linux和BSD都是免費的,開源的,類Unix系統。他們甚至使用很多相同的軟件。他們看上去簡直就像是一個操作系統,那么,它們有什么不同嗎?
      其實,兩者之間的不同,遠遠超出了我們下面提到的這些,尤其是在構建完整操作系統和許可授權的哲學思想上,更是相差甚遠。通過這篇短文將可以簡單的了解它們之間的不同。
      基礎
      許多人所稱的“Linux”實際上不是Linux。Linux從技術上說只是Linux內核,典型的Linux發行版則包括了Linux內核和許多軟件。這是為什么Linux有時被稱為GNU/Linux。事實上,許多在Linux上使用的軟件同樣也在BSD上使用。
      Linux和BSD都是類UNIX操作系統。我們可以通過閱讀類UNIX操作系統歷史發現Linux和BSD有不同的譜系。Linux是由LinusTorvalds在芬蘭上大學的時候開發的。BSD則代表“BerkeleySoftwareDistribution,伯克利軟件套件”,其源于對加州大學伯克利分校所開發的貝爾實驗室UNIX的一系列修改,它最終發展成一個完整的操作系統,現在有多個不同的BSD分支。
      內核vs.完整操作系統
      嚴格的說,Linux是只是一個內核。制作Linux發行版所要做的工作就是,匯集那些創建一個完整Linux操作系統所需的所有軟件,將它組合成一個像Ubuntu、Mint、Debian、RedHat或者是Arch這樣的Linux發行版。有許多不同的Linux發行版。
      與此相反的是,BSD這個名字則代表其內核和操作系統。例如,FreeBSD提供了FreeBSD內核和FreeBSD操作系統。它是作為一個單一的項目維護的。換句話說,如果你想要安裝FreeBSD,就只有一個FreeBSD可供你安裝。如果你想要安裝Linux,你首先需要在許多Linux發行版之間選擇。
      BSD包括一個名為Ports的系統,它提供了一種安裝軟件包的方式。Ports系統包含了軟件包的源代碼,所以您的計算機如果想安裝軟件的話,則需要先編譯他們。(如果您曾經使用過以前流行的Gentoo,有點類似那樣。)不過,軟件包也可以是預安裝的二進制形式,以便你不需要花時間和系統資源編譯他們就能運行。
      許可證
      許可證是典型的差異,雖然它不會對大多數人產生影響。Linux使用GNU通用公共許可證,即GPL。如果你修改了Linux內核,并將其分發,你就必須放出您的修改的源代碼。
      BSD使用BSD許可證。如果你修改了BSD內核或發行版,并且發布它,你根本不需要必須發布其源代碼。你可以自由地對你的BSD代碼做任何你想做的事情,你沒有義務發布的你修改的源代碼,當然你想發布也行。
      兩者都是開放源碼的,但是以不同的方式。人們有時會陷入關于哪種許可證是“更自由”的辯論。GPL可以幫助用戶以確保他們可以擁有GPL軟件的源代碼,并限制開發人員迫使他們開放代碼。BSD許可證并不能確保用戶可以擁有源代碼,而是給開發人員選擇是否公布代碼的權利,即使他們想要把它變成一個閉源項目。
     BSD分支
      以下是通常認可的三個“主流”BSD操作系統:
      FreeBSD:FreeBSD是最受歡迎的BSD,針對高性能和易用性。它支持英特爾和AMD的32位和64位處理器。
      NetBSD:NetBSD被設計運行在幾乎任何架構上,支持更多的體系結構。在他們的主頁上的格言是”理所當然,我們運行在NetBSD上”。
      OpenBSD:OpenBSD為最大化的安全性設計的——這不僅僅它宣稱的功能,在實踐中也確實如此。它是為銀行和其他重要機構的關鍵系統設計的。
      還有兩個其他的重要BSD操作系統:
      DragonFlyBSD:DragonFlyBSD的設計目標是提供一個運行在多線程環境中的操作系統——例如,計算機集群。
      Darwin/MacOSX:MacOSX實際上基于Darwin操作系統,而Darwin系統基于BSD。它與其他的BSD有點不同,雖然底層內核和其他的軟件是開源代碼(BSD代碼),但操作系統的大部分是閉源的MacOS代碼)。蘋果在BSD基礎上開發了MacOSX和iOS,這樣他們就不必寫操作系統底層,就像谷歌在Linux基礎上開發android系統一樣。
      你為什么會選擇BSD而不是Linux?
      Linux顯然比FreeBSD更受歡迎。例如,Linux往往會比FreeBSD更早提供新硬件的支持。BSD有一個兼容包可用,使之能像大多數的其他軟件一樣原生的執行Linux二進制程序。
      如果您使用過Linux,FreeBSD不會讓你感覺到太大的不同。如果把FreeBSD作為桌面操作系統,你也可以使用相同的GNOME,KDE或Xfce桌面環境,你也可以在BSD上使用Linux上的大多數的其他軟件。有一點需要注意,FreeBSD不會自動安裝的圖形化桌面,所以你要花相對于Linux更多的心思來照顧你的BSD。BSD更守舊一些。
      FreeBSD的可靠性和穩定性也許更適合作為服務器的操作系統。而廠商也會選擇BSD而不是Linux作為其操作系統,因為這樣他們就不必放出他們修改的代碼。
      如果你是一個PC桌面用戶,你真的不需要太過在意BSD。你可能會喜歡Linux,因為它具有更先進的硬件支持,更容易安裝,具有現代操作系統的特點。如果你關注服務器或嵌入式的設備,你可能會更喜歡FreeBSD。
      我們可能會聽到一些人說他們在桌面電腦上使用FreeBSD,你當然也可能是其中之一!但像Ubuntu或Mint一樣的開源操作系統對于多數用戶來說更體驗良好和更先進些。

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

    2014非常好用的開源Android測試工具

    當前有很大的趨勢是轉向移動應用平臺,Android 是最廣泛使用的移動操作系統,2014 年大約占 80% 以上的市場。在開發 Android 應用的時候要進行測試,現在市場上有大量的測試工具。
      本文主要是展示一系列的開源 Android 測試工具。每個工具都會有相應的簡短介紹,還有一些相關的資源。Android 測試工具列表是按照字母來排序的,最后還會介紹幾個不是特別活躍的 Android 測試相關的開源項目。
      本文提到的開源 Android 軟件測試工具包括:Android Test Kit, AndroidJUnit4, Appium, calabash-android, Monkey, MonkeyTalk, NativeDriver, Robolectric, RoboSpock, Robotium, UIAutomator, Selendroid。
      Android Test Kit
      Android Test Kit 是一組 Google 開源測試工具,用于 Android 平臺,包含 Espresso API 可用于編寫簡潔可靠的 Android UI 測試。
      AndroidJUnit4
      AndroidJUnit4 是一個讓 JUnit 4 可以直接運行在 Android 設備上的開源命令行工具。
      OSChina URL: http://www.oschina.net/p/androidjunit4
      Appium
      Appium 是一個開源、跨平臺的自動化測試工具,用于測試原生和輕量移動應用,支持 iOS, Android 和 FirefoxOS 平臺。Appium 驅動蘋果的 UIAutomation 庫和 Android 的 UiAutomator 框架,使用 Selenium 的 WebDriver JSON 協議。Appinm 的 iOS 支持是基于 Dan Cuellar's 的 iOS Auto. Appium 同時綁定了 Selendroid 用于老的 Android 平臺測試。
      OSChina URL: http://www.oschina.net/p/appium
      相關資源
      * Appium Tutorial
      * Android UI testing with Appium
      Calabash-android
      calabash-android 是一個基于 Cucumber 的 Android 的功能自動化測試框架。Calabash 允許你寫和執行,是開源的自動化移動應用測試工具,支持 Android 和 iOS 原生應用。Calabash 的庫允許原生和混合應用的交互測試,交互包括大量的終端用戶活動。Calabash 可以媲美 Selenium WebDriver。但是, 需要注意的是 web 應用和桌面環境的交互跟觸摸屏應用的交互是不同的。Calabash 專為觸摸屏設備的原生應用提供 APIs。
      OSChina URL: http://www.oschina.net/p/calabash-android
      相關資源
      * A better way to test Android applications using Calabash
      * Calabash Android: query language basics
      Monkey
      Monkey 是 Google 開發的 UI/應用測試工具,也是命令行工具,主要針對壓力測試。你可以在任意的模擬器示例或者設備上運行。Monkey 發送一個用戶事件的 pseudo-random 流給系統,作為你開發應用的壓力測試。
      OSChina URL: http://developer.android.com/tools/help/monkey.html
      MonkeyTalk
      MonkeyTalk 是世界上最強大的移動應用測試工具。MonkeyTalk 自動為 iOS 和 Android 應用進行真實的,功能性交互測試。MonkeyTalk 提供簡單的 "smoke tests",復雜數據驅動的測試套件。MonkeyTalk 支持原生,移動和混合應用,真實設備或者模擬器。MonkeyTalk 使得場景捕獲非常容易,可以記錄高級別,可讀的測試腳本。同樣的命令可以用在 iOS 和 Android 應用上。你可以記錄一個平臺的一個測試,并且可以在另外一個平臺回放。MonkeyTalk 支持移動觸摸和基于手勢交互為主的移動體驗。點擊,拖拽,移動,甚至是手指繪制也可以被記錄和回放。
      OSChina URL: http://www.oschina.net/p/monkeytalk
      相關資源
      * Using MonkeyTalk in AndroidStudio
      NativeDriver
      NativeDriver 是 WebDriver API 的實現,是原生應用 UI 驅動,而不是 web 應用。
      OSChina URL: http://www.oschina.net/p/nativedriver
     Robolectric
      Robolectric 是一款Android單元測試框架,使用 Android SDK jar,所以你可以使用測試驅動開發 Android 應用。測試只需幾秒就可以在工作站的 JVM 運行。Robolectric 處理視圖縮放,資源加載和大量 Android 設備原生的 C 代碼實現。Robolectric 允許你做大部分真實設備上可以做的事情,可以在工作站中運行,也可以在常規的 JVM 持續集成環境運行,不需要通過模擬器。
      OSChina URL: http://www.oschina.net/p/robolectric
      Additional resources
      * Better Android Testing with Robolectric 2.0
      Using Robolectric for Android testing – Tutorial
      RoboSpock
      RoboSpock 是一個開源的 Android 測試框架。提供簡單的編寫 BDD 行為驅動開發規范的方法,使用Groovy 語音,支持 Google Guice 庫。RoboSpock 合并了 Robolectric 和 Spock 的功能。
      OSChina URL: http://www.oschina.net/p/robospock
      相關資源
      * RoboSpock – Behavior Driven Development (BDD) for Android
      Robotium
      Robotium 是一款國外的Android自動化測試框架,主要針對Android平臺的應用進行黑盒自動化測試,它提供了模擬各種手勢操作(點擊、長 按、滑動等)、查找和斷言機制的API,能夠對各種控件進行操作。Robotium結合Android官方提供的測試框架達到對應用程序進行自動化的測 試。另外,Robotium 4.0版本已經支持對WebView的操作。Robotium 對Activity,Dialog,Toast,Menu 都是支持的。
      OSChina URL: http://www.oschina.net/p/robotium
      相關資源
      * Robotium – Testing Android User Interface
      * Android user interface testing with Robotium – Tutorial
      UIAutomator
      uiautomator 測試框架提高用戶界面(UI)的測試效率,通過自動創建功能 UI 測試示例,可以在一個或者多個設備上運行你的應用。
      OSChina URL: http://www.oschina.net/p/uiautomator
      相關資源
      * Automatic Android Testing with UiAutomator
      Selendroid
      Selendroid 是一個 Android 原生應用的 UI 自動化測試框架。測試使用 Selenium 2 客戶端 API 編寫。Selendroid 可以在模擬器和實際設備上使用,也可以集成網格節點作為縮放和并行測試。
      OSChina URL: http://www.oschina.net/p/selendroid
      相關資源
      * Mobile Test Automation with Selendroid
      * Road to setup Selendroid and create first test script of android application
      * Up and running with: Selendroid
      一些停止維護的 Android 測試工具
      一些幾乎沒有繼續維護的開源 Android 測試工具項目(至少是最近幾個月都沒有更新的項目)。
      Emmagee
      Emmagee 是監控指定被測應用在使用過程中占用機器的CPU、內存、流量資源的性能測試小工具。Emmagee 同時還提供非常酷的一些特性,比如定制間隔來收集數據,使用浮動窗口呈現實時進程狀態等。
      OSChina URL: http://www.oschina.net/p/emmagee
      Sirocco
      Scirocco(scirocco-webdriver) 是開源的應用自動化測試工具,可以從 Eclipse 訪問必要的測試設備。Scirocco 提供自動化的 Android 應用測試功能,代替手工測試。Scirocco 支持谷歌的 NativeDriver,把 AndroidDriver 作為主要的測試庫。Scirocco 包括三個部分:NativeDriver,AndroidDriver,scirocco 插件(一個 Eclipse 插件;可以自動執行 scenario 測試和制作測試報告截圖)。

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

    LoadRunner SQL 2008

     1. 下載 JDBC 驅動(sqljdbc4.jar)
      2. 在 run-time setting 下的 classpath 把 JDBC 驅動引入
    1 /*
    2  * LoadRunner Java script. (Build: _build_number_)
    3  *
    4  * Script Description:
    5  *
    6  */
    7
    8 import lrapi.lr;
    9 import java.io.*;
    10 import java.sql.Connection;
    11 import java.sql.DriverManager;
    12 import java.sql.ResultSet;
    13 import java.sql.ResultSetMetaData;
    14 import java.sql.SQLException;
    15 import java.sql.Statement;
    16 import lrapi.web;
    17
    18 public class Actions
    19 {
    20     int sum = 0;
    21     int columnCount = 0;
    22     String conURL = "jdbc:sqlserver://192.168.1.99:1433;DatabaseName=JingPai110_test_Data";
    23     String user = "jingpai2014_99";
    24     String password = "jingpai2014_99";
    25     Statement stat;
    26     ResultSet result;
    27     Connection conn;
    28
    29     public int init() throws Throwable {
    30         lr.think_time(5);
    31         Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    32         System.out.println("驅動加載完成...");
    33
    34         // 連接數據庫
    35         lr.think_time(5);
    36         conn = DriverManager.getConnection(conURL, user, password);
    37         lr.think_time(5);
    38         stat = conn.createStatement();
    39         System.out.println(stat);
    40         return 0;
    41     }//end of init
    42
    43
    44     public int action() throws Throwable {
    45         lr.think_time(5);
    46         // 定義事務開始
    47         lr.start_transaction("query");
    48         result = stat.executeQuery("SELECT * FROM Users");
    49         ResultSetMetaData rsmd = result.getMetaData();
    50         columnCount = rsmd.getColumnCount();
    51         System.out.println("結果集的列數: " + columnCount);
    52
    53         if (columnCount == 0) {
    54             lr.end_transaction("query", lr.FAIL);
    55         } else {
    56             lr.end_transaction("query", lr.PASS);
    57         }
    58         return 0;
    59     }//end of action
    60
    61
    62     public int end() throws Throwable {
    63         result.close();
    64         stat.close();
    65         conn.close();
    66         return 0;
    67     }//end of end
    68 }
      注意:
      1. loadrunner11 支持的JDK版本為1.6 32位(我嘗試使用1.7JDK 32位也是不行的)
      2. Error: Java VM internal error:Error Loading javai.dll. 錯誤解決:
      選擇Use specified JDK,在JDK后面貼上你的java jdk地址,例如:D:\Program Files\Java\jdk1.6.0_10,點擊OK即可。
      3. Error: at java.lang.ClassLoader.defineClass1(Native Method)
      解決:loadrunner在編譯Java Vuser的時候會加載我們配置環境變量中的path,如果path中有不同版本的java jdk就會造成沖突,刪除path中的其它版本的jdk路徑,重啟loadrunner。

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

    掌握設計開發維護大型網站的技術之性能

     前言
      在前一篇隨筆《大型網站系統架構的演化》中,介紹了大型網站的演化過程,期間穿插了一些技術和手段,我們可以從中看出一個大型網站的輪廓,但想要掌握設計開發維護大型網站的技術,需要我們一步一步去研究實踐。所以我打算寫一個系列,從理論到實踐講述大型網站的點滴,這也是一個共同學習的過程,希望自己能堅持下去。系列大概會分為兩部分,理論和實踐,理論部分盡量通俗易懂,也要講一些細節。實踐部分會抽取一些技術做實踐,將方法、解決問題過程分享出來。
      本文將講述大型網站中一個重要的要素,性能。
      什么是性能
      有人說性能就是訪問速度快慢,這是最直觀的說法,也是用戶的真實體驗。一個用戶從輸入網址到按下回車鍵,看到網頁的快慢,這就是性能。對于我們來說,需要去挖掘這個過程,因為這決定我們怎么去做性能優化。
      這中間發生了什么?
      用戶訪問網站的整個流程:用戶輸入網站域名,通過DNS解析,找到目標服務器IP,請求數據經互聯網達到目標服務器,目標服務器收到請求數據,進行處理(執行程序、訪問數據庫、文件服務器等)。處理完成,將響應數據又經互聯網返回給用戶瀏覽器,瀏覽器得到結果進行計算渲染顯示給用戶。
      我們把整個過程,分為三段路徑:
      1、第一段在用戶和瀏覽器端,主要負責發出用戶請求,以及接受響應數據進行計算渲染顯示給用戶;
      2、第二段在網絡上,負責對請求數據、響應數據的傳輸;
      3、第三段在網站服務器端,負責對請求數據進行處理(執行程序、訪問數據庫、文件等),并將結果返回;
      第一路徑
      第一路徑花費的時間包括輸入域名發起請求的時間和瀏覽器收到響應后計算渲染的時間。
      輸入域名發起請求,實質過程是:
      1、用戶在瀏覽器輸入要訪問的網站域名;
      2、本地DNS請求網站授權的DNS服務器對域名進行解析,并得到解析結果即IP地址(并將IP地址緩存起來)。
      3、向目標IP地址發出請求。
      從這個過程我們可以看到,優化的地方主要是減少DNS解析次數,而如果用戶瀏覽器設置了緩存,則再第二次訪問相同域名的時候就不會去請求DNS服務器,直接用緩存中的IP地址發出請求。因此這個過程主要取決于瀏覽器的設置。現在主流的瀏覽器默認設置了DNS的預取功能(DNS Prefetch),當然你也可以主動告知瀏覽器我的網站需要做DNS預取:
      <meta http-equiv=”x-dns-prefetch-control” content=”on” />
      瀏覽器將數據進行計算渲染的過程:
      1、瀏覽器解析響應數據;
      2、瀏覽器創建DOM樹;
      3、瀏覽器下載CSS樣式,并應用到DOM樹,進行渲染;
      4、瀏覽器下載JS文件,開始解析執行;
      5、顯示給用戶。
      從這個過程,我們可以找出不少可以優化的地方。首先我們可以盡量控制頁面大小,使得瀏覽器解析的時間更短;并且將多個CSS文件、JS文件文件合并壓縮減少文件下載的次數和大小;另外注意將CSS放在頁面前面,JS訪問頁面后面,這樣便于頁面首先能渲染出來,再執行js腳本,對于用戶來說有更好的體驗。最后我還可以設置瀏覽器緩存,下次訪問時從緩存讀取內容,減少http請求。
      <meta http-equiv=”Cache-Control” content=”max-age=5″ />
      該代碼說明了瀏覽器啟用了緩存并在5秒內不會再次訪問服務器。注意緩存的設置需要結合你的業務特性來適當配置。
      以下是京東商城的HTML簡圖:
      css樣式放在html前面,并且進行了合并。
     大多數的JS文件放在頁尾。
      第二路徑
      第二路徑在網絡上,花費的時間同樣包括請求數據的傳輸時間和響應數據的傳輸時間,這個兩個時間取決于數據傳輸的速度,這里我們要講一個名詞“帶寬”。什么是帶寬,我們經常說帶寬10M,20M是什么意思?我的帶寬20M,這意味著什么?我們知道帶寬速度分為上行、下行速度,也就是上傳和下載的速度。帶寬20M對于用戶來說則是下載速度20M(20×1024×1024比特率),換算成字節20M/8=2.5M。也就是說20M的帶寬下載速度理論可達2.5M/s,而對于家庭用戶而言上傳速度一般比下載速度小的多,大約是不到十分之一。而對于網站服務器(企業用戶)來說,則不然,一般上行速度等于下載速度。這也是運營商根據實際需求分配的,畢竟用戶的主要需求是下載數據,而不是上傳數據。
      整個流程從傳輸方式看就是:用戶發送請求數據(上傳),網站服務器接受請求數據(下載),網站服務器返回響應數據(上傳),用戶接受響應數據(下載)。對于用戶來說,上傳數據是很小的(Url參數),而下載數據是較大的(響應數據);對于服務器來說,下載數據是很小的(url參數),上傳數據是較大(響應數據)。理解了這個,我們可以解釋為什么有時用戶反映為什么自己的帶寬足夠,但打開某些網站仍然很慢,就是因為盡管用戶的下載速度很快,但網站服務器的上傳速度很慢,這就像一個抽水管和一個出水管,不管抽水管再大,但出水管很小,同樣抽到的水量是有限的。了解了這個原理我們來看怎么提高數據傳輸的速度,首先用戶的上傳、下載速度我們是無法決定的,我們能決定的是網站服務器的上傳、下載速度,所以我們可以做的是適當的增加服務器帶寬(帶寬是很貴的,盲目的增加只會增加不必要成本)。購買合適的帶寬需要根據網站業務特性、規模以及結合運維人員的經驗來選擇。通常可以考慮的算法,即根據一次響應數據的大小,乘以PV數,除以對應的高峰時間段,從而大致估算出網站帶寬的需求。
      下面我們繼續進一步研究第二路徑:
      上圖表示用戶訪問網站服務器時網絡的大致情況,從圖上可以看出假設網站服務器從電信網絡接入,而用戶A作為電信的寬帶用戶,則可以通過電信骨干網快速的訪問到網站服務器。用戶B,用戶C作為移動和聯通用戶需要通過運營商的互聯互通經過較長路徑才能訪問到服務器。
      針對這種情況,我們可以采取以下方法來優化:
      1、在各運營商發達的地區的IDC(互聯網數據中心,可以理解成機房)部署網站服務器,各運營商的用戶即可通過各自的骨干網訪問服務器。
      2、購買代理服務,也就是原來聯通用戶需要通過聯通骨干網——>聯通互聯互通路由器——>電信骨干網——>網站服務器的過程。通過代理服務,代理服務器直連到電信骨干網,訪問網站服務器。
      2、在主要地區城市購買CDN服務,緩存對應的數據,用戶可先從最近的CDN運營商獲取請求數據。
      第三路徑
      第三路徑主要是網站服務器內部處理的過程,當中包括執行程序、訪問文件、數據庫等資源。
      這是對于我們來說最可以發揮的地方:
      1、使用緩存,根據需要使用本地緩存或分布式緩存;
      2、使用異步操作,這種方式不僅可以提高性能,也提高了系統的擴展性;
      3、代碼優化;
      4、存儲優化;
      緩存
      如果緩存數據較少,可以利用OSCache實現本地緩存:
      當緩存數據過多時,利用Memcached實現分布式緩存:
      Memcached實現分布式緩存,緩存服務器之間是互不通信的,也就是我們可以方便的通過增加Memcached服務器對系統進行擴展。
      異步操作
     使用同步請求的方式,在高并發的情況下,會對數據庫造成很大的壓力,也會讓用戶感覺響應時間過長。異步請求方式,則可以快速的對用戶做出響應,而具體的數據庫操作請求,則通過消息隊列服務器發送給數據庫服務器,做具體的插入操作。插入操作的結果則已其他方式通知客戶端。例如一般在訂票系統當中,出票行為就是異步完成,最終的出票結果會以郵件或其他方式告知用戶。
      代碼優化
      這里就不在詳細描述,另一篇隨筆《怎樣編寫高質量的java代碼》對代碼質量和風格做過大致的介紹,有興趣可以看一下。
      存儲優化
      大型網站中海量的數據讀寫對磁盤造成很大壓力,系統最大的瓶頸還是在磁盤的讀寫。可以考慮使用磁盤陣列、分布式儲存來改善存儲的性能。
      性能的指標和測試
      上面通過解析用戶訪問網站的過程來思考怎么提高用戶感知的性能,對于用戶來言性能就是快和慢。但對于我們來說,不能這樣簡單描述,我們需要去量化他,用一些數據指標去衡量它。這里講到幾個名詞:響應時間、并發量、吞吐量。
      響應時間:就是用戶發出請求到收到響應數據的時間;
      并發量:就是系統同時能處理多少用戶請求;
      吞吐量:就是單位時間內系統處理的請求數量;
      為了通俗的了解這三個概念,我們以高速公路的收費站為例子:響應時間是指一輛車經過收費站的時間,也就是車輛從進入收費站、付錢、開閘、離開收費站的時間;并發量是指這個收費站同時能通行多少輛車,可以理解為收費站的出口數量。吞吐量是指:在一段時間內,這個收費站通往了多少了車。
      這個例子不曉得恰不恰當。
      對于性能測試來說,基本也是圍繞這些方面來測試,下圖說明了性能測試的過程:
      左圖表示響應時間和并發用戶量的二維坐標圖,從圖上可以看出,并發用戶量在一定量增加時,響應時間很短,并且沒有太大的起伏,這表示系統目前處于日常運行期,可以很快處理用戶請求(A點之前);隨著并發量的增加,系統處于請求高峰期,但仍然可以有序的處理用戶請求,響應時間較日常有所增加(A、B之間);當并發量增加到一定數量時,超過了系統的負載能力,系統處于瀕臨崩潰的邊緣(B、C之間),響應時間嚴重過長,直到系統崩潰。
      右圖表示吞吐量與并發用戶量的二維坐標圖,可以看出,隨著并發用戶量的增加,吞吐量逐漸增加;在并發量到達一定量時,由于系統處理能力達到最大,吞吐量增加放緩;當并發量超過系統負載時(E點),系統處理能力開始下降,不能再請求增加的用戶請求,吞吐量反而降低。
      小結
      本文通過用戶訪問網站的過程,分析了三個路徑過程中提高性能的想法和手段,最后介紹了描述性能的指標,并對性能測試做了簡要說明。

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

    QTP書寫程序技巧

    一、添加固定注釋
      新建一TXT文檔,將要添加的注釋寫在文檔中
      將文檔名改為:ActionTemplate.mst
      將文件放到QTP安裝目錄的dat文件夾中
      設置好后,在QTP中每次新建一個測試就會自動添加固定的注釋
      二、調用外部vbs文件方法
      1.將通用函數寫在一個vbs文件中,以供其他腳本調用
      2.調用外部VBS文件中的通用函數的方法(二選一即可),設置完后在QTP中直接使用函數名進行調用:
      1)通過在QTP中設置:file-->settings-->Resource-->“添加VBS文件的路徑“
      2)在腳本中使用Executefile語句:Executefile "VBS文件路徑"

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

    靜態自動檢查代碼缺陷與隱患

    代碼缺陷和代碼錯誤的最大區別是,代碼缺陷不影響游戲編譯,而代碼錯誤編譯都不通過。但是代碼缺陷會影響游戲發布后產生的一系列BUG。。我今天無意間逛外國論壇發現的一個方法,使用了一下感覺挺給力的第一時間分享給大家。 下載下來以后,它是一個文件夾把整個文件夾拷貝在你unity的工程里面就行了。
      Unity 3d Gendarme Plugin:https://bitbucket.org/kzoabi/unity3d-gendarme-plugin
      然后下載最新的mono 它是跨平臺的,我用的是MAC所以我下載的就是一個 dmg文件, 下載完畢后安裝完成即可。
      http://www.go-mono.com/mono-downloads/download.html
      如下圖所示, 選擇Assets->Gendarme Report Level 選項,將彈出Gendarme界面,你可以選擇它的優先級,然后點擊Start按鈕。如果報錯的話,請把Assets文件夾下的gendarme文件夾和gendarme-report.html文件刪除。
      如果你的項目比較大的話需要耐心的等待一下,大概1分鐘左右。Report生成完畢后會彈出如下窗口,點擊Open Report按鈕即可。
      如下圖所示,他會生成一個Html的頁面在本地,打開后寫的非常清晰,并且已經分好了類,他會告訴你那一行代碼有缺陷,如何來修改你的代碼。一不小心代碼就一大堆隱患,趕快一個一個修改吧

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

    Java學習筆記之深入理解引用

    引言:Java中數據傳遞的方式,除了基本數據類型是按照值傳遞,其它類型全部是按照引用傳遞,這和C++有很大區別,但是很多網上文章都解釋的不清楚,甚至是錯誤的,在查閱資料之后,下面整理出一個比較容易理解的版本。
      我們知道引用根據引用的類型不同有許多名稱,如字符串引用,數組引用等等。
      一、棧內存和堆內存
      我們用數組來引出和解釋這兩個概念。
      數組引用變量只是一個引用,這個引用可以指向任何有效的內存。
      簡單的理解就是,這個引用是用來存放數據地址的(數據地址指向數據在內存中的存儲位置),在聲明引用變量的時候,只是預留了一段空間來存儲地址,但是還沒有真正賦給這個引用變量一個地址,你賦給它哪個數據的地址,這個引用就指向這個地址(所以上面說“這個引用可以指向任何有效的內存”),那么你就可以通過這個引用訪問該數據了。
      如String[] p = new String(5);
      p就是一個數組引用變量,這個數組含有5個元素。但是,實際數組元素被存儲在堆(heap)中,而數組引用變量是被存在棧(stack)內存中,如下圖:
      也就是說,數組在內存中的存儲實際是分別存儲在兩種不同性質的內存中:棧內存和堆內存。實際上,在Java中其它引用變量也是如此。
      二、類的引用
      考慮下面的自己建立的一個簡單類:
    class Test
    {
    private int a;
    Test()
    {
    a = 0;
    }
    public void set(int b)
    {
    a = b;
    }
    public void showInfo()
    {
    System.out.println("The value of a is :" + a);
    }
    }
      假如我們有如下語句:
      Test m = new Test()
      我們常常看到有這樣的說法:m是一個對Test類的引用變量,感覺好難理解,怎么實例化一個類就成了引用呢?讓我們一步一步來看這個實例化過程。
      我們把上面語句拆開成下面語句:
      Test m;
      m = new Test();
      我們知道,Java中除了內置基本類型,其他類型全部是引用,Test當然不是內置基本類型,所以Test m 就是建立了一個指向Test類的引用:
      Test m是聲明了一個Test類的引用變量m,就是告訴編譯器要預留一部分棧內存給m,我會用m來存儲一個地址指向存儲有Test類對象存儲單元,注意這個Test類對象和上面講的數組元素一樣,是存儲在堆內存中的。但Test m也只是聲明而已,但是指向哪一個Test類對象,目前還不知道,因為我們還沒有賦給它一個Test 類對象的地址,它怎么可能知道指向哪兒?
      m = new Test() 就是來給m指明方向的,new Test()構造了一個Test類對象,系統會給這個對象分配一定的內存空間留給這個對象存儲自己的數據,通過運算m = new Test(),把這個新建的Test類對象在內存(堆內存)中的地址賦給m,于是m就知道它應該指向哪兒了:
      總結出以下幾點:
      Java除了內置基本數據類型(int , double ,float等等)是值傳遞,其他類型的都是引用
      聲明一個類型的引用時,只是為引用變量預留了一個存儲地址空間,該引用變量可以指向任何有效的內存單元
      Java大量使用引用的方式可以減少值傳遞過程中復制數據的開銷,提高效率。

    0
    0
     

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

    小技巧:顯示數據庫查詢耗時,改善開發者習慣

     我會分享一系列在我開發生涯中積累的有用且容易實現的小技巧,本文是此系列的第一篇。
      很多原因都可能導致網站運行緩慢,但這其中最常見的就是在數據庫查詢耗時太多。目前,數據庫查詢可能在網頁渲染過程中起著很重要的作用(網頁上的內容總得從某處獲取),但是有時候 一些不必要的亦或沒有優化好的查詢會影響網頁渲染的速度。
      例如:
      查詢的數據根本沒有被使用
      查詢時未使用索引
      單次查詢可以實現的功能卻做了多次查詢
      慢且復雜的查詢
      然而有一個簡單的機制可以間接的預防并且修復此類問題:
      用‘診斷框’在每一個網頁顯示數據庫查詢的次數以及消耗的總時間。
      下面這個示例是我自己的一個網站(截圖 或者 這個頁面)底部的一個樣例診斷塊:
      Request Details:
      DB – Queries: 4, Time: 5.66 ms
      我在所有開發項目以及生產環境(用我的賬號登陸)中都加了類似的診斷框。對于一個大型網站來說,你很可能想當你從辦公室或者VPN訪問網站時啟用診斷框。如果你愿意的話,診斷框中還可以增加一些更具體的信息(即將運行的查詢語句以及其它過程花費的時間等等)。
      好處
      我可以及時的看到是否數據庫導致了網頁加載緩慢。 在生產環境做調試時這一點尤為有效,因為有些數據庫查詢在生產環境和開發環境中的表現截然不同。
      當增加新功能的時候,我可以直觀的感受到新增的數據查詢是否輕量級的。這能幫助我在這個新功能帶來的好處和它在訪問數據時所消耗的時間這兩者之間做一個 權衡。另外它還可以提醒我有些查詢語句需要手動優化或者做一些緩沖。
      當我參加的項目中使用了ORM框架時,它能告訴我ORM產生的查詢語句是否正是我所期望的。
      當刪除一個功能或者做了一些數據緩沖,我可以通過它來確認查詢數量是否如愿有所下降。
      尾聲
      當然,這些點子不是我發明的,而且有些診斷模式幾乎是每個大型網站的常見功能。如果你還沒有用到它們,我強烈建議你花點時間去實現它們。有這樣的一個‘診斷盒’不會使你的網站本身變快,但它能在開發人員之間激發一些更好的習慣,并且長期來看,它可能對你的網站的速度有巨大的影響!

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

    移動應用APP性能測試白皮書

    移動應用日益普及,其重要性也日益增加,這已是不爭的事實。優秀的用戶體驗將成為讓用戶駐足的原因之一。移動應用的性能測試原理與傳統桌面應用并無二致。但是,要全面測試移動應用的性能參數,測試人員需要理解各種移動應用的架構和它們與桌面應用的根本區別,例如帶寬,處理器,屏幕尺寸等等。
      前言
      下文中說的手機測試范圍不包含短信和電話功能,而是指用于通信功能之外的其他應用。如今手機已經成為大多數人的日常必需品。手機的使用量逐年增加,運行在手機上的應用也層出不窮。除了處理通常的電話和短信之外,人們也開始用手機來拓展業務,聯絡親友,擴展職業圈,玩游戲,打廣告,買賣商品。手機和其他移動平臺的重要性不容小覷,各大商家已經開始著手開發手機版的產品,搶占這塊重要的細分市場。當今時代,手機軟件和網站已經成為人們從事商業活動,提高雇員業績和接觸目標市場的主要途徑。
      以下統計數據顯示在這個智能化的時代手機應用的重要性:
      截止2011年底,全球共有87%的人口(60億)擁有手機,其中10億擁有智能手機
      22%手機用戶每個月至少用手機上網一次
      34%的美國用戶和28%歐洲用戶在手機上使用超過一種移動應用
      預計到2014年,手機上網的總量將超過電腦
      尼爾森2012年的報道顯示,智能手機64%的時間在運行多種應用程序
      2011年,全球移動應用下載量約300億
      91%美國智能手機用戶平均每天花費2.7小時訪問社交應用程序,是他們平均吃飯時間的兩倍,睡眠時間的三分之一
      6億Facebook用戶中,三分之一用戶通過手機訪問,1.65億Twitter用戶中,一半的用戶通過移動設備登錄,而大約每天有2億Youtube用戶通過移動設備登錄
      移動應用的使用量和重要性與日俱增,用戶體驗的要求也越來越高。與桌面程序相比,移動應用耗電小,速度慢,但手機用戶卻希望享受到與桌面程序同樣的加載速度。
      我們在此將探討移動應用的重要性,移動app的性能測試的難點,移動app與桌面應用的異同,移動app的種類,對移動app進行壓力測試和性能調優的基本方法。
      移動應用的類別
      移動應用按架構可分成三大類。要做好性能測試的, 有必要了解各種應用的種類和內部架構。我們來分別介紹一下各類app的基本情況。
      本地應用
      需要從網上商店下載并安裝在特定移動設備上的可劃分到這一類。這類應用由特定編程語言(例如安卓系統上用的Java和iOS系統上用的Object-C)編寫,結合特定移動設備的開放API。用戶將這種應用安裝到移動設備上之后,無需連接到互聯網就能使用。游戲應用程序和從網上商店下載的app就是很好的例子。
      聯網應用
      通過移動設備上的瀏覽器訪問的應用叫做聯網應用。這類應用是通過網絡技術如HTML,JQuery和JavaScript開發的。熱門社交網站,如Facebook和Gmail等都專門開發了基于移動設備的聯網應用,倍受移動用戶親睞。
      混合應用
      聯網應用和本地應用的結合被稱作混合型應用。在這類應用里,聯網應用被內嵌到本地移動應用中。用戶界面像本地應用,內容卻需要聯網加載。安裝在移動設備上的Facebook,Linkedin和Twitter應用是這類“本地界面,聯網內容”的最佳典范。

    提高移動應用性能的重要性
      隨著手機使用量的增加,手機性能的重要性也日益顯著。手機用戶對性能期望非常高,希望手機應用能像在電腦上運行那么快。據統計:
      71%用戶希望在手機上打開網頁能同電腦上一樣快
      5秒鐘被認為是用戶能忍受的最長響應時間
      如果響應時間超過5秒,74%上網用戶和50%移動應用用戶會放棄
      三分之一失望的用戶會轉向競爭對手的應用
      通常,手機用戶會嘗試兩次,如果第三次依然出現同樣問題,半數人再也不會使用該應用。比起桌面程序,手機應用的架構更加復雜,可用資源相對更少,提高和維持快速的響應時間比桌面程序更困難。
      測試移動應用的挑戰
      做好性能測試,從來就不是一件簡單容易的事。搭建與生產環境相同的性能測試環境一直是做性能測試的第一步,也是很重要的一步。然而,由于其復雜的架構,測試手機程序和網站顯得更加困難。要覆蓋到不同種類(聯網,本地和混合應用)、不同平臺(iOS,安卓等等)和不同網絡環境(Wifi,2G,3G,3G+,4G LTE)也是手機測試面臨的一大難題。下面介紹一下幾個手機性能測試相關的主要難題。

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

    僅列出標題
    共394頁: First 上一頁 31 32 33 34 35 36 37 38 39 下一頁 Last 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲AV日韩AV无码污污网站| 亚洲国产成人爱av在线播放| 亚洲国产aⅴ成人精品无吗| 四虎影视免费永久在线观看| a毛片在线免费观看| 免费萌白酱国产一区二区| 久久精品无码专区免费| 亚洲福利电影一区二区?| 99热这里有免费国产精品| 亚洲毛片αv无线播放一区| 男女男精品网站免费观看| 久久精品国产96精品亚洲| 无码国模国产在线观看免费| 久久亚洲精品无码gv| 亚洲国产精品无码久久SM| 十八禁无码免费网站 | 中文字幕久无码免费久久| 亚洲国产视频网站| 中文字幕亚洲综合久久菠萝蜜| 成人久久久观看免费毛片| 免费大香伊蕉在人线国产| 久久爰www免费人成| 美女免费视频一区二区| 亚洲а∨天堂久久精品| 国产精品免费精品自在线观看| 亚洲美女免费视频| 永久免费AV无码国产网站| 亚洲中文字幕日本无线码| 亚洲欧洲日产国码无码久久99| 国产又黄又爽又刺激的免费网址| 久久久久高潮毛片免费全部播放| 亚洲国产精品成人综合久久久| 亚洲精品一级无码中文字幕| 女人张开腿等男人桶免费视频| 99视频在线精品免费| 91精品全国免费观看青青| 黄页视频在线观看免费| 亚洲av无码专区在线电影天堂| 亚洲一区二区三区久久| 国产国产人免费视频成69大陆| 最新欧洲大片免费在线|