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

    Linux下測試磁盤的讀寫IO速度

     有時候我們在做維護的時候,總會遇到類似于IO特別高,但不能判定是IO瓶頸還是軟件參數設置不當導致熱盤的問題.這時候通常希望能知道磁盤的讀寫速度,來進行下一步的決策.
      下面是兩種測試方法:
      (1)使用hdparm命令
      這是一個是用來獲取ATA/IDE硬盤的參數的命令,是由早期Linux IDE驅動的開發和維護人員 Mark Lord開發編寫的( hdparm has been written by Mark Lord <mlord@pobox.com>, the primary developer and maintainer of the (E)IDE driver for Linux, with suggestions from many netfolk).該命令應該也是僅用于Linux系統,對于UNIX系統,ATA/IDE硬盤用的可能比較少,一般大型的系統都是使用磁盤陣列的.
      使用方法很簡單
    # hdparm -Tt /dev/sda
    /dev/sda:
    Timing cached reads: 6676 MB in 2.00 seconds = 3340.18 MB/sec
    Timing buffered disk reads: 218 MB in 3.11 seconds = 70.11 MB/sec
      可以看到,2秒鐘讀取了6676MB的緩存,約合3340.18 MB/sec;
      在3.11秒中讀取了218MB磁盤(物理讀),讀取速度約合70.11 MB/sec
      (2)使用dd命令
      這不是一個專業的測試工具,不過如果對于測試結果的要求不是很苛刻的話,平時可以使用來對磁盤的讀寫速度作一個簡單的評估.
      另外由于這是一個免費軟件,基本上×NIX系統上都有安裝,對于Oracle裸設備的復制遷移,dd工具一般都是首選.
      在使用前首先了解兩個特殊設備
      /dev/null 偽設備,回收站.寫該文件不會產生IO
      /dev/zero 偽設備,會產生空字符流,對它不會產生IO
      測試方法:
      a.測試磁盤的IO寫速度
    # time dd if=/dev/zero of=/test.dbf bs=8k count=300000
    300000+0 records in
    300000+0 records out
    10.59s real 0.43s user 9.40s system
    # du -sm /test.dbf
    2347 /test.dbf
      可以看到,在10.59秒的時間里,生成2347M的一個文件,IO寫的速度約為221.6MB/sec;
      當然這個速度可以多測試幾遍取一個平均值,符合概率統計.
      b.測試磁盤的IO讀速度
    # df -m
    Filesystem 1M-blocks Used Available Use% Mounted on
    /dev/mapper/VolGroup00-LogVol00
    19214 9545 8693 53% /
    /dev/sda1 99 13 82 14% /boot
    none 506 0 506 0% /dev/shm
    # time dd if=/dev/mapper/VolGroup00-LogVol00 of=/dev/null bs=8k
    2498560+0 records in
    2498560+0 records out
    247.99s real 1.92s user 48.64s system
      上面的試驗在247.99秒的時間里讀取了19214MB的文件,計算下來平均速度為77.48MB/sec
      c.測試IO同時讀和寫的速度
    # time dd if=/dev/sda1 of=test.dbf bs=8k
    13048+1 records in
    13048+1 records out
    3.73s real 0.04s user 2.39s system
    # du -sm test.dbf
    103 test.dbf
      上面測試的數據量比較小,僅作為參考.
      相比兩種方法:
      前者是linux上專業的測試IDE/ATA磁盤的工具,但是使用范圍有局限性;(此試驗僅僅使用了測試磁盤IO的參數,對于其他參數及解釋參考man手冊)
      后者可以通用,但不夠專業,也沒有考慮到緩存和物理讀的區分,測試的數據也是僅作參考,不能算是權威.

    posted @ 2014-04-04 11:44 順其自然EVO 閱讀(286) | 評論 (0)編輯 收藏

    python批量導入MongoDB數據庫

     由于源文件不是MongoDB支持的JSON和BSON 格式的數據, 所以只能將源數據轉變格式后, 用腳本將其導入,所測數據為中科院信工所提供的數據。(這也是在信工所接觸的第一個寫程序的活。)源碼如下:
    #!/usr/bin/env python
    #encoding:utf-8
    ###################################
    # function: analysis the log in the 'die' to JSON , and
    #output the data to the MongoDB.
    # data:  2014/3/31
    #History: 1.0
    ###################################
    import os
    import pymongo
    def connect_mongodb():
    servers="mongodb://localhost:27017"
    conn = pymongo.Connection(servers)
    print conn.database_names()
    db = conn.my_mongodb            #連接庫
    return db
    def str_process(string,db):
    d={}
    if string == '\n':
    return
    string2=str(string)
    print '-----'+string
    string2=string2.split(' ')
    print '---------------'
    print string2
    for i in string2:
    print i
    print '------------'
    string2[3].split('\n')
    d['projectcode']=string2[0]
    d['pagename']=string2[1]
    d['pageview']=string2[2]
    d['bytes']=string2[3][:-1]
    db.user.insert(d)
    def file_process(source_file,db):
    string2=''
    f=open(source_file,'r')
    print 'file name :'+source_file
    while True:
    string2=f.readline()
    if string2 == '':
    break
    string2=str_process(string2,db)
    print string2
    def get_dir_list(dir):  #input the dir ,will output the all filename
    dat0=[]
    for i in os.listdir(dir):
    dat0.append(i)
    return dat0
    def all_file_process():
    dir_file_name=''
    dir_list=[]
    dir_file_name=raw_input('please input the dir name:')
    dir_list=get_dir_list(dir_file_name)
    print dir_list
    db=connect_mongodb()
    for i in dir_list:
    if str(i) != 'log_file_process.py':
    file_process(str(i),db)
    all_file_process()

    posted @ 2014-04-03 11:26 順其自然EVO 閱讀(747) | 評論 (0)編輯 收藏

    java實現list清除重復的字符串

    package com.zhangle.arithmetic;
    import java.util.ArrayList;
    import java.util.List;
    public class ClearRepeat {
    /**
    * @param args
    */
    public static void main(String[] args) {
    List<String> list=new ArrayList<String>();
    list.add("abc");
    list.add("efg");
    list.add("ghi");
    list.add("ghi");
    list.add("ghi");
    list.add("efg");
    for (int i = 0; i < list.size();i++) {
    int j=list.lastIndexOf(list.get(i));
    if (i!=j) {
    list.remove(j);
    i--;//每次有重復都讓i回到初始位置,i==j時才可以向下循環
    }
    }
    System.out.println(list);
    }
    }

    posted @ 2014-04-03 11:24 順其自然EVO 閱讀(448) | 評論 (1)編輯 收藏

    我們正在路上—從持續集成到持續發布

     持續集成作為一種很好的軟件工程實踐被很多團隊所采用,和其他一些先進的實踐一樣,它最終的目的一定是服務于產品的。產品的價值最終體現在用戶體驗的提升,而這個的前提就是產品的每一次更新能夠及時地傳遞給用戶,對于運維團隊來說就是更快地在生產環境中部署最新的產品,對于研發團隊來說就是更頻繁地發布可以工作的軟件。
      暫且拋開業界非常流行的DevOps理念,單純地從研發團隊來看,如何快速的發布對用戶有價值的軟件是重中之重。
      那結合持續集成,我們又可以做些什么呢?
      先來看看我們持續集成的現狀
      獨立的環境:持續集成往往有一套獨立的測試環境,而團隊還會在其他測試環境中進行測試,兩者似乎從來沒有交集
      獨立的構建:持續集成往往就是對當前最新的代碼做一些自動化的測試,而完全忽略了軟件版本的管理,甚至不能很好的保證各種測試是否是基于同一份代碼
      輔助手段:持續集成往往作為一種測試的輔助手段,更多的是用于快速發現代碼提交階段的錯誤
      以上這些在持續集成初期完全沒有問題,而且這種方式也的確帶來了不少的價值,能夠幫助團隊更透明地了解產品的質量,并且快速的定位和解決問題。只是,我們可以做的更多
      再來展望下持續發布的流程
      整體的思路就是以持續集成流水線作為核心,把軟件發布的各個環節透明地展示給團隊,并且通過流水線來管理版本的發布流程
      測試環境整合:打通持續集成環境/手工測試環境/線上模擬環境,保證一條流水線上使用同一份代碼,同一份構建物
      測試流程整合:一鍵式的環境部署和一鍵式的版本管理(打TAG,拉分支,構建物的存儲等),發布前對產品質量有清晰的了解
      重要和主要手段:以持續發布流水線為基準,并積極拓展其他類型的測試
      把持續集成融入到產品開發和發布階段,而不是簡單地搭建一套“自動化運行任務”,并充分利用構建流水線實現流程和質量的雙重把控
      最后來看下某個產品初步定義的持續發布的流程
      產品現狀
      三套環境:持續集成環境(云主機),手工測試環境(云主機),線上模擬環境(物理機)
      持續集成狀態
      自動化的編譯,打包,部署,冒煙測試和快速性能測試已經實現自動化并實時通過代碼提交觸發,全程20分鐘左右
      單元測試和靜態代碼檢查還在完善中,也實時通過代碼提交觸發,不過沒有列入關鍵點,也就是成功與失敗并不直接影響構建流程
      每日的功能測試(1000+個測試用例)在晚間運行,全程3個小時左右
      新功能測試在手工測試環境下進行
      上線前需要在線上模擬環境進行性能測試和穩定性測試

     持續發布流水線
      持續集成環境實時保證當前的提交沒有破壞基本功能
      通過手工觸發(QA人員控制),一鍵部署產品到手工測試環境并能在流水線上展示手工測試結果(通過簡單的設置一個變量達到效果);同時可以選擇觸發功能測試,達到同步的執行
      如果QA人員認為當前測試版本可以達到內部發布要求,可以一鍵打TAG,并生成和存儲dist包
      通過手工觸發(QA人員控制),一鍵部署dist包到模擬線上環境,而后自動化進行性能測試和穩定性測試
      理想狀態這步應該是自動觸發,由于目前機器的不可獨占性,暫時只能手工觸發
      自動化的性能測試和穩定性測試還是實施中
      最終版本的對外發布也是通過手工觸發(QA人員控制)
      以上的流程是根據項目/產品的需求和現狀制定的,只是一些思路可以借鑒,具體的實施一定要結合實際情況,因地制宜的開展
      Jenkins持續發布流水線
      幾個Jenkins持續發布流水線配置小Tips
      通過BuildNameSetterPlugin顯示當次流水線構建的版本(SVN revision或是Git revision)
      通過ParameterizedTriggerPlugin自動觸發下游任務,并把構建版本信息傳遞下去
      通過CopyArtifactPlugin用于構建物的部署
      通過BuildPipelinePlugin手工觸發某些任務,用于需要人工介入的階段

    posted @ 2014-04-03 11:20 順其自然EVO 閱讀(1898) | 評論 (0)編輯 收藏

    Jira6.0.5的詳細安裝及漢化授權

     第一步:安裝jdk-6u24-windows-i586.exe
      (1)下載到oracle官網下裝安裝?? ?jdk-6u24-windows-i586.exe,http://www.oracle.com/technetwork/java/javase/downloads/jdk-6u25-download-346242.html
      (2)配置JDK環境,在系統變量中創建JAVA_HOME ,值為C:\Program Files\Java\jdk1.6.0_24;
      創建Path,值為%JAVA_HOME%/bin;%JAVA_HOME%/jre/bin;
      創建Classpath,值為.;%JAVA_HOME%/lib/dt.jar;%JAVA_HOME%lib/tools.jar;(注意,.為C:\Program Files\Java\jdk1.6.0_24的目錄)
      說明:配置環境變量后,點擊控制面板,cmd,Java -version,java,查看JDK環境是否能正常運行,如果可以,即JDK環境配置成功。
      第二步:安裝mysql-5.5.20-win32.msi數據庫
      (1)Mysql官網(http://dev.mysql.com/downloads/)下載安裝mysql-5.5.20-win32.msi,安裝過程中選擇字符集為UTF8。(建議不要放在系統盤)
      注意,之前我安裝的是mysql-6.0.7-alpha-win32版本,但 jdbc 鏈接總是有問題,后來就換了一個效早期的版本。
      (2)配置mysql環境變量 PATH:D:\Program Files\mysql-5.6.13-win32\bin
      (3)配置windows服務 mysqld -install
      (4)啟動mysql  net start mysql      mysql -u root -p
      (5)建庫和建立賬戶
      1  創建數據庫jiradb
      create database jiradb character set 'UTF8';
      2 創建數據庫用戶并賦于權限
      create user jirauser identified by 'jira';//創建用戶名為jirauser,密碼為jira的帳號
      grant all privileges on *.* to 'jirauser’@ '%’ identified by 'jira’ with grant option;
      grant all privileges on *.* to 'jirauser’@ 'localhost’ identified by 'jira’ with grant option;
      flush privileges;
      第三步:下載jira
      (1)解壓 toD:\Program Files\atlassian-jira-6.0.5\JIRA(可以在任意目錄下)。
      (2)安裝mysql驅動
      拷貝數據驅動mysql-connector-java-5.1.25-bin.jar到jira安裝目錄下的lib目錄
      (3)在 D:\Program Files\atlassian-jira-6.0.5\JIRA\WEB-INF\classes\jira-application.properties, 設置 jira.home = D:\\Program Files\\atlassian-jira-6.0.5\\JIRA\atlassian-jira;。(注意,設置為主目錄;另外,;可加可不加,加了;后,表示主目錄為atlassian-jira;)
      第四步:漢化jira
      直接將language_zh_CN-6.0.jar拷貝到JIRA的安裝目錄的\atlassian-jira\WEB-INF\lib
      說明:JIRA提供了官方的中文包(漢化了60%),可通過web頁面的插件管理安裝官方的中文包。
      第五步:破解jira
      (1)用atlassian-extras-2.2.2.jar替換你的JIRA的安裝目錄的\atlassian-jira\WEB-INF\lib同名jar包。
      (2) 用atlassian-universal-plugin-manager-plugin-2.10.1.jar替換你的JIRA的安裝目錄的\atlassian-jira\atlassian-bundled-plugins.zip中的同名jar包。
      第六步,啟動jira
      (1)進入D:\Program Files\atlassian-jira-6.0.5\JIRA\bin啟動startup.bat,或者使用控制面板運行。
      (2)訪問http://127.0.0.1:8080/進入到jira的首頁。然后選中I have no a account,填寫部分個人信息,然后注冊成功后,即能試用訪問jira。(注意:記得密碼,訪問時,需要輸入密碼。)
      (3)注冊成功后,即可訪問主頁面。
      第七步,授權jira
      (1)進入主頁面,找到管理-系統-授權,點擊授權后,能查看到授權信息。
      (2)打開破解文件為keytpl.txt,修改相應信息,注意把SEN、ServerID、LicenseID等根據頁面的授權信息復制到keytpl.txt文件下,然后修改后,把keytpl.txt的所有內容復制到授權碼輸入框中,點擊添加,添加成功后,查看到用戶限制為無限制,即表示授權成功。

    posted @ 2014-04-03 11:17 順其自然EVO 閱讀(3107) | 評論 (1)編輯 收藏

    LoadRunner對不同協議的選擇

     大家常用的是Loadrunner測試web(Http/Html),但其實協議多種多樣。在B/S結構的網站多種業務的特點需要選擇不同的協議,協議如何選擇呢,尋找了相關資料。
      LoadRunner首先是一個測試工具,其次是一個性能測試工具,然后是該工具是一個基于協議,也就是說LoadRunner測試的對象都需要使用通信協議,對于那些不使用通信協議僅僅進行本地處理的軟件例如Microsoft Word,LoadRunner就不適用。說到通信協議我們來熟悉一下協議的分層,按照OSI的分層模型,分層結構如下:
      按照TCP/IP協議的分層,分層結構如下:
      第一個分層是由OSI制定但不實用,后一個是目前廣泛使用且被業界認做既定標準的協議分層,下文探討的LoadRunner協議選擇即按TCP/IP協議的分層模型討論。
      接著來說說LoadRunnerVuGen中的協議分類,VuGen(LR8.1)中的協議分類如下表所示:
      LoadRunner VuGen中的協議與文章開頭所說的通信協議還是有一定的區別的,例如像LoadRunner VuGen中的C 模板、Visual Basic 模板、Java 模板、Javascript. 和 VBScript. 類型的腳本均為開發語言,非通信協議。
      一般來說協議選擇有如下原則:
      B/S結構,選擇WEB(Http/Html)協議;
      C/S結構,可以根據后端數據庫的類型來選擇,如SybaseCTLib協議用于測試后臺的數據庫為Sybase的應用;MSSQLServer協議用與測試后臺數據庫為SQL Server的應用;
      對于有些使用純JAVA編寫的C/S結構的東東,采用JAVA,而且不能錄制只能手工編寫代碼(工作量和難度還是有的)。同樣不能錄制的還包括C、VB Script、VB、VBNet User協議。
      對于一些沒有數據庫的Windows應用,可選用Windows Sockets底層協議;使用了數據庫但使用的是ODBC連接的數據則選擇ODBC協議;對于Windows Sockets協議來說,最適合的那些基于Socket開發的應用程序;但是由于網絡通訊的底層都是基于Socket的,因此幾乎所有的應用程序都能夠通過Socket來錄制,哪可能有人會問,哪既然Socket都能錄制下來,還要那么多協議做什么,價格還賊貴,其實最主要的原因就是Socket錄制的代碼可讀性較差,如果Socket的腳本可讀性較高的話,實話就沒有其他協議出現的必要性了。
      對于郵件來說,首先要看你收郵件的途徑,如果你通過WEB頁面收發郵件,毫無疑問,你選擇協議時就需要選擇HTTP協議,如果你通過郵件客戶端,像OutLook、FoxMail之類的,則需要根據操作不同選擇不同的協議了,例如發郵件你可能要選擇SMTP、收郵件你可能需要選擇POP3。

    posted @ 2014-04-03 11:17 順其自然EVO 閱讀(216) | 評論 (0)編輯 收藏

    單元測試示例--LinkDaoTest.java

    字體:        | 上一篇 下一篇 | 打印  | 我要投稿  | 推薦標簽: 測試技術 單元測試

    import java.sql.ResultSet;
    import java.util.List;
    import mockit.Mock;
    import mockit.MockUp;
    import org.junit.AfterClass;
    import org.junit.BeforeClass;
    import org.junit.Test;
    import com.geezn.exception.GeeznException;
    import com.runqian.mis2.util.DBAccess;
    import com.runqianapp.ngr.data.model.MyLink;
    import com.runqianapp.schedule.utils.PathUtils;
    /**
    * @author RAQ
    *
    */
    public class LinkDaoTest {
    private LinkDao linkDao = new LinkDao();
    /**
    * 配置文件項目路徑
    */
    public static final String setProjectPath = "E:/workplace_link/LinkManagerJava/WebRoot";
    /**
    * 初始化環境
    */
    @BeforeClass
    public static void init() throws Exception {
    mockPathUtils();
    }
    /**
    * @throws java.lang.Exception
    */
    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
    }
    /**
    * @throws java.lang.Exception
    */
    @AfterClass
    public static void tearDownAfterClass() throws Exception {
    }
    /**
    測試刪除批量超鏈接方法
    Test method for {@link com.runqianapp.ngr.link.dao.LinkDao#removeLinks(java.lang.String)}.
    * @throws GeeznException
    */
    @Test
    public void testRemoveLinks() throws GeeznException {
    StringBuffer links = new StringBuffer();
    for(int i=21;i<1000;i++){
    links.append("/link").append(i).append(",");
    }
    links.deleteCharAt(links.length()-1);
    linkDao.removeLinks(links.toString());
    for(int j=20;j<1000;j++){
    MyLink linkCheck = linkDao.getMyLinkByShortLink("/link"+j);
    assertEquals("判斷刪除超鏈接是否成功","",linkCheck.getShortLink());  //逐一驗證超鏈接是否被成功刪除
    }
    }
    /**
    * 測試刪除單個超鏈接方法
    * Test method for {@link com.runqianapp.ngr.link.dao.LinkDao#removeLink(java.lang.String)}.
    * @throws Exception
    */
    @Test
    public void testRemoveLink() throws Exception {
    JunitParamUtil junitUtil = new JunitParamUtil(System.getProperty("user.dir") + "/test/com/runqianapp/ngr/link/dao/removelinkparams",1);
    // 從參數文件中獲取到的參數List
    List paramList = junitUtil.getParamList();
    for (int i = 0; i < paramList.size(); i++) {
    JunitParam param = (JunitParam) paramList.get(i);
    linkDao.removeLinks(param.getString(0));
    MyLink linkCheck = linkDao.getMyLinkByShortLink(param.getString(0));
    assertEquals("判斷刪除超鏈接是否成功","",linkCheck.getShortLink());
    }
    }
    /**
    * 測試獲取超鏈接方法
    * Test method for {@link com.runqianapp.ngr.link.dao.LinkDao#getMyLinkByShortLink(java.lang.String)}.
    * @throws Exception
    */
    @Test
    public void testGetMyLinkByShortLink() throws Exception {
    JunitParamUtil junitUtil = new JunitParamUtil(System.getProperty("user.dir") + "/test/com/runqianapp/ngr/link/dao/getmylinkbyshortlinkparams",1);
    // 從參數文件中獲取到的參數List
    List paramList = junitUtil.getParamList();
    for (int i = 0; i < paramList.size(); i++) {
    JunitParam param = (JunitParam) paramList.get(i);
    MyLink linkCheck = linkDao.getMyLinkByShortLink(param.getString(0));
    assertEquals("判斷獲取到的超鏈接是否為空",false,linkCheck.getLinkName().equals(""));
    }
    }
    /**
    * 測試修改超鏈接方法
    * Test method for {@link com.runqianapp.ngr.link.dao.LinkDao#modifyMyLink(com.runqianapp.ngr.data.model.MyLink)}.
    * @throws Exception
    */
    @Test
    public void testModifyMyLink() throws Exception {
    JunitParamUtil junitUtil = new JunitParamUtil(System.getProperty("user.dir") + "/test/com/runqianapp/ngr/link/dao/modifylinkparams",6);
    // 從參數文件中獲取到的參數List
    List paramList = junitUtil.getParamList();
    for (int i = 0; i < paramList.size(); i++) {
    MyLink myLink = new MyLink();
    JunitParam param = (JunitParam) paramList.get(i);
    // 獲取并設置參數
    myLink.setShortLink(param.getString(0));
    myLink.setLinkName(param.getString(1));
    myLink.setLinkUrl(param.getString(2));
    myLink.setLinkDes(param.getString(3));
    myLink.setIsRes(param.getInt(4));
    myLink.setParams(param.getString(5));
    linkDao.modifyMyLink(myLink);
    String linkName = linkDao.getMyLinkByShortLink(param.getString(0)).getLinkName();
    String linkUrl = linkDao.getMyLinkByShortLink(param.getString(0)).getLinkUrl();
    String linkDes = linkDao.getMyLinkByShortLink(param.getString(0)).getLinkDes();
    int linkIsRes = linkDao.getMyLinkByShortLink(param.getString(0)).getIsRes();
    String linkParams = linkDao.getMyLinkByShortLink(param.getString(0)).getParams();
    assertEquals("判斷超鏈接名稱是否已被修改",param.getString(1),linkName);
    assertEquals("判斷超鏈接Url是否已被修改",param.getString(2),linkUrl);
    assertEquals("判斷超鏈接描述是否已被修改",param.getString(3),linkDes);
    assertEquals("判斷超鏈接引用是否已被修改",param.getInt(4),linkIsRes);
    assertEquals("判斷超鏈接參數是否已被修改",param.getString(5),linkParams);
    }
    }
    /**
    * 測試新增超鏈接方法
    * Test method for {@link com.runqianapp.ngr.link.dao.LinkDao#saveLink(com.runqianapp.ngr.data.model.MyLink)}.
    * @throws Exception
    */
    @Test
    public void testSaveLink() throws Exception {
    // Junit參數工具類
    JunitParamUtil junitUtil = new JunitParamUtil(System.getProperty("user.dir") + "/test/com/runqianapp/ngr/link/dao/savelinkparams",6);
    // 從參數文件中獲取到的參數List
    List paramList = junitUtil.getParamList();
    for (int i = 0; i < paramList.size(); i++) {
    MyLink myLink = new MyLink();
    // Junit參數類
    JunitParam param = (JunitParam) paramList.get(i);
    // 獲取并設置參數
    myLink.setLinkName(param.getString(1));
    myLink.setLinkUrl(param.getString(2));
    myLink.setLinkDes(param.getString(3));
    myLink.setIsRes(param.getInt(4));
    myLink.setParams(param.getString(5));
    //根據數據總條數來獲得最后一個超鏈接ID,用于斷言
    DBAccess dba = new DBAccess();
    String shortLink = "";
    StringBuffer sql = new StringBuffer();
    sql.append("select count(*) total from t_hyperlink");
    ResultSet rs  = dba.executeQuery(sql.toString());
    int total = 0;
    while(rs.next()){
    total = rs.getInt("total");
    }
    linkDao.saveLink(myLink);
    MyLink checkLink = linkDao.getMyLinkByShortLink("/link"+total);
    assertEquals("判斷超鏈接名稱",param.getString(1),checkLink.getLinkName());
    assertEquals("判斷超鏈接URL",param.getString(2),checkLink.getLinkUrl());
    assertEquals("判斷超鏈接描述",param.getString(3),checkLink.getLinkDes());
    assertEquals("判斷超鏈接是否引用",param.getInt(4),checkLink.getIsRes());
    assertEquals("判斷超鏈接參數",param.getString(5),checkLink.getParams());
    }
    //壓力測試
    //      for(int i = 20;i<1000;i++){
    //          MyLink myLink = new MyLink();
    //          myLink.setShortLink("/link100");
    //          myLink.setLinkName("測試用例01");
    //          myLink.setLinkUrl("http://www.runqian.com.cn");
    //          myLink.setLinkDes("");
    //          myLink.setIsRes(1);
    //          try {
    //              linkDao.saveLink(myLink);
    //              MyLink checkLink = linkDao.getMyLinkByShortLink("/link20");
    //              assertEquals("判斷超鏈接名稱","測試用例01",checkLink.getLinkName());
    //          } catch (GeeznException e) {
    //              // TODO Auto-generated catch block
    //              e.printStackTrace();
    //          }
    //      }
    }
    /**
    * 模擬PathUtils
    */
    public  static void mockPathUtils() {
    new MockUp<PathUtils>() {
    @Mock
    public String getAppPhyPath() {
    return setProjectPath;
    }
    };
    }
    }

    posted @ 2014-04-03 11:03 順其自然EVO 閱讀(284) | 評論 (0)編輯 收藏

    談談容量規劃

     容量規劃是個資源管理的命題,其目標是解答運行中的系統需要多少容量以及在什么時候需要這些容量的問題,更簡單的說法就是回答我們需要在什么時候加多少機器的問題。
      容量規劃模型
      容量水位是一種常用的容量規劃模型,其定義為:集群流量 / 集群性能 x 100%
      容量水位模型把容量規劃問題轉化為兩個方面,即
      1. 系統的能力(集群性能)是多少?通過線上壓測回答
      2. 系統的負荷(集群流量)是多少?通過線上監控回答
      通過預定義安全水位、加機器水位等水位線,當集群負荷達到特定水位線時采取相應的措施。
      線上壓測
      集群性能 = 單機性能 x 集群機器數
      通過線上壓測可以得到單機性能,進行線上壓測前需要明確幾個問題
      1. 用什么來描述系統的性能?TPS還是網絡流量,根據具體業務具體分析,關鍵是它能真正反映實際性能
      2. 選取的性能指標能夠方便地監控嗎?
      3. 用什么樣的標準來度量最大性能?比如CPU達到80%,響應時間超過1s
      線上監控
      根據選取的性能指標,監控當前系統的運行情況,記錄其變化趨勢
      依賴容量
      系統各個部分存在一定的依賴關系。從業務上理解,即最靠近用戶的入口調用會轉化為中間層和底層系統上的調用。
      一定的用戶訪問模式,能夠得到其調用鏈路上的調用比例或依賴系數。故假設用戶訪問模式基本固定,我們只要設定(推廣活動前)前端系統的容量目標,就能推算出其依賴的中間層和底層系統的容量目標,從而進行所有依賴系統的容量規劃。
      容量規劃是受到業務模式或訪問模式影響的,而這種影響是一直變化的,我們需要定期的修正這種變化,才能保證容量規劃結果的正確性。

    posted @ 2014-04-03 10:57 順其自然EVO 閱讀(347) | 評論 (0)編輯 收藏

    XP下安裝Linux ubutu11.10雙系統

      下面是在XP系統下,硬盤安裝ubuntu11.10系統,安裝雙系統成功。
      1.menu.lst 和 grldr 放入C盤【以下【】中的內容,包括【】符號,到時候要刪掉】
      在menu.lst末尾添加:
      title InstallUbuntu 11.10
      root (hd0,0)  【這個是boot的盤,是C盤】
      kernel (hd0,4)/vmlinuzboot=casper iso-scan/filename=/Ubuntu1110amd.iso ro quiet splashlocale=zh_CN.UTF-8 【這里5表示D,這是iso文件算在的盤,也可以是U盤】
      initrd (hd0,4)/initrd.lz   【這里4表示D盤】
      【以上要注意iso的文件名要和實際的iso文件名一樣,位置也要一樣】
      2.修改boot.ini【我的電腦è屬性è高級è啟動和故障恢復 設置è編輯 即是】
      在boot.ini末尾添加:
      c:\grldr="ubntu11.0"
      3.F盤格式化為FAT32格式,然后刪掉【不知道沒有格式化可否成功】
      4.將linux的iso相關文件放入(hd0,4)指定的盤中【4這里是D盤】
      【1】ISO文件放入D盤;
      【2】解壓iso中casper文件夾中的initrd.lz和vmlinuz文件放到D盤中;
      【3】解壓ISO中的isolinux文件夾到D盤中
      5.重啟進入安裝界面,在點擊安裝前,先進入終端執行下#sudo umount –l /isodevice
      6.選擇linux和windows共存,進入安裝
      7.安裝好了,重啟,可以看到ubuntu下linux自動安裝好了啟動選項;然后選擇進入windows。進入windows后刪掉前面的文件:
      進入C盤,刪掉拷貝到C盤的menu.lst 和 grldr文件;
      并修改boot.ini文件:去掉添加的那一行 c:\grldr="ubntu11.0"
      下次進入XP系統時候,就不會在出現安裝ubuntu11的選項了。

    posted @ 2014-04-02 11:16 順其自然EVO 閱讀(201) | 評論 (0)編輯 收藏

    Oracle數據庫遠程連接設置的四種方法及其注意事項

    Oracle數據庫的遠程連接可以通過多種方式來實現,本文我們主要介紹四種遠程連接的方法和注意事項,并通過示例來說明,接下來我們就開始介紹。
      第一種情況:
      若oracle服務器裝在本機上,那就不多說了,連接只是用戶名和密碼的問題了。不過要注意環境變量%ORACLE_HOME%/network/admin/是否設置。
      第二種情況:
      本機未安裝oracle服務器,也未安裝oracle客戶端。但是安裝了pl sql development、toad sql development、sql navigator等管理數據庫的工具。在虛擬機或者另一臺電腦上安裝了oracle服務器,也就是虛擬機或者另一臺電腦此時作為服務器。
      這種情況下,本人以pl sql development遠程連接ORACLE服務端數據庫為例:
      1、在安裝oracle服務器的機器上搜索下列文件:
    oci.dll
    ocijdbc10.dll
    ociw32.dll
    orannzsbb10.dll
    oraocci10.dll
    oraociei10.dll
    sqlnet.ora
    tnsnames.ora
    classes12.jar
    ojdbc14.jar
      把這些找到的文件復制放到一個文件夾,如 oraclient,將此文件夾復制到客戶端機器上。如放置路徑為 D:\oraclient。
      2、配置tnsnames.ora,修改其中的數據庫連接串。
    oracledata =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.58)(PORT = 1521))
    (CONNECT_DATA =
    (SERVICE_NAME = oracledata)
    )
      其中,oracledata是要連接的服務名;HOST = 192.168.0.58,是服務器IP地址;PORT = 1521是端口號。
      3、添加第一個環境變量,名為TNS_ADMIN,值為tnsnames.ora文件所在路徑(如:D:\oraclient,特別是重裝后或其它操作,忘了TNS_ADMIN變量,plsql登陸就會報無法解析指定的連接標識符),這是為了能夠找到上面說的tnsnames.ora。這步是最重要的。
      添加第二個環境變量(可有可無):“NLS_LANG = SIMPLIFIED CHINESE_CHINA.ZHS16GBK”,(AMERICAN_AMERICA.US7ASCII 是ASCII編碼類型,其它類型可自己到服務器看一下或網上查找一下)(本步驟暫時要做對,如果編碼不對,會產生亂碼)。
      4、下載并安裝PL SQL Developer配置應用:
      打開PL SQL Developer,登入界面點取消,進入后選擇菜單欄 tools->preferences->connection :
      Oracle Home=D:\oracleclient
      OCI library=D:\oracleclient\oci.dll
      5、再次打開plsql則會在database中有oracledata 選項輸入用戶名密碼就可以登陸。
      第三種情況:
      本機未安裝ORACLE服務器,但是安裝了oracle客戶端,也安裝了pl sql development、toad sql development、sql navigator等管理數據庫的工具。在虛擬機或者另一臺電腦上安裝了oracle服務器,也就是虛擬機或者另一臺電腦此時作為服務器。
      這種情況下,本人以pl sql development遠程連接oracle服務端數據庫為例:
      1、打開oracle客戶端中的net manager,配置要遠程連接的數據庫名、IP地址等,如果net manager中沒有要遠程連接的數據庫名,則新建即可。
      2、其他步驟與第二種情況中的2---5相同。 第四種情況:
      本機未安裝oracle服務器,也未安裝pl sql development、toad sql development、sql navigator等管理數據庫的工具,但是安裝了oracle客戶端。在虛擬機或者另一臺電腦上安裝了ORACLE服務器,也就是虛擬機或者另一臺電腦此時作為服務器。
      這種情況下,本人以oracle客戶端中的sqlplus遠程連接oracle服務端數據庫為例:
      1、打開oracle客戶端中的net manager,配置要遠程連接的數據庫名、IP地址等,如果net manager中沒有要遠程連接的數據庫名,則新建即可。
      2、同第二種情況中的步驟二。
      3、同第二種情況中的步驟三。
      4、打開sqlplus:
      (1)如果用sys用戶登入,則用戶名:sys 密碼:xxxxxx 主機字符串:要連接的數據庫名 as sysdba,登入即可。
      (2)如果用其他用戶登入,則用戶名:xxx 密碼:xxxxxx 主機字符串:要連接的數據庫名,登入即可。
      注意事項:
      1、服務器端和客戶端防火墻需要關閉;
      2、我們經常會遇到監聽器服務無法啟動,那么需要打開Net Configuration Assistant修復,或者新建監聽器服務。
      3、數據庫密碼如果忘了怎么辦?按照以下方法修改密碼即可:
      開始-->運行-->cmd
      輸入 :sqlplus /nolog 回車
      輸入 :connect / as sysdba 回車
      用戶解鎖 : alter user system account unlock 回車
      修改密碼:alter user system identified by manager
      4、怎樣判斷數據庫是運行在歸檔模式下還是運行在非歸檔模式下?
      進入dbastudio,歷程--〉數據庫---〉歸檔查看。
      5、另外,如果本機和別的機子均安裝了oracle服務器端,那么本機如果要連接別的機子,就必須修改環境變量。

    posted @ 2014-04-02 11:15 順其自然EVO 閱讀(291) | 評論 (0)編輯 收藏

    僅列出標題
    共394頁: First 上一頁 130 131 132 133 134 135 136 137 138 下一頁 Last 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 免费看一级高潮毛片| 国产免费牲交视频免费播放| 中文字幕无码日韩专区免费| 亚洲一区精品伊人久久伊人| 国产精品亚洲精品日韩动图 | 美女内射毛片在线看免费人动物 | 国产亚洲精品AA片在线观看不加载| 亚洲爆乳少妇无码激情| 国产婷婷高清在线观看免费| 久久精品国产亚洲AV| 免费在线精品视频| A毛片毛片看免费| 亚洲av无码专区在线播放| 久久久久国产精品免费免费不卡| 亚洲日韩区在线电影| 无码国产精品一区二区免费式直播 | 女人让男人免费桶爽30分钟| 亚洲欧美日韩中文字幕在线一区| 免费在线观看自拍性爱视频| 少妇亚洲免费精品| 中文字幕无码毛片免费看| 亚洲日本精品一区二区| 99热在线精品免费全部my| 国产天堂亚洲国产碰碰| 亚洲色婷婷一区二区三区| 最近免费中文字幕大全免费版视频| 亚洲a视频在线观看| 亚洲av无码成人精品区在线播放| 亚洲免费人成视频观看| 久久99精品免费视频| 亚洲一区二区三区四区视频| 国产乱子伦精品免费无码专区| 国产精品九九久久免费视频| 亚洲色图古典武侠| 国产免费久久精品久久久| 最好免费观看高清在线| 亚洲国产午夜精品理论片在线播放 | 亚洲AⅤ永久无码精品AA | 菠萝菠萝蜜在线免费视频| 国产亚洲综合一区柠檬导航| 污污免费在线观看|