第一種:玩游戲,找bug;高級一點就是用專業的測試方法進行游戲測試 特征點:隸屬于程序或由策劃兼職---也就是并非一個和程序策劃平行的部門,而是一個下級部門(有些則根本被排除在研發體系之外)
職責:找bug,幫助修正bug等。
國內最常見的就是這種。
第二種:對游戲研發的整個過程進行質量控制(QC)
特征點:測試部門是一個和策劃程序平行的部門(實質上平行,某些表面上平行的其實也要歸為第一類)
職責:找bug,幫助修正bug;參與游戲早期開發,以預防bug;在開發流程上提出建議,以預防bug。
國內一線公司多數是這種。
特征點:QA高于程序和策劃,同時有一個直屬的測試部門(QC,和程序策劃平行)
職責:改進開發流程,預防bug。
至今沒有見過。
摘要: 周末在家蠻無聊的,思考人生的同時突發奇想就寫一個服務器監控的小工具吧。學JAVA快1年了,剛好檢驗一下自己! 仔細想想呢估計作用可能也有限,畢竟外面各種監控工具也很多,初衷其實也只是練練手,加上平時比較懶,那么為了更方便的看服務器性能指標,所以就選了這個題材咯,那么就開始吧。 不過優點也是有的嘛,至少不需要在服務器端裝一個腳本之類的了。 一、小工具的功能 1 能夠讀取服務器CPU,IO,M...
閱讀全文
背景
code first起初當修改model后,要持久化至
數據庫中時,總要把原數據庫給刪除掉再創建(DropCreateDatabaseIfModelChanges),此時就會產生一個問題,當我們的舊數據庫中包含一些
測試數據時,當持久化更新后,原數據將全部丟失,故我們可以引入EF的數據遷移功能來完成。
要求
已安裝NuGet
過程示例
//原model using System.Collections; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; public class Lesson { public int lessonID { get; set; } [Required] [MaxLength(50)] public string lessonName { get; set; } [Required] public string teacherName { get; set; } public virtual UserInfo UserInfo{get;set;} } //新model using System.Collections; using System.Collections.Generic; using System.ComponentModel.DataAnnotations; public class Lesson { public int lessonID { get; set; } [Required] [MaxLength(50)] public string lessonName { get; set; } [Required] [MaxLength(10)] public string teacherName { get; set; } public virtual UserInfo UserInfo{get;set;} } |
注:區別在于,我們給teacherName屬性加了一個長度限制。
接下來,我們將開始持久化此model至數據庫中(我們現在只是對屬性作修改,此時數據庫中此字段的長度為nvarchar(max),并不是nvarchar(10))
1:在config中配置數據庫連接:
<connectionStrings>
<add name="TestUsersDB" connectionString="Integrated Security=SSPI;Persist Security Info=False;Initial Catalog=TestUsersDB;Data Source=XCL-PC\SQLEXPRESS" providerName="System.Data.SqlClient" />
</connectionStrings>
2:打開NuGet控制臺:
摘要: ● BASE64 嚴格地說,屬于編碼格式,而非加密算法 ● MD5(Message Digest algorithm 5,信息摘要算法) ● SHA(Secure Hash Algorithm,安全散列算法) ● HMAC(Hash Message Authentication Code,散列消息...
閱讀全文
搭建平臺windows
準備工具如下:
-------------------------------------------------------------
http://python.org/getit/
下載setuptools 【python 的基礎包工具】
http://pypi.python.org/pypi/setuptools
下載pip 【python 的安裝包管理工具】
https://pypi.python.org/pypi/pip
1、python 的安裝,這個不解釋,exe 文件運行安裝即可,既然你選擇python,相信你
是熟悉python 的,我安裝目錄C:\Python27
2、setuptools 的安裝也非常簡單,同樣是exe 文件,默認會找到python 的安裝路徑,
將安裝到C:\Python27\Lib\site-packages 目錄下
3、安裝pip ,我默認解壓在了C:\pip-1.3.1 目錄下
4、打開命令提示符(開始---cmd 回車)進入C:\pip-1.3.1目錄下輸入:
C:\pip-1.3.1 > python setup.py install
(如果提示python 不是內部或外部命令!別急,去配置一下環境變量吧)
5、再切換到C:\Python27\Scripts 目錄下輸入:
C:\Python27\Scripts > easy_install pip
6、安裝selenium,(下載地址: https://pypi.python.org/pypi/selenium )
如果是聯網狀態的話,可以直接在C:\Python27\Scripts 下輸入命令安裝:
C:\Python27\Scripts > pip install -U selenium
7. 下載解壓,你會得到一個chromedriver.exe 文件,把這個文件放到
chrome 的安裝目錄下...\Google\Chrome\Application\ ,然后設置path 環境變量,把
chrome 的安裝目錄(我的:C:\Program Files\Google\Chrome\Application)
#encoding: utf-8 import os from selenium import webdriver from selenium.webdriver.common.keys import Keys chormedriver = "C:\Users\Administrator\AppData\Local\Google\Chrome\Application\chromedriver.exe" #打開IE瀏覽器 #iedriver = "C:\Program Files\Internet Explorer\IEDriverServer.exe" #os.environ["webdriver.ie.driver"] = iedriver os.environ["webdriver.chrome.driver"]= chormedriver browser = webdriver.Ie(chormedriver) browser.maximize_window() browser.get("http://www.51.la/") #assert "Python" in driver.title elem = browser.find_element_by_id("uname") #根據id定位到節點 elem.send_keys("xxxx") #向文本框添加內容 elem = browser.find_element_by_id("upass") #同上 elem.send_keys("xxxxx") #同上 browser.find_element_by_class_name("btlogin").click() #點擊提交按鈕 browser.find_element_by_link_text("查看統計報表").click() browser.find_element_by_link_text("訪問明細").click() browser.find_element_by_link_text("下載當前報表").click() |
方法詳見API,重點在節點的定位上,有多種定位方法。
berserkJS 是基于 Qt (C++跨平臺庫)開發的前端網絡(性能)監測工具。 它的核心功能是通過內置 webkit 收集由頁面實際網絡請求相關數據。 偏重于頁面上線前檢測與評估。
頁面性能分析工具,可用 JS 編寫自己的檢測、分析規則。 基于 Qt 開發,可跨平臺編譯,部署。內置基于 QtWebkit 的瀏覽器環境。 源碼需在目標系統中編譯后,可產生運行于
Windows /
Linux / Mac 系統的可執行文件。 工程中自帶 Window 系統中動態編譯的可執行文件,此文件位于 bulid 目錄下。
使用案例
無界面瀏覽器
測試:在不依賴本地任何瀏覽器的情況下,運行測試框架,如 QUnit,Capybara, QUnit, Mocha, WebDriver, YUI
Test, BusterJS, FuncUnit, Robot Framework 等。
頁面自動化:可以無障礙訪問和操作網頁的標準 DOM API 以及頁面所用 JS 變量、對象、屬性等內容。
屏幕捕獲:以編程方式獲取網頁全部或部分內容,可根據 Selector 截取指定 DOM 元素渲染情況;包括 CSS,SVG 和 Canvas。可將截取圖片 base64 化,以便發送給遠端服務器保存。
網絡監控:自動化的網絡性能監控,跟蹤頁面所有資源加載情況并可簡便的將輸出結果格式化為標準HAR格式。
頁面性能監控:自動化的頁面渲染監控,可獲取 CPU、 內存使用情況數據,根據頁面整體情況可簡便的輸出首次渲染時間、首屏渲染時間等關鍵數據。
工具特性
跨平臺性:基于 Qt 開發,可跨平臺編譯,部署。內置基于 QtWebkit 的瀏覽器環境。源碼需在目標系統中編譯后,可產生運行于 Windows / Linux / Mac 系統的可執行文件。
功能性:工具內置 webkit 瀏覽器內核,可響應瀏覽器內核事件回調、支持發送鼠標消息給瀏覽器、包裝瀏覽器網絡請求數據為JS數據格式、可與瀏覽器內JS做數據交互。
開放性:工具將主要操作均包裝為JS語法與數據格式,采用JS語法包裝,前端工程師可根據API組裝出符合各自預期的檢測功能。
接口性:工具本身支持命令行參數,可帶參調用。API支持處理外部進程讀取輸出流、支持HTTP發送數據。可由
WEB 程序遠程調用后獲取測試的返回結果。
標準性:完全真實的瀏覽器環境內 DOM,CSS,JavaScript,Canvas,SVG 可供使用,絕無仿真模擬。
特點差異
與 PhantomJS 相比具有以下不同:
API 簡易: 更直接的 API,如獲取網絡性能數據,僅需 3 行代碼,而非 PhantomJS 的幾十行,且信息量比 PhantomJS 豐富。
API 標準化: 常用 API 均采用 W3 規范標準命名,事件處理代碼可重復綁定而不相互覆蓋,可以無縫兼容 Wind.JS 等異步流程處理庫來解決自動化時異步流程控制問題。
頁面性能信息豐富:具有頁面渲染和 CPU、 內存使用情況數據獲取能力,可輸出首次渲染時間、首屏渲染時間等頁面性能關鍵數據。
調試便利: 具有 GUI 界面與命令行狀態兩種形式,開發調試期可使用 GUI 模式定位問題,此模式中可開啟 WebKit 的 Inspector 工具輔助調試頁面代碼與 DOM 。實際運行時可開啟命令行狀態避免自動執行時 GUI 界面干擾。
應用企業
新浪微博:已使用 berserkJS 構建前端性能監測數據分析平臺,防止微博主要產品在不停開發迭代時,頁面性能產生退化。
三維bug定義,bug三維:嚴重程度,處理優先級,影響范圍。
1.Bug嚴重程度。由Bug的創建者視情況來指定,其中1為最嚴重的問題,4為最小的問題。
一般來講,1級為系統崩潰或者數據丟失的問題;2級為主要功能的問題;3級為次要功能的問題;4級為細微的問題。
2.Bug處理優先級。由Bug的處理人員按照當前業務需求、開發計劃和資源狀態指定,其中1的優先級最高,4的優先級最低。
一般來講,1級為需要立即解決的問題;2級為需要在指定時間內解決的問題;3級為項目開發計劃內解決的問題;4級為資源充沛時解決的問題。
3.Bug影響范圍。由Bug的創建者視情況來指定,其中1為影響范圍最大的問題,4為影響范圍最小的問題。
一般來講,1級為直接阻礙整個系統或項目
測試繼續的版本BUG,如環境問題,性質定為整個項目延遲提測,可順延測試時間;2級為直接阻礙模塊或子系統
功能測試繼續的BUG,如,剛點一下功能就報錯,該功能測試流程完全走不通,無法繼續測試,性質定為部分功能延遲提測,可順延測試時間;3級為間接影響部分功能模塊繼續測試的BUG,性質定義為降低測試執行效率,可根據該類BUG的數量,修復效率適當順延測試時間。4級為幾乎不影響測試進度,可忽略對測試進度的影響。
從入行一開始就決定了不走技術路線,因為游戲之所以是游戲是因為其游戲性而不是技術性,我愛的是游戲,而不是技術。
1:剛入行的時候:找嚴重bug,或者操作步驟很多的bug,很有成就感,因為找到別人找不到的bug
2:后來意識到,基礎的簡單的bug價值不見得比嚴重的難找的bug價值低,開始轉向追求覆蓋、不漏基礎簡單的bug
3:開始關注流程,流程可以減少人為失誤導致的bug,開始關注預防bug,特別是通過流程來預防人為bug
4:認為流程最重要,幾乎所有的bug都可以通過流程來預防和解決
6:開始認識到信息的重要性,認為測試的職責是提供產品信息,而不是自己掌控決定權
7:開始認識到,測試要做的太多,不可能全部做到,要做取舍
8:測試是輔助,不僅僅輔助產品,而且要輔助團隊;團隊重要性高于項目
9:測試不僅僅要提供產品的信息,也要提供人的信息,團隊的信息
1. 介紹
SQLite 是一個開源的嵌入式關系
數據庫,實現自包容、零配置、支持事務的
SQL數據庫引擎。 其特點是高度便攜、使用方便、結構緊湊、高效、可靠。 與其他數據庫管理系統不同,SQLite 的安裝和運行非常簡單,在大多數情況下 - 只要確保SQLite的二進制文件存在即可開始創建、連接和使用數據庫。如果您正在尋找一個嵌入式數據庫項目或解決方案,SQLite是絕對值得考慮。
2. 安裝
1)進入 SQL 下載頁面:http://www.sqlite.org/download.html
2)下載 Windows 下的預編譯二進制文件包:
sqlite-shell-win32-x86-<build#>.zip
sqlite-dll-win32-x86-<build#>.zip
注意: <build#> 是 sqlite 的編譯版本號
將 zip 文件解壓到你的磁盤,并將解壓后的目錄添加到系統的 PATH 變量中,以方便在命令行中執行 sqlite 命令。
可選: 如果你計劃發布基于 sqlite 數據庫的應用程序,你還需要下載源碼以便編譯和利用其 API
sqlite-amalgamation-<build#>.zip
在 多個 Linux 發行版提供了方便的命令來獲取 SQLite:
/* For Debian or Ubuntu /*
$ sudo apt-get install sqlite3 sqlite3-dev
/* For RedHat, CentOS, or Fedora/*
$ yum install SQLite3 sqlite3-dev
SQLite on Mac OS X
如果你正在使用 Mac OS 雪豹或者更新版本的系統,那么系統上已經裝有 SQLite 了。
3. 創建首個 SQLite 數據庫
現在你已經安裝了 SQLite 數據庫,接下來我們創建首個數據庫。在命令行窗口中輸入如下命令來創建一個名為
test.db 的數據庫。
sqlite3 test.db
創建表:
sqlite> create table mytable(id integer primary key, value text);
2 columns were created.
該表包含一個名為 id 的主鍵字段和一個名為 value 的文本字段。
注意: 最少必須為新建的數據庫創建一個表或者視圖,這么才能將數據庫保存到磁盤中,否則數據庫不會被創建。
接下來往表里中寫入一些數據:
sqlite> insert into mytable(id, value) values(1, 'Micheal');
sqlite> insert into mytable(id, value) values(2, 'Jenny');
sqlite> insert into mytable(value) values('Francis');
sqlite> insert into mytable(value) values('Kerk');
查詢數據:
sqlite> select * from test;
1|Micheal
2|Jenny
3|Francis
4|Kerk
設置格式化查詢結果:
sqlite> .mode column; sqlite> .header on; sqlite> select * from test; id value ----------- ------------- 1 Micheal 2 Jenny 3 Francis 4 Kerk |
.mode column 將設置為列顯示模式,.header 將顯示列名。
修改表結構,增加列:
sqlite> alter table mytable add column email text not null '' collate nocase;;
創建視圖:
sqlite> create view nameview as select * from mytable;
創建索引:
sqlite> create index test_idx on mytable(value);
4. 一些有用的 SQLite 命令
顯示表結構:
sqlite> .schema [table]
獲取所有表和視圖:
sqlite > .tables
獲取指定表的索引列表:
sqlite > .indices [table ]
導出數據庫到 SQL 文件:
sqlite > .output [filename ]
sqlite > .dump
sqlite > .output stdout
從 SQL 文件導入數據庫:
sqlite > .read [filename ]
格式化輸出數據到 CSV 格式:
sqlite >.output [filename.csv ]
sqlite >.separator ,
sqlite > select * from test;
sqlite >.output stdout
從 CSV 文件導入數據到表中:
sqlite >create table newtable ( id integer primary key, value text );
sqlite >.import [filename.csv ] newtable
備份數據庫:
/* usage: sqlite3 [database] .dump > [filename] */
sqlite3 mytable.db .dump > backup.sql
恢復數據庫:
/* usage: sqlite3 [database ] < [filename ] */
sqlite3 mytable.db < backup.sql
下面介紹幾個概念
1:吞吐率(Requests per second)
服務器并發處理能力的量化描述,單位是reqs/s,指的是某個并發用戶數下單位時間內處理的請求數。某個并發用戶數下單位時間內能處理的最大請求數,稱之為最大吞吐率。
記住:吞吐率是基于并發用戶數的。這句話代表了兩個含義,1:吞吐率和并發用戶數相關;2:不同的并發用戶數下,吞吐率一般是不同的。
計算公式:總請求數 / 處理完成這些請求數所花費的時間,即
Request per second = Complete requests / Time taken for tests
2:并發連接數(The number of concurrent connections)
并發連接數指的是某個時刻服務器所接受的請求數目,簡單的講,就是一個會話。
3:并發用戶數(The number of concurrent users,Concurrency Level)
要注意區分這個概念和并發連接數之間的區別,一個用戶可能同時會產生多個會話,也即連接數。在HTTP/1.1下,IE7支持兩個并發連接,IE8支持6個并發連接,FireFox3支持4個并發連接,所以相應的,我們的并發用戶數就得除以這個基數。
下面主要說一下它的幾個主要的參數
運行參數
請求為100,并發為10,命令如下:ApacheBench -n100 -c10 http://uri
運行結果
Benchmarking www.cnblogs.com (be patient) Completed 100 requests Completed 200 requests Completed 300 requests Completed 400 requests Completed 500 requests Completed 600 requests Completed 700 requests Completed 800 requests Completed 900 requests Finished 1000 requests Server Software: Server Hostname: www.cnblogs.com Server Port: 80 Document Path: / Document Length: 45373 bytes Concurrency Level: 10 Time taken for tests: 45.299591 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Total transferred: 45679011 bytes HTML transferred: 45373000 bytes Requests per second: 22.08 [#/sec] (mean) Time per request: 452.996 [ms] (mean) Time per request: 45.300 [ms] (mean, across all concurrent requests) Transfer rate: 984.73 [Kbytes/sec] received Connection Times (ms) min mean[+/-sd] median max Connect: 26 44 189.5 31 3035 Processing: 89 405 583.3 284 5190 Waiting: 30 143 344.6 97 5031 Total: 116 450 611.7 315 5224 Percentage of the requests served within a certain time (ms) 50% 315 66% 322 75% 331 80% 343 90% 408 95% 549 98% 3333 99% 3375 100% 5224 (longest request) |