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

    如何用Jmeter做壓力測試

    Jmeter是一個性能測試工具,同loadrunner類似,他功能較多,我們常用的功能是用jmeter模擬多瀏覽器對網站做壓力測試。
      下載jmeter地址 :http://jakarta.apache.org/site/downloads/downloads_jmeter.cgi
      我們一般的網站,在進入業務功能前先需登錄,然后才能訪問業務功能。下面介紹如何用jmeter登錄系統再對主業務做壓力測試。
      1. 運行jmeter
      2. 左邊樹將出現測試計劃、工作臺兩根節點。
      3. 選擇測試計劃,按右鍵-》添加-》threads(users)線程組
      線程組能設置以多少個線程并發做壓力測試。
      在”循環次數”設置不選擇永遠,循環次數設置1。
      4. 現在先介紹如何設置登錄http請求,選擇線程組,右鍵――添加――》sampler-―》http 請求。
      http請求即模仿瀏覽器的訪問。
      在“服務器名稱或ip”設置127.0.0.1,端口號設置:8080,“方法”設置post,路徑設置網站登錄的地址,如“/exam/operatorAction”。
      登錄需傳入用戶、密碼。在“同請求一起發送參數”列表中添加參數。參數值根據web應用設置。如login_user=0001;login_password=1;actFlag=login
      5. 登錄成功后,網站一般將跳入主頁面。在jmap中可做判斷,判斷是否登錄后按預想進入主頁面(此步驟也可不設)。選擇4中的“http請求“,右鍵――》添加――》斷言――》響應斷言。“Apply to”設置Main smaple only;“要測試的響應字段”設置“url樣本”;“模式匹配規則”設置“包括”,“要測試的模式”增加頁面跳轉到的主頁面,如:“studentMain.jsp”
      6. 一般網站登錄后,在tomcat中生成了session,之后訪問其他頁面將無需再次登錄,前提是瀏覽器需支持cookie。在jmap中也同樣,如要繼續訪問其他頁面,還需做下面關鍵的設置。
      選擇“線程組”――》右鍵――》添加――》配置元件――》Http cookie管理器。加了此步驟后,http請求將具備cookie功能,即登錄成功后訪問其他頁面將不會跳轉到登錄頁面重新登錄。
      7. 對目標頁面反復壓力測試。
      7.1 如何使被測頁面反復訪問達到測壓效果。選“線程組”―》右鍵――》邏輯控制器――》循環控制器。循環次數中選擇“永遠”。
      7.2 選擇剛加的“循環控制器”,右鍵――》添加――》sampler-―》http 請求,按4步驟設置ip、端口,http請求方法為“get”,路徑為被壓力測試的url,如:“exam/business/studentExam.action.StudentExamAction?action=goIntoMockExam”。
      按上面的設置后,已完成配置,可做壓力測試。只需點菜單“運行”――》啟動,即運行壓力測試。
      8. jmeter提供了許多壓力結果查看工具。是壓力測試時非常好的分析工具。下面幾種查看工具可有選擇的添加。
      8.1 察看結果樹。他記錄每次請求發送數據、響應返回數據。選擇“線程組”――》右鍵――》添加――》察看結果樹。
      8.2 用表格查看結果。可查看每次請求的響應時間等。選擇“線程組”――》右鍵――》添加――》用表格查看結果。
      8.3 Summary Report。可查看平均響應時間、最長響應時間等。

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

    高效的軟件研發團隊結構

     在前面為各位讀者介紹了誰是最佳軟件質量責任人——軟件開發者。并給大家介紹了因此會給組織和個人帶來的價值和好處。但是這里還有一個關鍵問題還需要解決,否則把軟件質量責任人轉換為軟件開發者的這個改革就會變的無法實施。
      什么問題呢?——軟件開發者增加了質量保障的職責,可他有足夠的資源來完成這個職責嗎? 如果只是簡單地給軟件開發者增加職責,又沒有新增資源來支持他的新職責,那么這個改變不但不會得到好的效果,還會遭到開發者的更強烈的反對,他們更愿意回到過去的那種狀態。因此為了讓開發人員能更好的保障質量,就需要幫助開發人員提升工作效率,輔助他保障質量,而不是讓他一個人孤軍奮戰。當然如果你的團隊都是精英開發者,個人戰斗力極強,孤軍奮戰也沒有問題,那么就無需為他們提供開發效率提升和質量保障方面的支撐。
      那么軟件開發者增加了質量保障的職責后,需要增加哪些對應的資源以支撐他們可以在質量保障與功能實現的職責間獲得平衡。
      1: 教給開發者高效的快速驗證軟件質量風險的測試方法
      2: 減少開發者自驗證測試的時間成本和復雜度
      3: 提供幫助開發者提高開發效率的開發工具和開發框架
      4: 讓開發者的編譯速度更快減少編譯等待時間
      5: 通過有效的方法提高開發人員評審需求和設計的效率
      6: 減少開發人員分析定位bug的時間
      當你的開發人員能得到以上部分資源的支持時,他們才能擠出時間來思考如何能在設計和開發階段保障自己輸出的質量。
      可是公司中哪有資源來支持開發人員來提高工作效率呢?這里我們可以參考軟件工程發展最前沿的美國公司的實踐。在當前硅谷最先進軟件生產力的公司——谷歌,他們的組織結構中有一個叫EP(Engine Productive)的團隊,這個團隊與廣告技術團隊、搜索算法團隊、架構設計團隊、性能團隊的定位一樣,是谷歌的長線建設的領域技術團隊。該團隊的成員有:
      測試開發工程師、工具開發工程師、測試工程師組成。測試工程師工作的目標變為了:幫助產品快速地達到質量目標,而不是作為質量保障的主體。
      EP團隊除了對軟件質量的檢查測試提供測試技術支持和測試資源外,還負責幫助開發人員提升工作效率,優化一切可以提升工作效率的工作環節。例如:開發人員更有效的測試,更合理的測試投入,減少與業務實現無關的工作耗時,幫他們更好地做好開發階段的質量保障工作。在谷歌有些團隊能達到10:1的開發測試人員比,除了這位測試人員能力超群外,開發人員的專業能力和開發人員的質量保障目標都是關鍵的決定因素。如果只有一位超級測試人員,沒有開發人員作為質量責任主體和專業技能優秀的開發人員,那么10:1的配置下這位超級測試人員則會被各種軟件問題鋪天蓋地淹沒掉。
      如上圖所示大多數的研發團隊模式是舊模式,開發團隊只關注進度,測試團隊只關注質量。于是測試團隊規模越來越大,產品的進度總是與質量目標矛盾重重。如果應用新模式,則賦予開發團隊更大的權利和責任,進度和質量都是由開發團隊說了算,當開發團隊因缺乏資源完成進度和質量目標時,開發團隊可以通過EP團隊的臨時支援協助達成目標。
      開發團隊與EP團隊之間的合作模式,還應該是開發團隊有需求時拉上EP團隊來共同工作。而不應該是EP團隊去推動開發團隊,開發團隊被動使用EP團隊資源來共同工作。如果開發團隊被動的被EP團隊推動去提升工作效率和工作質量,則很可能會同時傷害到開發團隊和EP團隊的士氣,EP團隊去推動開發團隊會受到很多阻力,感覺不到自我存在的價值,士氣受影響。開發團隊則被動的被服務,覺得自己的工作節奏受到了影響,影響自己的工作進度,心里也是不舒服的,影響士氣。

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

    軟件測試策略之單元測試

     軟件測試策略
      測試過程按4個步驟進行,即單元測試,組裝測試,確認測試和系統測試
      開始是單元測試,集中對用源代碼實現的每一個程序單元進行測試,檢查各個程序模塊是否正確的實現了規定的功能。
      組裝測試是把已經測試過的模塊組裝起來,主要對與設計相關的軟件體系結構的構造進行測試。
      確認測試則是要檢查已實現的軟件是否滿足了需求規格說明書中確定了的各種需求,以及軟件配置是否完全,正確。
      系統測試,是把已經經過確認的軟件納入實際運行環境中,與其他的系統成份組合在一起進行測試。
      單元測試(Unit Testing)
      單元測試又稱模塊測試,是針對軟件設計的最小單位---程序模塊,進行正確性檢驗的測試工作。其目的在于發現各模塊內部可能存在的各種差錯。
      單元測試需要從程序的內部結構出發設計測試用例。多個模塊可以平行的獨立進行單元測試。
      1、單元測試的內容
      在單元測試時,測試者需要依據詳細設計說明書和源程序清單,了解該模塊的I/O條件和模塊的邏輯結構,主要采用白盒測試的測試用例,輔之以黑盒測試的測試用例,使之對任何合理的輸入和不合理的輸入,都能鑒別和響應。
      (1)模塊接口測試
      在單元測試的開始,應對通過被測模塊的數據流進行測試。測試項目包括:
      u  調用本模塊的輸入參數是否正確
      u  本模塊調用子模塊時輸入給子模塊的參數是否正確
      u  全局量的定義在各模塊中是否一致
      在做內外存交換時要考慮:
      u  文件屬性是否正確
      u  OPEN與CLOSE語句是否正確
      u  緩沖區容量與記錄長度是否匹配
      u  在進行讀寫操作前是否打開了文件
      u  在街上文件處理時是否關閉了文件
      u  正文書寫/輸入錯誤
      u  I/O錯誤是否檢查并做了處理
    (2)局部數據結構測試
      u  不正確或不一致的數據類型說明
      u  使用尚未賦值或尚未初始化的變量
      u  錯誤的初始值或錯誤的缺省值
      u  變量名拼寫錯或書寫錯
      u  不一致的數據類型
      u  全局數據對模塊的影響
      (3)路徑測試
      u  選擇適當的測試用例,對模塊中重要的執行路徑進行測試
      u  應當設計測試用例查找由于錯誤的計算,不正確的比較或不正常的控制流而導致的錯誤
      u  對基本執行路徑和循環進行測試可以發現大量的路徑錯誤
      (4)錯誤處理測試
      u  出錯的描述是否難以理解
      u  出錯的描述是否能夠對錯誤定位
      u  顯示的錯誤與實際的錯誤是否相符
      u  對錯誤條件的處理正確與否
      u  在對錯誤進行處理之前,錯誤條件是否已經引起系統的干預等
      (5)邊界測試
      u  注意數據流,控制流中剛好等于,大于或小于確定的比較值時出錯的可能性。對這些地方要仔細的選擇測試用例,認真的加以測試。
      u  如果對模塊運行時間有要求的話,還要專門進行關鍵路徑測試,以確定最壞情況下和平均意義下影響模塊運行時間的因素。
      2、  單元測試的步驟
      模塊并不是一個獨立的程序,在考慮測試模塊時,同時要考慮它和外界的聯系,用一些輔助模塊與被測模塊相聯系的其他模塊。
      u  驅動模塊(driver)
      u  樁模塊(stub)-----存根模塊
      n  如果一個模塊要完成多種功能,可以將這個模塊看成由幾個小程序組成。必須對其中每個小程序先進行單元測試要做的工作,對關鍵模塊還要做性能測試。
      n  對支持某些標準規程的程序,更要著手進行互聯測試。有人把這種情況特別成為模塊測試,以區別單元測試。

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

    性能測試腳本分析學習

      今天繼續學習了查詢入庫_入庫完全收貨腳本錄制。
      前提:入庫收貨頁面存在大數據量,是幾十萬條數據,不輸入查詢條件默認是查詢前部數據。
      操作:不輸入查詢條件,點擊查詢,默認查詢全部數據
      存在問題:1.錄制完成查詢和收貨后,保存腳本會有報錯
      2.在tree目錄下查找request,沒看到查詢response信息
      3.腳本分析出現很多重復的request
      原因:大數據查詢,需等待一段時間,即后臺刷新會出現request發出重復信息
      由于大數據,response信息過大,loadrunner無法重載出新response查找不到信息,同時保存報錯。
      正確錄制:
      1.輸入OrderNO ,點擊查詢,操作收貨。
      2.從request腳本分析<Operation>query<Operation> 計算查詢操作發出請求,同時可以看response返回來的信息。
      3.查看完所有request可以看到,收貨的request信息在查詢中可以去調用。
      4.即在查詢結果去做關聯,在收貨可以調用。
      5.由于查詢條件OrderNO是輸入的每次值會不一樣,即需要做Script做參數化,導入數據庫的值。
      6.每次回放腳本看是否成功,在tree目錄下replay去查看response返回來的值是否正確,或者登陸系統去查看數據
      總結:參數化或者關聯都是為request做更加真實的模仿,所以腳本那些變量需要參數化,第一步一定要從request去分析腳本,從<Operation>方法<Operation>去理解對應到系統的是做什么操作

    posted @ 2014-04-25 09:58 順其自然EVO 閱讀(191) | 評論 (0)編輯 收藏

    Robotium測試用例執行順序及批處理方式

    一、控制測試用例的執行順序
      采用TestSuit方式來控制每條Case的運行順序
      Demo如下
    public static Test suite() {
    TestSuite suite = new TestSuite();
    //$JUnit-BEGIN$
    suite.addTestSuite(CopyOfTestApk.class);
    //$JUnit-END$
    return suite;
    }
      二、bat批處理方式啟動Robotium腳本
      單個啟動
      am instrument -w com.testcalculator/android.test.InstrumentationTestRunner
      啟動Test Suit
      Am instrument -e class com.testcalculator.AllTests -w com.testcalculator/android.test.InstrumentationTestRunner
      Java中啟動
    public  void callChosenTest(){
    Runtime run = Runtime.getRuntime();
    try {
    //Process p = run.exec("am instrument -w com.testcalculator/android.test.InstrumentationTestRunner");///執行全部的測試案例
    Process p = run.exec("am instrument -e class com.testcalculator.AllTests -w com.testcalculator/android.test.InstrumentationTestRunner");
    //執行一個測試案例
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }
     命令行啟動
      1.運行所有的測試用例
      舉個栗子:運行測試工程下的所有用例
      1adb shell am instrument -w com.taobao.taobao.test/android.test.InstrumentationTestRunner
      2.運行單個測試類或某個TestSuite
      舉個栗子:運行測試類com.taobao.taobao.test.TestRegister
      1adb shell am instrument -e class com.taobao.taobao.test.TestRegister -w com.taobao.taobao.test/android.test.InstrumentationTestRunner
      3.運行某個測試類里面的某個測試方法
      舉個栗子:運行com.taobao.taobao.test.TestRegister中的測試方法testRegister
      adb shell am instrument -e class com.taobao.taobao.test.TestRegister#testRegister -w com.taobao.taobao.test/android.test.InstrumentationTestRunner
      4.運行兩個不同的測試類或類中的方法
      舉個栗子:運行com.taobao.taobao.test.TestLogin和com.taobao.taobao.test.TestRegister類中的方法testRegister
    1adb shell am instrument -e class com.taobao.taobao.test.TestLogin,com.taobao.taobao.test.TestRegister#testRegister  -w com.taobao.taobao.test/android.test.InstrumentationTestRunner
    Runtime run = Runtime.getRuntime();
    try {
    //Process p = run.exec("am instrument -w com.testcalculator/android.test.InstrumentationTestRunner");///執行全部的測試案例
    Process p = run.exec("am instrument -e class com.testcalculator.AllTests -w com.testcalculator/android.test.InstrumentationTestRunner");
    //執行一個測試案例
    } catch (IOException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
    }
    }

    posted @ 2014-04-25 09:55 順其自然EVO 閱讀(2110) | 評論 (0)編輯 收藏

    sqlyog導入數據庫腳本報錯

      前兩天將客戶的數據庫備份成sql文件,sql文件大小61M.發給同事之后。同事說導入的時候一直報錯。導出方式和發送了幾次,還是報錯。我還以為我的導出有錯或者網絡原因。可是在我的電腦上測試還是出現這樣的問題。
      最后的解決辦法是:
      #直接在sqlyog里面執行,修改這兩個變量的值:
      set global max_allowed_packet=10000000;
      set global net_buffer_length=10000;
      執行完這兩句后,再次導入sql文件問題得到解決。下面是執行完這兩句之后的截圖:

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

    Java中super的使用

      一、super調用超類構造函數
      super(parameter-list);
      parameter-list指定超類中構造函數所需的任何形參,super()必須是在子類構造函數中執行的第一個語句。超類定義的任何形式的構造函數都可以被super()調用,被執行的構造函數就是與實參相匹配的那一個。
      當存在多重繼承時,super總是引用最靠近的超類的構造函數。例如:C類繼承B類,B類繼承A類,則C類的構造函數中使用super,引用B類的構造函數。
      如果不使用super(),那么就會執行每個超類的默認(無形參)構造函數。
      例如:
    <span style="font-size:14px;">public class test {
    public static void main(String [] args){
    new Teacher("one", 62);
    new Teacher("two", 180);
    new Teacher("three", 65, 188);
    }
    }
    class Human {
    static private float weight;
    static private int height;
    Human(float weight){
    Human.weight = weight;
    System.out.println(Human.weight);
    }
    Human(int height){
    Human.height = height;
    System.out.println(Human.height);
    }
    Human(float weight, int height){
    Human.weight = weight;
    Human.height = height;
    System.out.println(Human.weight + " " + Human.height);
    }
    }
    class Teacher extends Human {
    static private String s;
    Teacher(String s, float weight){
    super(weight);
    Teacher.s = s;
    System.out.println(Teacher.s);
    }
    Teacher(String s, int height){
    super(height);
    Teacher.s = s;
    System.out.println(Teacher.s);
    }
    Teacher(String s, float weight, int height){
    super(weight, height);
    Teacher.s = s;
    System.out.println(Teacher.s);
    }
    }
    </span>
      結果:
      62
      one
      180
      two
      65.0 188
      three
     二、super訪問超類的成員
      例如:
    <span style="font-size:14px;">public class test {
    public static void main(String [] args){
    new Teacher("three", 65, 188);
    }
    }
    class Human {
    static public float weight;
    static public int height;
    }
    class Teacher extends Human {
    static private String s;
    Teacher(String s, float weight, int height){
    super.weight = weight;
    super.height = height;
    Teacher.s = s;
    System.out.println(super.weight);
    System.out.println(super.height);
    System.out.println(Teacher.s);
    }
    }</span>
      結果:
      65.0
      188
      three
      三、super和this的區別
      1)super(參數):調用基類中的某一個構造函數(應該為構造函數中的第一條語句);this(參數):調用本類中另一種形成的構造函數(應該為構造函數中的第一條語句);
      2)super引用當前對象的直接父類中的成員(用來訪問直接父類中被隱藏的父類中成員數據或函數,基類與派生類中有相同成員定義時如:super.變量名    super.成員函數據名(實參);this代表當前對象名(在程序中易產生二義性之處,應使用this來指明當前對象;如果函數的形參與類中的成員數據同名,這時需用this來指明成員變量名);
      3)調用super()必須寫在子類構造方法的第一行,否則編譯不通過。每個子類構造方法的第一條語句,都是隱含地調用super(),如果父類沒有這種形式的構造函數,那么在編譯的時候就會報錯;super()和this()類似,區別是,super()從子類中調用父類的構造方法,this()在同一類內調用其它方法;
      4)super()和this()均需放在構造方法內第一行;
      5)盡管可以用this調用一個構造器,但卻不能調用兩個;
      6)this和super不能同時出現在一個構造函數里面,因為this必然會調用其它的構造函數,其它的構造函數必然也會有super語句的存在,所以在同一個構造函數里面有相同的語句,就失去了語句的意義,編譯器也不會通過;
      7)this()和super()都指的是對象,所以,均不可以在static環境中使用。包括:static變量,static方法,static語句塊;
      8)從本質上講,this是一個指向本對象的指針, 然而super是一個Java關鍵字。

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

    Java線程池的工作原理與實現

      簡單介紹
      創建線程有兩種方式:繼承Thread或實現Runnable。Thread實現了Runnable接口,提供了一個空的run()方法,所以不論是繼承Thread還是實現Runnable,都要有自己的run()方法。
      一個線程創建后就存在,調用start()方法就開始運行(執行run()方法),調用wait進入等待或調用sleep進入休眠期,順利運行完畢或休眠被中斷或運行過程中出現異常而退出。
      wait和sleep比較:
      sleep方法有:sleep(long millis),sleep(long millis, long nanos),調用sleep方法后,當前線程進入休眠期,暫停執行,但該線程繼續擁有監視資源的所有權。到達休眠時間后線程將繼續執行,直到完成。若在休眠期另一線程中斷該線程,則該線程退出。
      wait方法有:wait(),wait(long timeout),wait(long timeout, long nanos),調用wait方法后,該線程放棄監視資源的所有權進入等待狀態;
      wait():等待有其它的線程調用notify()或notifyAll()進入調度狀態,與其它線程共同爭奪監視。wait()相當于wait(0),wait(0, 0)。
      wait(long timeout):當其它線程調用notify()或notifyAll(),或時間到達timeout亳秒,或有其它某線程中斷該線程,則該線程進入調度狀態。
      wait(long timeout, long nanos):相當于wait(1000000*timeout + nanos),只不過時間單位為納秒。
      線程池的作用:
      線程池作用就是限制系統中執行線程的數量。
      根據系統的環境情況,可以自動或手動設置線程數量,達到運行的最佳效果;少了浪費了系統資源,多了造成系統擁擠效率不高。用線程池控制線程數量,其他線程排隊等候。一個任務執行完畢,再從隊列的中取最前面的任務開始執行。若隊列中沒有等待進程,線程池的這一資源處于等待。當一個新任務需要運行時,如果線程池中有等待的工作線程,就可以開始運行了;否則進入等待隊列。
      為什么要用線程池:
      減少了創建和銷毀線程的次數,每個工作線程都可以被重復利用,可執行多個任務
      可以根據系統的承受能力,調整線程池中工作線線程的數目,防止因為因為消耗過多的內存,而把服務器累趴下(每個線程需要大約1MB內存,線程開的越多,消耗的內存也就越大,最后死機)
      線程池:
      多線程技術主要解決處理器單元內多個線程執行的問題,它可以顯著減少處理器單元的閑置時間,增加處理器單元的吞吐能力。
      假設一個服務器完成一項任務所需時間為:T1 創建線程時間,T2 在線程中執行任務的時間,T3 銷毀線程時間。
      如果:T1 + T3 遠大于 T2,則可以采用線程池,以提高服務器性能。
      一個線程池包括以下四個基本組成部分:
      1、線程池管理器(ThreadPool):用于創建并管理線程池,包括 創建線程池,銷毀線程池,添加新任務;
      2、工作線程(PoolWorker):線程池中線程,在沒有任務時處于等待狀態,可以循環的執行任務;
      3、任務接口(Task):每個任務必須實現的接口,以供工作線程調度任務的執行,它主要規定了任務的入口,任務執行完后的收尾工作,任務的執行狀態等;
      4、任務隊列(taskQueue):用于存放沒有處理的任務。提供一種緩沖機制。
      線程池技術正是關注如何縮短或調整T1,T3時間的技術,從而提高服務器程序性能的。它把T1,T3分別安排在服務器程序的啟動和結束的時間段或者一些空閑的時間段,這樣在服務器程序處理客戶請求時,不會有T1,T3的開銷了。
      線程池不僅調整T1,T3產生的時間段,而且它還顯著減少了創建線程的數目,看一個例子:
      假設一個服務器一天要處理50000個請求,并且每個請求需要一個單獨的線程完成。在線程池中,線程數一般是固定的,所以產生線程總數不會超過線程池中線程的數目,而如果服務器不利用線程池來處理這些請求則線程總數為50000。一般線程池大小是遠小于50000。所以利用線程池的服務器程序不會為了創建50000而在處理請求時浪費時間,從而提高效率。

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

    LoadRunner參數化使用mysql數據源

    使用LoadRunner中的參數化,數據源來自mysql數據表。
      使用mysql數據源之前,要先安裝mysql驅動。http://dev.mysql.com/downloads/connector/odbc/,這里以Connector/ODBC 5.2.6為例。
      安裝過程中如果遇到類似于ANSI問題,要將Windows>>system32>>msvcr100_clr0400.dll復制,改名為msvcr100.dll
      安裝即可成功。可以在控制面板中,Administrative Tools >>Data Sources (ODBC)找到剛才安裝的驅動。
      然后在User DSN中點Add,選擇剛添加的mysql驅動。
      Data Source Name 和 Description中,隨意填寫。server中填寫服務器的ip,我用的本機的數據庫,所以填寫為127.0.0.1
      User name 和Password就不用說了吧。Database是選擇要使用的數據庫,點test測試一下。好了, 連接成功。
      回到LoadRunner中,在參數化窗口中點Data Wizard...按鈕。
      選中Specify SQL statement manually.
      在machine Data Source中選中數據源
      點Create...按鈕,在SQL語句中輸入適當的語句。數據導入成功。

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

    Thinkphp防止SQL注入

    防止SQL注入
      對于WEB應用來說,SQL注入攻擊無疑是首要防范的安全問題,系統底層對于數據安全方面本身進行了很多的處理和相應的防范機制,例如:
    $User = M("User"); // 實例化User對象
    $User->find($_GET["id"]);
      即便用戶輸入了一些惡意的id參數,系統也會強制轉換成整型,避免惡意注入。這是因為,系統會對數據進行強制的數據類型檢測,并且對數據來源進行數據格式轉換。而且,對于字符串類型的數據,ThinkPHP都會進行escape_string處理(real_escape_string,mysql_escape_string)。
      通常的安全隱患在于你的查詢條件使用了字符串參數,然后其中一些變量又依賴由客戶端的用戶輸入,要有效的防止SQL注入問題,我們建議:
      查詢條件盡量使用數組方式,這是更為安全的方式;
      如果不得已必須使用字符串查詢條件,使用預處理機制(3.1版本新增特性);
      開啟數據字段類型驗證,可以對數值數據類型做強制轉換;(3.1版本開始已經強制進行字段類型驗證了)
      使用自動驗證和自動完成機制進行針對應用的自定

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

    僅列出標題
    共394頁: First 上一頁 120 121 122 123 124 125 126 127 128 下一頁 Last 
    <2025年5月>
    27282930123
    45678910
    11121314151617
    18192021222324
    25262728293031
    1234567

    導航

    統計

    常用鏈接

    留言簿(55)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 亚洲国产av美女网站| 日本视频免费观看| 毛片免费观看网址| 菠萝菠萝蜜在线免费视频| 亚洲va中文字幕无码久久不卡| 成人免费大片免费观看网站| 色噜噜狠狠色综合免费视频| 亚洲一区二区中文| 国产免费69成人精品视频| 久久免费观看国产精品88av| 亚洲精品久久久久无码AV片软件| 亚洲色婷婷一区二区三区| 91短视频免费在线观看| 日韩少妇内射免费播放| 亚洲欧洲春色校园另类小说| 亚洲色图综合在线| 无码区日韩特区永久免费系列| www成人免费观看网站| 2017亚洲男人天堂一| 亚洲精品无码午夜福利中文字幕| 永久免费观看的毛片的网站| 久9热免费精品视频在线观看| 人妻仑刮八A级毛片免费看| 亚洲国产成人久久精品app| 亚洲人成在线播放网站| 日本免费福利视频| www视频在线观看免费| 两个人日本免费完整版在线观看1| 亚洲熟妇无码一区二区三区导航| 亚洲avav天堂av在线不卡| 亚洲无码视频在线| 暖暖免费高清日本中文| 国产免费不卡视频| 日本在线免费观看| 永久免费无码网站在线观看个| 亚洲精品国产第一综合99久久| 亚洲精品亚洲人成在线麻豆| 亚洲精品国产精品乱码在线观看 | 国产无遮挡无码视频免费软件| 噜噜综合亚洲AV中文无码| 亚洲成年人电影在线观看|