自從搞了bi數據就很少寫代碼了,這次到新公司要從頭開始搭建測試團隊,又要開啟新的自動化測試之旅,python已經到3.X版本了,也支持了Robot framework的ride庫,現把安裝文檔整理如下,便于后續新人安裝,少走彎路。
參考資料:
https://blog.csdn.net/thefg/article/details/128601410
https://blog.csdn.net/qq_45894553/article/details/119893181
特別說明:
安裝環境選擇的版本:Windows10+python3.7,大于3.7版本安裝Robot framework的ride庫不能正常使用。
一、安裝的軟件清單見下圖:
二、安裝步驟:
順序 | 安裝包名 | 安裝方法 | 下載地址 | 備注 |
1 | python | 具體見:https://blog.csdn.net/thefg/article/details/128601410 | 切記目前最高有效版本只能安裝3.7.9 | |
2 | setuptools | 不需要安裝,python3.7.9安裝后自帶安裝 | 無 | Python 的套件管理程式 |
3 | pip | 不需要安裝,python3.7.9安裝后自帶安裝 | 無 | Python 的套件管理程式 |
4 | 升級pip | Cmd命令執行:pip install --upgrade pip | 無 | 升級pip到最新版本 |
5 | robot framework | Cmd命令執行:pip install robotframework | robot framework本身 | |
6 | robotframework-ride | Cmd命令執行:pip install robotframework-ride | Ride | |
7 | wxPython | 不需要安裝,安裝robotframework-ride自動安裝 | 無 | 支撐Ride的運行庫 |
8 | wheel | Cmd 命令執行:pip install wheel | 無 | 運行安裝.whl包 |
9 | robotframework-selenium2library | Cmd命令執行:pip install robotframework-selenium2library | https://pypi.python.org/pypi/robotframework-selenium2library | selenium2測試庫,基于webdriver驅動 |
10 | robotframework-databaselibrary | Cmd命令執行:pip install robotframework-databaselibrary | https://github.com/franz-see/Robotframework-Database-Library | DB庫 |
11 | Pymysql | Cmd命令執行:pip install pymysql | https://pypi.python.org/pypi/pymssql | Mysql第三方庫 |
12 | pywin32 | 不需要安裝,安裝robotframework-ride自動安裝 | 無 | |
13 | AutoItV3 | exe文件,直接雙擊安裝 | http://www.autoitscript.com/site/autoit-news/autoit-v3-3-10-0-released/ | AutoItLibrary使用前提 |
14 | Requests | Cmd命令執行:pip install requests | RequestsLibrary庫使用前提 | |
15 | RequestsLibrary | Cmd命令執行:pip install -U robotframework-requests | http request庫 | |
16 | robotframework-autoitlibrary | Cmd命令執行:pip install robotframework-autoitlibrary | 無 |
|
17 | autoitlibrary3 | Cmd命令執行:pip install autoitlibrary3 | http://code.google.com/p/robotframework-autoitlibrary/ | AutoItLibrary測試庫 |
18 | robotframework-appiumlibrary | Cmd命令執行:pip install robotframework-appiumlibrary | 無 |
|
19 | robotframework-httplibrary | Cmd命令執行:pip install robotframework-httplibrary | 無 | 安裝完后會出現ride加載httplibrary庫標紅失敗,解決辦法手動安裝livetest,具體見下面說明 |
三、安裝后檢查:
1. Cmd命令下執行ride.py,能成功進入ride頁面說明robot framework安裝成功。
2. 配置ride為桌面快捷方式:在RIDE的操作界面,點擊Tools下的 Create RIDE Desktop Shortcut 在桌面上創建 RIDE 快捷方式即可,具體見下圖
3. 在ride操作頁面新建一個項目,把AutoItLibrary、Selenium2Library類加載,加載中如果不顯示紅色說明AutoItLibrary、Selenium2Library安裝成功。
4. Cmd命令下執行pip list,可以查看安裝的包列表有哪些
四、特別說明:
問題:python 解決 robotframework RIDE 中導入HttpLibrary庫為紅色
解決辦法:
1. 檢查相關庫是否以及安裝
jsonpath,jsonpointer 可以直接pip install 進行安裝,livetest 需要離線安裝,步驟如下:
2. 下載livetest包,地址:https://pypi.org/project/livetest/#files
3. 解壓并修改相關文件
修改 /livetest-0.5/livetest/init.py文件
修改import httplib 為 import http.client as httplib
修改import urlparse 為 import urllib.parse
修改from Cookie import BaseCookie, CookieError 為 import http.cookiejar
修改所有 except XXXError, e 為 except XXXError as e
修改/livetest-0.5/test/test_select.py文件
修改文件中所有except XXXError, e 為 except XXXError as e
修改 /livetest-0.5/setup.py文件
修改long_description=file(‘README.rst’).read() 為 long_description=open(‘README.rst’).read()
修改version=livetest.version 為 version=‘0.5’
修改author_email=livetest.author 為 author_email=‘storborg@mit.edu’
4. 手動安裝livetest
在cmd中切換路徑到\livetest-0.5,執行 python setup.py install,安裝成功。
5. 修改HttpLibrary相關配置
修改__init__.py (文件路徑:C:\Python37\Lib\site-packages\HttpLibrary)
修改from urlparse import urlparse 為from urllib.parse import urlparse
修改except ValueError, e為 except ValueError as e (共兩處)
6. 重啟ride,導入正常
五、驗證工具是否能正常使用
1.安裝Firefox瀏覽器
2.打開ride工具,加載相關類庫,輸入如下代碼運行,運行成功說明安裝成功可用
編寫背景:
還記得自己第一次安裝appium時,在baidu和google上找了很多資料,按照找來的文檔,沒有一個文檔是能完整的從頭到尾一次安裝成功的,遇到了不少坑,這些坑都是怎么解決的在這里總結,為方便以后自己回頭看看。
安裝的環境是:windows7系統
問題一:在線安裝appium,cmd執行命令:npm install –g appium出現如下錯誤信息:
30658 error Windows_NT 6.1.7601
30659 error argv "D:\\Program Files\\nodejs\\node.exe" "D:\\Program Files\\nodejs\\node_modules\\npm\\bin\\npm-cli.js" "install" "-g" "appium-chromedriver"
30660 error node v7.1.0
30661 error npm v3.10.9
30662 error code ELIFECYCLE
30663 error appium-chromedriver@2.9.2 install: `node install-npm.js`
30663 error Exit status 1
30664 error Failed at the appium-chromedriver@2.9.2 install script 'node install-npm.js'.
30664 error Make sure you have the latest version of node.js and npm installed.
364 error If you do, this is most likely a problem with the appium-chromedriver package,
30664 error not with npm itself.
30664 error Tell the author that this fails on your system:
30664 error node install-npm.js
30664 error You can get information on how to open an issue for this project with:
30664 error npm bugs appium-chromedriver
30664 error Or if that isn't available, you can get their info via:
30664 error npm owner ls appium-chromedriver
30664 error There is likely additional logging output above.
30665 verbose exit [ 1, true ]
解決辦法:
安裝能訪問www.google.com網站的VPN軟件,然后再重新安裝appium的低版本,執行命令:npm install –g appium@1.5
問題二:在線安裝appium,cmd執行命令:npm install –g appium出現錯誤提示:
MSBUILD : error MSB3428: 未能加載 Visual C++ 組件“VCBuild.exe”。要解決此問題, 1) 安裝 .NET Framework 2.0 SDK;2) 安裝 Microsoft Visual Studio 2005;或 3) 如果將該組件安裝到了 其他位置,請將其位置添加到系統 路徑中。
解決辦法:
下載.NET Framework 4.5和Microsoft Visual C++ 2015 Redistributable (x64)進行安裝
問題三:在線安裝appium,cmd執行命令:npm install –g appium,當appium版本高于1.6.1以上,會安裝sqlite3,這時會出現錯誤提示:
node-pre-gyp install --fallback-to-build
解決辦法一:執行npm install –g grunt-node-inspector 安裝后,繼續安裝。
解決辦法二:降級版本安裝,執行安裝命令:npm install –g appium@1.5;appium1.5版本的安裝是不包含sqlite3。
問題四:在線安裝appium,cmd執行命令:npm install –g appium@1.5 ,當安裝到appium-selendroid-driver組件后會報錯。
npm ERR! appium-selendroid-driver@1.3.4 install: node ./bin/install.js
npm ERR! Exit status 1
npm ERR!
npm ERR! Failed at the appium-selendroid-driver@1.3.4 install script 'node ./bin
/install.js'.
npm ERR! This is most likely a problem with the appium-selendroid-driver package
npm ERR! not with npm itself.
npm ERR! Tell the author that this fails on your system:
npm ERR! node ./bin/install.js
npm ERR! You can get their info via:
npm ERR! npm owner ls appium-selendroid-driver
npm ERR! There is likely additional logging output above.
解決辦法:通常是網絡問題,需要安裝能訪問www.google.com網站的VPN軟件,然后再重新安裝。
最后提醒:安裝appium一定要有耐心、一定要有耐心、一定要有耐心,因為訪問國外網站在線安裝是需要花時間的;要想安裝軟件又不影響工作,就要申請一臺機器單獨弄會省時省力。
上面的幾個坑,都是在折騰了N次appium的版本安裝、N次node的版本安裝后得出的經驗。
編寫背景:
部門內部開始使用robotframework自動化框架進行網站和手機自動化測試的試運行有3個月了,今天抽空把安裝文檔整理整理,共享給需要的同行和新手學習,讓大家在安裝的過程中少碰到我遇到的坑。
目標:在windows7安裝手機自動化工具appium和手機模擬器進行手機軟件自動化測試
安裝準備:需要準備如下軟件,可以自己在網上下載:
1.工具:LoCo加速器,注意:一定要能訪問國外網站,不然在線安裝會失敗
2.java的JDK,版本:jdk-6u45-windows-x64
3. Android SDK,版本:android-studio-bundle-143.2739321-windows
4.nodejs,版本:node-v6.8.1-x64
5.Microsoft Visual C++ 2015 Redistributable (x64)
6.Microsoft .NET Framework 4.5
7.手機模擬器:夜神模擬器
一、安裝軟件
1. LoCo加速器:LoCo加速器下載后,直接點擊exe可執行文件安裝即可,安裝后用郵箱注冊,注冊后15元購買1個月的服務;然后登錄,登錄后進行鏈接操作。鏈接成功后,訪問網站:www.google.com能正確顯示并搜索出內容,說明成功。
2. JDK安裝:下載java的jdk后,點擊exe可執行文件安裝即可,安裝后進行如下配置:
1)添加系統環境變量:JAVA_HOME,值:Jdk的安裝路徑,如:D:\Java\jdk1.6.0_45
2)添加系統環境變量:CLASSPATH,值:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
3)修改系統環境變量path值,加上:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
檢查JAVA環境是否配置好,進入CMD命令行,輸入java或javac,可以看到好多的命令提示,說明成功。
3. Android SDK安裝:直接點擊Android Studio的exe可執行文件安裝即可,安裝后進行如下配置:
1) 新增系統環境變量 ANDROID_HOME,值為 Android SDK 路徑,如:D:\Android\sdk
2) 修改系統環境變量Path值,加上:
;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools
4. Nodejs安裝:直接點擊exe可執行文件安裝即可,安裝后在cmd命令下輸入:node –v,能看到版本信息說明安裝OK,配置npm安裝文件路徑,cmd命令下輸入:
npm config set prefix="D:\\Program Files\\nodejs\\node_global"
npm config set cache="D:\\Program Files\\nodejs\\node_cache"
npm config set init-module="D:\\Program Files\\.npm-init.js"
npm config set tmp="D:\\Program Files\\Temp"
npm config set userconfig="D:\\Program Files\\.npmrc"
配置后,通過如下命令可以查看配置信息:
npm config list
npm config ls -l
5. Microsoft組件安裝:直接點擊Visual C++ 2015 Redistributable (x64)和.NET Framework 4.5的exe安裝文件,直接安裝即可。
6. Appium安裝:cmd命令下輸入如下命令:
1) npm install –g appium-doctor
確保國外網站google能正常訪問情況下,在線安裝appium-doctor軟件包,安裝成功后,在cmd命令下輸入:appium-doctor,查看appium安裝配置環境是否ok,都OK說明配置正常
2) appium-doctor安裝正常后,輸入命令:npm install -g appium@1.5
下載的文件內容比較多,一定要確保網絡正常,安裝時間會比較長,一定要耐心等待。
3) Appium安裝成功后,cmd命令窗口輸入:appium在界面會顯示版本信息
7. 夜神模擬器安裝:直接點擊exe文件進行安裝即可
二、開始使用
1. 打開模擬器
2. Cmd命令窗口輸入:adb connect 127.0.0.1:62001 鏈接成功后會顯示如下信息
3. Cmd命令窗口輸入:appium 啟動appium服務
4. 打開ride,加載AppiumLibrary類庫,編寫手機自動化腳本,編寫完畢后,點擊運行即可
到此,appium1.5的安裝和使用介紹完畢,預祝大家有個愉快的手機自動化之旅!
2年沒有更新博客了,自從有娃后時間變得越來越少,深刻體會了當媽的不容易;整理這個文章是為了讓部門的新人學習這個工具能輕松的入門第一關:安裝,同時希望能幫助到其它同行。
參考資料:
http://www.cnblogs.com/puresoul/p/3854963.html
http://www.itest.pro/howto-install-robot-framework-autoit-windows-x64/
一、安裝的軟件清單見下圖:
二、安裝步驟:
順序 | 安裝包名 | 安裝方法 | 下載地址 | 備注 |
1 | python | exe文件,直接雙擊安裝,安裝完設置Python環境變量,將“d:\Python27”和“d:\Python27\Scripts”添加到環境變量“PATH”項中(注意環境變量之間用“;”隔開) | 一切的基礎,安裝路徑不能有空格 | |
2 | setuptools | 下載ez_setup.py文件,把文件放到python安裝目錄的scripts目錄下,雙擊文件名 | Python 的套件管理程式 | |
3 | pip | 1.cmd進入ez_setup.py文件目錄,如: d:\Python27\Scripts 2.用setuptools安裝:easy_install pip | Python 的套件管理程式 | |
4 | 升級php | Cmd命令執行: pip install --upgrade pip | 無 | 升級pip到最新版本 |
5 | robot framework | Cmd命令執行:pip install robotframework | robot framework本身 | |
6 | wxPython | exe文件,直接雙擊安裝 | 支撐Ride的運行庫 | |
7 | robotframework-ride | Cmd命令執行:pip install robotframework-ride | Ride | |
8 | robotframework-selenium2library | Cmd命令執行:pip install robotframework-selenium2library | https://pypi.python.org/pypi/robotframework-selenium2library | selenium2測試庫,基于webdriver驅動 |
9 | robotframework-databaselibrary | Cmd命令執行:pip install robotframework-databaselibrary | https://github.com/franz-see/Robotframework-Database-Library | DB庫 |
10 | Pymysql | Cmd命令執行:pip install pymysql | https://pypi.python.org/pypi/pymssql | Mysql第三方庫 |
11 | pywin32 | exe文件,直接雙擊安裝,注意py對應的版本2.7 | https://sourceforge.net/projects/pywin32/files/pywin32/Build%20219/ | AutoItLibrary安裝前提 |
12 | AutoItV3 | exe文件,直接雙擊安裝 | http://www.autoitscript.com/site/autoit-news/autoit-v3-3-10-0-released/ | AutoItLibrary使用前提 |
13 | AutoItLibrary | Cmd命令執行:pip install AutoItLibrary | http://code.google.com/p/robotframework-autoitlibrary/ | AutoItLibrary測試庫 |
14 | Requests | Cmd命令執行:pip install requests | RequestsLibrary庫使用前提 | |
15 | RequestsLibrary | Cmd命令執行:pip install -U robotframework-requests | http request庫 |
三、安裝后檢查:
1. 配置ride為桌面快捷方式:
1) 新建快捷方式,在桌面右擊鼠標,彈出的菜單選擇 新建-快捷方式 ,然后在 請鍵入對象 的位置輸入這一行命令,C:\Python27\pythonw.exe -c "from robotide import main; main()",注意“C:\Python27\pythonw.exe”是python安裝的路徑,需要換成你的Python所在目錄的路徑;注意雙引號為英文。
2) 點擊下一步,輸入你要建立的快捷方式的名稱,點擊完成,看到圖標表示已經建好。
3) 顯示不爽,圖標要換成機器人圖標,需要快捷方式上點擊右鍵-屬性,點擊“更改圖標”,在瀏覽里找到目錄F:\Python27\Lib\site-packages\robotide\widgets,里面有個robot.ico的圖標(大家到自己的安裝目錄相同路徑去找一下)選它之后,點打開,確定之后再確定就可以了,雙擊圖標,進入ride操作頁面
2. Cmd命令下執行ride.py,能成功進入ride頁面說明robot framework安裝成功。
3. 在ride操作頁面新建一個項目,把AutoItLibrary、Selenium2Library類加載,加載中如果不顯示紅色說明AutoItLibrary、Selenium2Library安裝成功。
4. Cmd命令下執行pip list,可以查看安裝的包列表有哪些
四、特別說明:
1.安裝robotframework-selenium2library 后會自動安裝selenium的最新3.0版本,selenium 3.0以上版本安裝后編寫的自動化腳本打開firefox瀏覽器會失敗,robotframework會報如下錯誤
command: pybot.bat --argumentfile c:\users\administrator\appdata\local\temp\RIDEcatnr4.d\argfile.txt --listener F:\Python27\lib\site-packages\robotide\contrib\testrunner\TestRunnerAgent.py:14051:False F:\test\aaa
或者這個錯誤
WebDriverException: Message: Expected browser binary location, but unable to find binary in default location, no 'moz:firefoxOptions.binary' capability provided, and no binary flag set on the command line
解決辦法:
1) 用pip命令卸載selenium3.0版本,命令:pip uninstall selenium
2) 下載selenium 2.53.6 版本,包名:selenium-2.53.6.tar.gz,下載地址:https://pypi.python.org/pypi/selenium/2.53.6#downloads
3) 安裝selenium-2.53.6.tar.gz;解壓selenium-2.53.6.tar.gz,把解壓的文件拷貝到python安裝目錄文件夾下,如:D:\Python27\Lib\site-packages;cmd進入selenium解壓的文件夾路徑,執行如下命令:python setup.py install
4) Cmd執行pip list 查看安裝的selenium版本是否正確
2.python下如何安裝.whl包?
答:pip install wheel;先安裝wheel,然后pip install 包名字.whl 即可安裝.whl包。
五、安裝過程遇到的問題匯總:
問:Python有兩個版本:2.X和3.X,裝那個版本比較好?
答:由于windows7下,Python 對應的wxPython 版本只支持 2.x 不支持3.x,因此Python目前只能裝2.x版本
問:pip安裝完畢后,如何升級?
答:使用命令:pip install --upgrade pip
問:win76下安裝autoitlibrary失敗
答:必須先安裝pywin32,并且Python的安裝目錄不能有空格,如果有空格會導致注冊autoit的dll時出錯
到此,安裝完畢,可以用ride編寫自己的自動化測試腳本,開始自動化測試之旅!!!^_^。
ADB工具的安裝與卸載命令的實踐
作者:李玉玲
adb工具的作用就是連接安卓操作系統;下面分享ADB工具的安裝和卸載命令實踐。
一、安裝adb工具的前提
1、查看盒子是否開啟adb的功能
查看盒子是否開啟adb功能,需要使用“ping 盒子IP”,如果通過但是“adb connection 盒子IP”連接失敗,則沒有開啟adb功能。這時候,需要用USB連接盒子和PC,根據開發人員提供的升級安裝包進行升級,即可開啟adb功能。
本次使用的是Q12機頂盒。它默認開通了adb功能。只有XXXXX的版本才禁掉了adb功能。
方法:把附件中的adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll文件拷貝到D盤/adb。(也可拷貝到其他自定義路徑,如D:\Fbox。)
上圖是重新配置環境變量后,adb命令可以隨時使用。
Android中adb環境變量的設置
(2)輸入連接機頂盒命令
adb connect 192.168.88.104 //IP地址為機頂盒IP
顯示有……connected字樣,表示已連接成功。(4)查看應用是否安裝成功
進入“應用”中的“我的應用”,即可查看。
(1) 連接機頂盒
輸入adb connect 192.168.88.104 //IP地址為機頂盒IP
(2)adb uninstall 包名 //包名形如com.android.testme,不包含后綴.apk
如果不知道包名,可通過以下方法查詢:
1) adb connect 192.168.88.104
2) adb shell
3) #cd data/app
4) #ls //查看包名。其中需要注意的是:
查看有com.youku.tv-1.apk,卸載時如果輸入:adb uninstall com.youku.tv-1.apk,則會報Failure錯誤,正確應該輸入:adb uninstallcom.youku.tv,后面的“-1”也不用,它不是包名的一部分,而是多次重復安裝時Android系統自動加上的。和安裝時一樣,可以查看此軟件已經被成功卸載。
注:如果在安裝軟件的過程中,出現了“系統空間不足”的信息,可以先查看包名,進行卸載。完成之后,繼續安裝新軟件。 三、adb工具的相關問題
1、apk安裝后存放在Android系統的目錄位置為什么是/data?是否可以自定義?
/data 存放的是用戶的軟件信息(非自帶rom安裝的軟件);/data/app 存放用戶安裝的軟件;/data/data 存放所有軟件(包括/system/app 和 /data/app 和 /mnt/asec中裝的軟件)的一些lib和xml文件等數據信息;/data/dalvik-cache
存放程序的緩存文件,這里的文件都是可以刪除的。
因此,apk安裝后,默認的存放位置時/data。詳細文章參考如下鏈接:
http://www.androidlearner.net/android-directory-apk-install.html
利用adb工具進行軟件安裝不可以自定義安裝位置。安裝后的軟件只能默認存放在/data/app中,這里的軟件才具有可視性。
adb shell
cd /data/app
ll //查看安裝的每一個軟件的具體信息,具體包含權限、占用空間等
df //檢查文件系統的磁盤空間占用情況
(1)安裝命令
adb install <apk文件路徑> :將指定的apk文件安裝到設備上
adb install -s
apk文件名稱.apk :替代內存儲器,安裝軟件到SD卡上
adb install -r
apk文件名稱.apk :覆蓋原來安裝的軟件并保留之前的數據
(2)卸載命令
adb uninstall apk包名.apk :卸載apk軟件
adb uninstall -k <軟件名> :卸載軟件但是保留配置和緩存文件
問題一:若安裝時提示"error:more than one device and
emulator",可用“adb devices”查看,應該存在多個devices,此時可用“adb disconnect 172.30.57.86”命令斷開不使用的連接,再用命令“adb connect 172.30.
一、mysql數據庫日常操作。
1.啟動mysql:/etc/init.d/mysql start (前面為mysql的安裝路徑)
2.重啟mysql: /etc/init.d/mysql restart (前面為mysql的安裝路徑)
3.關閉mysql: /etc/init.d/mysql stop(前面為mysql的安裝路徑)
4.連接本機上的mysql:
mysql -u 用戶名 –p (按回車,再輸入密碼)
例:mysql –u root –p
5.退出mysql:exit
6.修改mysql密碼:
(1)mysqladmin -u用戶名 -p舊密碼 password 新密碼
例:mysqladmin –u root –p 123456 password 654321
(2)進入mysql命令行SET PASSWORD FOR 用戶名@主機=PASSWORD("root");
例:set password for root@localhost=password(“123456”);
(3)修改自己的密碼:
set password=password(“123456”);
7.增加新用戶:
grant 操作 on 數據庫.* to 用戶名@登錄主機 identified by "密碼"
例:grant select on yingyu to qiu@localhost indentify by “123456”;
8.建庫:
create database 庫名;
例:create database yingyu;
9.顯示數據庫列表: show databases;
10.打開數據庫:
use 數據庫;
例:use yingyu;
11.刪庫:
drop database 庫名;
例:drop database yingyu;
12.顯示庫中的數據表:
show tables;
13.顯示數據表的結構:
describe 表名;
例:describe student;
14.編碼的修改:
(1)改變整個mysql的編碼格式:
啟動mysql的時候,mysqld_safe命令行加入
--default-character-set=編碼格式
例:--default-character-set=UTF-8
(2)改變某個庫的編碼格式:
在mysql提示符后輸入命令:
alter database 數據庫 default character set 編碼格式;
例:alter database student default character set UTF-8;
二、sql常用命令
1.建表:
create table 表名(字段設定列表);
例:create table student
(stuid char(10) primary key,
name char(20),
grade int(3),
age int(3)
);
2.刪表:
drop table 表名;
例:drop table student;
3.將表中記錄清空:
delete from 表名;
例:delete from student;
4.顯示表中的記錄:
select * from 表名;
例:select * from student;
5.給表改名:
rename table 舊表名 to 新表名;
例:rename table student to people;
6.修改字段屬性:
(1)alter table 表名 change 字段名稱 字段名稱 字段類型 [是否允許非空];
例:alter table student change name newname char(20) null;
(2)alter table 表名稱 modify 字段名稱 字段類型 [是否允許非空];
例:alter table student modify name char(20) null;
7.修改表設置默認字段:
(1)alter table 表名 modify 字段名稱 字段類型 default 默認值;
例:alter table student modify name char(10) defalt 7;
(2)alter table 表名 alter 字段名稱 set default value;
例:alter table student alter name set default 7;
8.增加表的一個字段:
alter table 表名 add column 字段名稱 字段類型 (default 默認值);
例:alter table student add column sex char(10) (default 1);
9.刪除表的一個字段
alter table 表名 drop column 字段名稱;
例:alter table student drop column name;
10.刪除表主鍵
alter table 表名 drop primary key;
例:alter table student drop primary key;
11.添加新主鍵:
alter table 表名 add primary key(字段);
例:alter table student add primary key(stuid);
12.往表里插入一行數據:
insert into 表名 values(字段數據1,字段數據2,•••)
例:insert into student values(‘123’,‘qqqq’,‘80’);
13.往表里插入多行數據:
insert into 表名 values(字段數據1,字段數據2,•••) ,(字段數據1,字段數據2,•••),•••;
例:insert into student values(‘123’,‘qqqq’,‘80’),(‘124’,‘yyyy’,‘90’);
14. 修改表的數據:
update 表名 set 字段名=value where 范圍
例:update student set name=‘qqq1111’ where stuid=‘123’;
15.模糊查詢
select * from 表名 where 字段 like ’%value1%’;
例:select * from student where name like ‘q%’;
16.排序查詢:
select * from 表名 order by 字段名1,字段名2 [desc]
例:selec * from student order by grade;(升序)
select * from student order by grade desc;(降序)
17.左連接查詢:
select 表1.字段1,表1.字段2,表2.字段1,表2.字段2 from 表1 left (outer) join 表2 on 表1.字段=表2.字段;
例:select student.num,student.name,people.name,people.age from student left (outer) join people on student.name=people.name;
18.右連接查詢:
select 表1.字段1,表1.字段2,表2.字段1,表2.字段2 from 表1 right (outer) join 表2 on 表1.字段=表2.字段;
例:select student.num,student.name,people.name,people.age from student right (outer) join people on student.name=people.name;
19.全連接查詢(mySql不支持全連接,所以用左連接union右連接)
select 表1.*,表2.* from 表1 left (outer) join 表2 on 表1.字段=表2.字段 union select表1.*,表2.* from 表1 right (outer) join 表2 on 表1.字段=表2.字段;
例:select s.*,p.* from student s left join people p on s.name = p.name union select s.*,p.* from student s right join people p on s.name = p.name;
20.關于年份的查詢
例:查詢在1990-1993年之間出生的學生的全部信息
select * from student where year(Sbirthday)between 1990 and 1993;
查詢在1990年12月5日之前出生的學生的全部信息
select * from student where birthday < date(‘1990-12-05’);
三、備份與還原
1.備份數據庫:
mysqldump –u 用戶名 –p 數據庫名 > 保存路徑+文件名;
例:mysqldump –u root –p yingyu > /home/yingyu/yingyu.sql;
2.還原數據庫:
mysql –u 用戶名 –p 數據庫名 < 文件路徑+文件名;
例:mysql –u root –p yingyu < /home/yingyu/yingyu.sql;
3.直接將MySQL數據庫壓縮備份
mysqldump –u 用戶名 –p 數據庫名 | gzip > 保存路徑+文件名
例:mysqldump –u root –p yingyu | gzip > /home/yingyu/yingyu.sql.gz;
4.還原壓縮的Mysql數據庫
gunzip < 文件路徑+文件名 | mysql –u 用戶名 –p 數據庫名
例:gunzip < /home/yingyu/yingyu.sql.gz | mysql –u root –p yingyu;
5.備份數據庫中的某些表:
mysqldump –u 用戶名 –p 數據庫名 表名1 表名2 > 保存路徑+文件名
例:mysqldump –u root –p yingyu student > /home/yingyu/yingyu.sql;
6.備份數據庫中的某些數據庫:
mysqldump –u 用戶名 –p –B 庫1 庫2 > 保存路徑+文件名
例:mysqldump –u root –p –B yingyu1 yingyu2>/home/yingyu/yingyu.sql;
7.還原數據庫中的某些數據庫:
mysqldump –u 用戶名 –p –D 庫1 庫2 < 文件路徑 + 文件名;
例:mysqldump–u root –p–D qiuyingyu yingyu</home/yingyu/yingyu.sql;
8.還原數據庫中的某些表:
mysql –u 用戶名 –p 數據庫名 < 保存路徑+表文件名
例:mysql –u root –p yingyu < /home/yingyu/yingyu.sql;
二、 導入Bugzilla 4.0.1數據庫
創建新的數據庫用于導入備份的數據庫,命令如下:
# mysql –u root –p
輸入密碼后進入mysql操作界面
輸入:create database bugzilla_new
使用如下命令導入備份的Bugzilla 4.0.1的mysql數據庫,從新命名數據庫名
# gunzip < bugzilla_20121206.sql.gz | mysql –u root –p bugzilla_new
三、 安裝Bugzilla 4.2.3程序包
安裝步驟具體見:http://www.tkk7.com/lijun_li/archive/2012/11/29/392220.html
四、 更新導入的Bugzilla 4.2.3數據庫表結構
創建bugzilla_new數據庫用戶
# mysql –u root –p
# use bugzilla_new
grant select,insert,update,delete,index,alter,create,lock tables,drop,references on bugzilla_new.* to
bugs@localhost identified by '123456';
flush privileges;
修改bugzilla配置
#cd /data/apache2/htdocs/bugzilla
#vi localconfig
根據數據庫的實際情況修改如下參數:
$db_name = 'bugzilla_new';
$db_user = 'bugs';
$db_pass = '123456';
$db_port = 3306;
$db_sock = '/var/lib/mysql/mysqld.sock';
$index_html = 1;
更新bugzilla_new數據庫表
進入新安裝的bugzilla 4.2.3文件目錄
#cd /data/apache2/htdocs/bugzilla
#./checksetup.pl
自動更新bugzilla_new數據庫表內容
在瀏覽器訪問新版本bugzilla,使用之前的老用戶賬戶登錄,能成功登錄進去并看到之前的bug組件和內容,恭喜你成功了。^_^。
到這里,更新完畢,轉帖的同行記得要寫上此貼出處。
二、 導入TestLink 1.8.4數據庫
創建新的數據庫用于導入備份的數據庫,命令如下:
# mysql –u root –p
輸入密碼后進入mysql操作界面
輸入:create database testlink_new
使用如下命令導入備份的TestLink 1.8.4的mysql數據庫,從新命名數據庫名
# Gunzip < testlink_20121205.sql.gz | mysql –u root –p testlink_new
三、 安裝TestLink 1.9.4程序包
安裝步驟具體見:http://www.tkk7.com/lijun_li/archive/2012/11/29/392224.html
四、 更新導入的Testlink1.8.4數據庫表結構
記錄testlink的數據庫更新sql文件存放地方進行數據庫表升級
# cd /data/apache2/htdocs/Testlink/install/sql/alter_tables/
# ll
會顯示Testlink各版本的更新數據庫sql文件,從1.9依次升級到1.9.4
進入mysql執行如下命令
# mysql –u root –p
# use testlink_new
# source /data/apache2/htdocs/Testlink/install/sql/alter_tables/1.9/mysql/DB.1.3/step1/db_schema_update.sql
# source /data/apache2/htdocs/Testlink/install/sql/alter_tables/1.9/mysql/DB.1.3/stepZ/z_final_step.sql
# source /data/apache2/htdocs/Testlink/install/sql/alter_tables/1.9.1/mysql/DB.1.4/step1/db_schema_update.sql
# source /data/apache2/htdocs/Testlink/install/sql/alter_tables/1.9.1/mysql/DB.1.4/stepZ/z_final_step.sql
# source /data/apache2/htdocs/Testlink/install/sql/alter_tables/1.9.4/mysql/DB.1.5/step1/db_schema_update.sql
# source /data/apache2/htdocs/Testlink/install/sql/alter_tables/1.9.4/mysql/DB.1.5/stepZ/z_final_step.sql
# commit;
五、 更新TestLink1.9.4配置文件
進入新安裝的TestLink1.9.4數據庫配置文件,更新鏈接的數據庫鏈接到testlink_new.
# cd /data/apache2/htdocs/Testlink
# vi config_db.inc.php
修改’DB_NAME’ 的值為:testlink_new
保存后在瀏覽器訪問testlink,使用之前的老用戶賬戶登錄,能成功登錄進去并看到之前的測試用例和測試計劃,恭喜你成功了。^_^。
六、 更新缺失的數據庫表
對比備份的TestLink 1.8.4和新安裝的TestLink 1.9.4數據庫表,發現還需要做如下操作。
需要在testlink_new增加如下表:
last_executions
last_executions_by_platform
tcversions_last_active_bare_bones
需要在testlink_new刪除如下表:
text_templates
具體操作如下:
# mysql –u root –p
# use testlink_new
# drop table text_templates;
# create table Last_executions
(tcversion_id int(10) unsigned NOT NULL Default 0,
testplan_id int(10) unsigned NOT NULL Default 0,
platform_id int(10) unsigned NOT NULL Default 0,
Build_id int(10) NOT NULL Default 0,
id int(10) unsigned default NULL );
# create table Last_executions_by_platform
(tcversion_id int(10) unsigned NOT NULL Default 0,
testplan_id int(10) unsigned NOT NULL Default 0,
platform_id int(10) unsigned NOT NULL Default 0,
id int(10) unsigned default NULL );
# create table Tcversions_last_active_bare_bones
(tcase_id int(10) unsigned default NULL,tcversion_id int(10) unsigned default NULL);
到這里,更新完畢,轉帖的同行記得要寫上此貼出處。^_^。
參考資料:http://www.btschina.com/home/index.php/the-bugzilla-install-and-configure.html
http://www.ishow.me/2012/09/11/929.html
Buzilla 4.2.3郵箱配置
Bugzilla自帶有SMTP服務,只需開啟和設置就可以使用,不需要sendmail支持。配置方法如下:
1.修改bugzilla的params文件內容
進入Bugzilla安裝目錄
# cd /data/apache2/htdocs/bugzilla
修改params文件
# vi params
配置其中的
maintainer : test@test.com
mail_delivery_method : SMTP
mailfrom : test@test.com
smtpserver : smtp.test.com
smtp_username: test@test.com
smtp_password : **********
注意:maintainer、mailfrom必須相同!smtp_username郵箱必須是存在的真實的郵箱,smtp_password是郵箱的密碼(要與你所登陸郵箱時的密碼相同)!
2.登錄bugzilla進行params參數核對
訪問:http://localhost/bugzilla/
用管理員賬戶和密碼登錄
登錄后選擇“Administartor”-》“Parameters”-》“Email”
查看并核對各參數是否正確。
3.錄入一個新bug,到郵箱查看新接收到的bug郵件,如能收到就恭喜你,OK啦。^_^。
TestLink 1.9.4 郵箱配置
進入TestLink安裝目錄文件,修改config.inc.php配置文件內容
# cd /data/apache2/htdocs/TestLink
# vi config.inc.php
$g_smtp_host = ‘[smtp.testlink.com]‘;修改為
$g_smtp_host = ‘公司smtp郵箱域名‘;
# Configure using custom_config.inc.php 以下這三處不能有中括號,一般保持一致即可。
$g_tl_admin_email = ‘testlink@testlink.com’; # for problem/error notification
$g_from_email = ‘testlink@testlink.com’; # email sender
$g_return_path_email = ‘testlink@testlink.com’;
/** Configure only if SMTP server requires authentication */
$g_smtp_username = ‘testlink’; # user #賬號和密碼,有的需要加上域名有的不需要,最好加上域名。
$g_smtp_password = ’123123123′; # password
保存后,再次登錄testlink:http://localhost/TestLink/,重置某一用戶的密碼,到該用戶郵箱中查收郵件,能收到郵件就恭喜你,OK啦。^_^。
安裝環境:redhat enterprise linux 5 + mysql-5.5.27+httpd-2.2.23+php-5.3.19+TestLink-1.9.4
安裝方法:編譯安裝
安裝步驟:
一、安裝程序包下載
下載php的安裝包:php-5.3.19.tar.gz
下載TestLink的安裝包:testlink-1.9.4.tar.gz
Mysql的安裝具體見blog:《Bugzilla 4.2.3 for Linux redhat 5 安裝介紹》
二、安裝PHP
1.安裝php包
# tar zxvf php-5.3.19.tar.gz
# cd php-5.3.19
# ./configure –with-mysql=/data/msyql –with-apxs2=/data/apache2/bin/apxs
# make
# make test
# make install
# cp php.ini-development /usr/local/lib/php.ini
2.httpd配置
# cd /data/apache2/conf/
# vi httpd.conf
在LoadModule處增加一行:
LoadModule php5_module modules/libphp5.so
在AddType處添加內容為:
AddType application/x-httpd-php .php .phtml
保存后重啟httpd服務
# cd /data/apache2/bin/
# ./apachectl restart
備注:查找文件命令是 # find / -name 查找的文件名字
3.php配置
# vi php.ini
修改max_execution_time=120
取消掉;extension=php_gd2.dll 前面的;號,讓其生效
修改;date.timezone的值為:date.timezone=”Asia/Shanghai”,并去掉前面的;號,讓其生效
修改mysql.default_port=3306
修改mysql.default_socket=/var/lib/mysql/mysqld.sock (注意:是mysql安裝時設置的路徑)
保存后重啟httpd服務
# cd /data/apache2/bin/
# ./apachectl restart
三、安裝配置TestLink
1.解壓文件包
# tar zxvf testlink-1.9.4.tar.gz
# mv testlink-ga-testlink-code /data/apache2/htdocs/TestLink
# cd /data/apache2/htdocs/
# chmod 777 –R testlink
2.修改testlink配置文件
# cd /data/apache2/htdocs/TestLink
# vi config.inc.php
修改如下內容:
$tlCfg->default_language = 'en_GB';改為$tlCfg->default_language = 'zh_CN';
$tlCfg->log_path=’/data/apache2/htdocs/TestLink/logs/’
$g_repositoryPath=’ /data/apache2/htdocs/TestLink/upload_area/’
修改完畢保存
3.訪問TestLink
在URL中輸入:http://localhost/TestLink/install/index.php
在界面中輸入數據庫的用戶名:root;密碼:123456
成功后出現TestLink的登錄頁面,用用戶名:admin;密碼:admin 登錄即可。
到此,TestLink安裝完畢,后續還需要進行郵箱配置。
參考資料:http://blog.chinaunix.net/uid-10697776-id-3080243.html
http://hi.baidu.com/widebright/item/2f28cd0da72b9210addc70a7
問:dell的optiplex 360或者optiplex 380機器,broadcom網卡如何在redhat enterprise linux 5系統下識別和安裝驅動?
答案如下:
首先看網卡是否已經正確連接到計算機,使用的命令是lspci。redhat上使用lspci的輸出:
[root@localhost ~]# lspci
00:00.0 Host bridge: Intel Corporation Eaglelake DRAM Controller (rev 03)
00:01.0 PCI bridge: Intel Corporation Eaglelake PCI Express Root Port (rev 03)
00:02.0 VGA compatible controller: Intel Corporation Eaglelake Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation Eaglelake Integrated Graphics Controller (rev 03)
00:1b.0 Audio device: Intel Corporation 82801G (ICH7 Family) High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation 82801G (ICH7 Family) PCI Express Port 1 (rev 01)
00:1d.0 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #1 (rev 01)
00:1d.1 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #2 (rev 01)
00:1d.2 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #3 (rev 01)
00:1d.3 USB Controller: Intel Corporation 82801G (ICH7 Family) USB UHCI Controller #4 (rev 01)
00:1d.7 USB Controller: Intel Corporation 82801G (ICH7 Family) USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)
00:1f.2 IDE interface: Intel Corporation 82801GB/GR/GH (ICH7 Family) SATA IDE Controller (rev 01)
00:1f.3 SMBus: Intel Corporation 82801G (ICH7 Family) SMBus Controller (rev 01)
會發現系統識別不到這個網卡的設備,需要更新網卡設備讀取文件,具體是:
用update-pciids 命令先更新一下 系統的pci.ids文件,這個最新的應該有人維護的在http://pciids.sourceforge.net/ 可以找得到。
或者像我這樣直接手工更新一下/usr/share/hwdata/pci.ids 文件的內容。
把pci.ids文件放到tmp目錄
Redhat上使用命令:cp /tmp/pci.ids /usr/share/hwdata/pci.ids;回車后回復yes
再次執行lspci,結果如下,成功識別。
[root@localhost ~]# cp /tmp/llj/pci.ids /usr/share/hwdata/pci.ids
cp:是否覆蓋“/usr/share/hwdata/pci.ids”? yes
[root@localhost ~]# lspci
00:00.0 Host bridge: Intel Corporation 4 Series Chipset DRAM Controller (rev 03)
00:01.0 PCI bridge: Intel Corporation 4 Series Chipset PCI Express Root Port (rev 03)
00:02.0 VGA compatible controller: Intel Corporation 4 Series Chipset Integrated Graphics Controller (rev 03)
00:02.1 Display controller: Intel Corporation 4 Series Chipset Integrated Graphics Controller (rev 03)
00:1b.0 Audio device: Intel Corporation NM10/ICH7 Family High Definition Audio Controller (rev 01)
00:1c.0 PCI bridge: Intel Corporation NM10/ICH7 Family PCI Express Port 1 (rev 01)
00:1d.0 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #1 (rev 01)
00:1d.1 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #2 (rev 01)
00:1d.2 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #3 (rev 01)
00:1d.3 USB controller: Intel Corporation NM10/ICH7 Family USB UHCI Controller #4 (rev 01)
00:1d.7 USB controller: Intel Corporation NM10/ICH7 Family USB2 EHCI Controller (rev 01)
00:1e.0 PCI bridge: Intel Corporation 82801 PCI Bridge (rev e1)
00:1f.0 ISA bridge: Intel Corporation 82801GB/GR (ICH7 Family) LPC Interface Bridge (rev 01)
00:1f.1 IDE interface: Intel Corporation 82801G (ICH7 Family) IDE Controller (rev 01)
00:1f.2 IDE interface: Intel Corporation NM10/ICH7 Family SATA Controller [IDE mode] (rev 01)
00:1f.3 SMBus: Intel Corporation NM10/ICH7 Family SMBus Controller (rev 01)
02:00.0 Ethernet controller: Broadcom Corporation NetLink BCM57780 Gigabit Ethernet PCIe (rev 01)
網卡成功識別后,使用ifconfig命令看網卡信息,發現沒有eth0,需要進行如下操作:
下載網卡驅動安裝包:
kernel-2.6.18-92.el5.i686.rpm
kernel-devel-2.6.18-92.el5.i686.rpm
kernel-xen-2.6.18-92.el5.i686.rpm
kernel-xen-devel-2.6.18-92.el5.i686.rpm
tg3-3.122n-1.src.rpm
使用rpm –ivh 命令安裝上面的kernel包
Tg3包安裝步驟如下:
[root@localhost llj]# rpm -ivh tg3-3.122n-1.src.rpm
1:tg3 ########################################### [100%]
[root@localhost llj]# cd /usr/src/redhat/
[root@localhost redhat]# rpmbuild -bb SPECS/tg3.spec
[root@localhost redhat]# rpm -ivh RPMS/i386/tg3-3.122n-1.i386.rpm
Preparing... ########################################### [100%]
1:tg3 ########################################### [100%]
[root@localhost redhat]# modprobe tg3
打開網絡設備:[root@linpcl root]#ifconfig eth0 up
使用命令ifconfig查看可看見eth0
到此Dell optiplex 380 broadcom網卡在redhat 5下網卡識別和安裝驅動完畢。^_^。
編寫背景:
這幾天開始梳理和總結測試環境維護管理方面的工作,bugzilla和Testlink也該升級了,找了臺機器重新安裝這兩個軟件,先試試;順帶整理相關安裝文檔給測試人員進行安裝學習并錄像,便于以后要用或培訓時可以拿出來分享。放在這里希望對測試新手有幫助。
參考資料:http://3708841.blog.51cto.com/3698841/1020932
安裝環境:redhat enterprise linux 5 + mysql-5.5.27+httpd-2.2.23+bugzilla-4.2.3
安裝方法:編譯安裝
安裝步驟:
一、安裝程序包下載
下載mysql-5.5.27所需的如下安裝文件:
libevent-2.0.20-stable.tar.gz
cmake-2.8.9tar.gz
下載mysql-5.5.27的安裝包:mysql-5.5.27.tar.gz
下載httpd-2.2.23的安裝包:httpd-2.2.23.tar.bz2
下載bugzilla-4.2.3的安裝包:bugzilla-4.2.3.tar.gz
下載bugzilla安裝的相關組件包:DBD-mysql-4.0.22.tar.gz
二、卸載linux安裝后自動安裝上的mysql和httpd所有相關包,具體如下:
1. 用下面命令查看系統自動安裝的mysql和http相關的包有哪些
rpm –qa|grep mysql
rpm –qa|grep http
2. 用下面命令刪除系統自動安裝的mysql和http的包
3. rpm -e –nodeps mysql已經安裝的文件包名
三、安裝mysql并創建bugzilla數據庫
1. 安裝libevent
# tar zxvf libevent-2.0.20-stable.tar.gz
# cd libevent-2.0.20-stable
# ./configure
# make
# make install
# ln -s /usr/local/lib/libevent-2.0.so.5 /usr/lib/libevent-2.0.so.5
2. 安裝cmake
安裝前確認系統是否安裝了ncurses包,具體如下:
#rpm -qa|grep ncurses
ncurses-5.5-24.20060715
ncurses-devel-5.5-24.20060715
# tar zxvf cmake-2.8.9tar.gz
# cd cmake-2.8.9
# ./bootstrap
# make
# make install
3. 安裝mysql
1)建立mysql用戶
# groupadd mysql
# useradd -g mysql -s /sbin/nologin mysql
# mkdir -p /data/db/mysql_data
# mkdir -p /data/mysql
# mkdir -p /etc/mysql
# mkdir /data/db/innodb_data/ -p
# mkdir /data/db/mysql_logs/binary_log -p
# mkdir /data/db/mysql_logs/innodb_log -p
# mkdir /data/db/mysql_logs/query_log -p
# mkdir /data/db/mysql_logs/slow_query_log -p
# mkdir /data/db/mysql_logs/error_log -p
# chown mysql. /data/db/* -R
2)安裝配置
# tar zxvf mysql-5.5.27.tar.gz
#cd mysql-5.5.27
# cmake . -DCMAKE_INSTALL_PREFIX=/data/mysql/ -DMYSQL_DATADIR=/data/db/mysql_data -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DEXTRA_CHARSETS=all -DWITH_SSL=bundled -DWITH_ZLIB=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_MYISAM_STORAGE_ENGINE=1 -DSYSCONFDIR=/etc/mysql -DMYSQL_TCP_PORT=3306 -DWITH_DEBUG=0 -DMYSQL_UNIX_ADDR=/var/lib/mysql/mysqld.sock -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1 -DWITH_PARTITION_STORAGE_ENGINE=1
# make && make install
3)初始化數據庫
# /data/mysql/scripts/mysql_install_db --basedir=/data/mysql/ --user=mysql --datadir=/data/db/mysql_data/
4)創建配置文件
#vi /etc/mysql/my.cnf
[client]
#password = [your_password]
port = 3306
socket = /tmp/mysqld.sock
default-character-set=utf8
[mysqld]
wait_timeout=7200
port = 3306
socket = /tmp/mysqld.sock
character_set_server=utf8
basedir=/data/mysql
datadir=/data/db/mysql_data
back_log = 500
log-error=/data/db/mysql_logs/error_log/server.err
max_connections = 1024
max_connect_errors = 10
table_open_cache = 2048
max_allowed_packet = 16M
binlog_cache_size = 1M
max_heap_table_size = 64M
read_buffer_size = 2M
read_rnd_buffer_size = 16M
join_buffer_size = 8M
thread_cache_size = 128
thread_concurrency = 8
query_cache_size = 64M
query_cache_limit = 2M
ft_min_word_len = 4
#default-storage-engine = MYISAM
default-storage-engine = innodb
thread_stack = 192K
transaction_isolation = REPEATABLE-READ
tmp_table_size = 64M
log-bin=/data/db/mysql_logs/binary_log/db-bin
expire_logs_days=10
binlog_format=mixed
#general_log=1
#general_log_file=/data/db/mysql_logs/query_log/query.log
slow_query_log=1
long_query_time = 2
slow_query_log_file=/data/db/mysql_logs/slow_query_log/slow_query.log
server-id = 1
key_buffer_size = 200M
bulk_insert_buffer_size = 64M
myisam_sort_buffer_size = 128M
myisam_max_sort_file_size = 10G
myisam_repair_threads = 1
myisam_recover
innodb_additional_mem_pool_size = 16M
innodb_buffer_pool_size = 300M
innodb_data_file_path = ibdata1:100M;ibdata2:100M;ibdata3:100M;ibdata4:100M:autoextend
innodb_data_home_dir=/data/db/innodb_data/
innodb_write_io_threads = 8
innodb_read_io_threads = 8
innodb_thread_concurrency = 16
innodb_flush_log_at_trx_commit = 1
innodb_log_buffer_size = 8M
innodb_log_file_size = 256M
innodb_log_files_in_group = 3
innodb_log_group_home_dir=/data/db/mysql_logs/innodb_log
innodb_max_dirty_pages_pct = 90
innodb_lock_wait_timeout = 120
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 512M
sort_buffer_size = 512M
read_buffer = 8M
write_buffer = 8M
[mysqlhotcopy]
interactive-timeout
[mysqld_safe]
open-files-limit = 8192
5)后臺啟動
# cp support-files/mysql.server /etc/init.d/mysqld
# chmod 755 /etc/init.d/mysqld
# vim /etc/init.d/mysqld
basedir=/data/mysql
datadir=/data/db/mysql_data
# /etc/init.d/mysqld start
Starting MySQL……………..[ OK ]
# netstat -an |grep 3306
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
# vim /etc/profile
用#注釋掉之前的export內容,追加如下內容
export PATH=$PATH:/data/mysql/bin
# source /etc/profile
# mysql
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.5.27-log Source distribution
Copyright (c) 2000, 2012, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective owners.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
6)添加Mysql自啟動服務
# ln -sf /data/mysql/bin/mysql /sbin/mysql
# ln -sf /data/mysql/bin/mysqladmin /sbin/mysqladmin
# chkconfig mysqld on
# chkconfig --level 24 mysqld off
# chkconfig --list mysqld
mysqld 0:off 1:off 2:off 3:on 4:off 5:on 6:off
# vi /etc/ld.so.conf
用#注釋掉文件內容,增加如下內容
/data/mysql/lib
# ldconfig -v |grep mysql
/data/mysql/lib:
libmysqlclient.so.18 -> libmysqlclient_r.so.18.0.0
7)為mysql數據庫root用戶設置密碼
# mysqladmin -uroot password "qwe123"
# mysql –uroot –p
use mysql
Grant all privileges on *.* to 'root'@'%' identified by 'qwe123' with grant option;
flush privileges;
select host, user, password from user;
增加遠程登錄權限
刪除匿名用戶:
delete from user where user=' ';
設置所有root密碼
update user set password=password( "qwe123") where user= "root";
4. 創建bugzilla數據庫和用戶
1)創建數據庫bugs
create database bugs;
show databases;
use bugs;
2)創建用戶bugs
grant select,insert,update,delete,index,alter,create,lock tables,drop,references on bugs.* to bugs@localhost identified by '123456';
flush privileges;
四、安裝httpd
1. 安裝apache
# tar jxvf httpd-2.2.23.tar.bz2
# cd httpd-2.2.23
# ./configure --prefix=/data/apache2 --enable-so --enable-rewrite --enable-vhost-alias=shared --enable-cache=shared --enable-file-cache=shared --enable-disk-cache=shared --enable-mem-cache=shared --enable-proxy=shared --enable-proxy-http=shared --enable-proxy-ajp=shared --enable-proxy-balancer=shared --enable-proxy-connect=shared --enable-dav --enable-dav-fs --disable-proxy-ftp --disable-userdir --disable-asis --enable-ssl --with-mpm=worker
# make
# make install
2. 添加apache自啟動腳本
#cp /data/apache2/bin/apachectl /etc/init.d/httpd
#vi /etc/init.d/httpd
在第三行添加以下兩行內容
#chkconfig:345 85 15
#description: Start and stops the Apache HTTP Server.
[root@localhost opt]#chkconfig httpd on
3. 啟動HTTP服務
[root@localhost opt]#service httpd start
安裝完畢,啟動httpd,輸入“http://ip”能看到“it works”證明成功。
五、安裝bugzilla
1. 安裝bugzilla
# tar zxvf bugzilla-4.2.3.tar.gz
# mv bugzilla-4.2.3 /data/apache2/htdocs/bugzilla
#chmod 777 /data/apache2/htdocs/bugzilla –R
2. 安裝bugzilla所需模塊
由于默認的perl安裝包缺少一些bugzilla需要的模塊,所以需要補充一些模塊,最好是在線進行,不要一個一個的自己安裝。以root身份運行在聯網情況下用以下命令安裝所需的最少perl模塊:
#perl -MCPAN -e 'install "Bundle::Bugzilla"'
Are you ready for manual configuration? [yes] no
of modules we are processing right now? [yes] 敲回車,以后都敲回車!
#/usr/bin/perl install-module.pl -all
# perl -MCPAN -e 'install "mod_perl2"'
安裝需要把Apache的apxs路徑:/data/apache2/bin/apxs
#cd /data/apache2/htdocs/bugzilla
#./checksetup.pl
再次執行安裝相關包命令
# /usr/bin/perl install-module.pl –all
安裝DBD-mysql-4.0.22.tar.gz
# tar zxvf DBD-mysql-4.0.22.tar.gz
# cd DBD-mysql-4.0.22
# perl Makefile.PL --mysql_config=/usr/local/mysql/bin/mysql_config
# make
# make install
# perl -MCPAN -e 'install "mod_perl2"'
安裝需要把Apache的apxs路徑:/data/apache2/bin/apxs
3. 配置bugzilla
#cd /data/apache2/htdocs/bugzilla
#vi localconfig
根據數據庫的實際情況修改如下參數:
$db_name = 'bugs';
$db_user = 'bugs';
$db_pass = '123456';
$db_port = 3306;
$db_sock = '/var/lib/mysql/mysqld.sock';
$index_html = 1;
4. 配置啟動apache
在 httpd.conf 中添加(或者去除注釋)以下這一行:
AddHandler cgi-scrīpt .cgi
到 httpd.conf 中 DirectoryIndex 那一行,修改為:
DirectoryIndex index.html index.html.var index.cgi
指定Bugzilla的訪問目錄,在最后添加:
<Directory /data/apache2/htdocs/bugzilla>
AddHandler cgi-script .cgi
Options +Indexes +ExecCGI
DirectoryIndex index.cgi
AllowOverride Limit FileInfo Indexes
</Directory>
5. 安裝bugzilla數據庫配置和文件權限設置
#cd /data/apache2/htdocs/bugzilla
#./checksetup.pl
開始自動安裝bugzilla數據庫表并設置管理員賬號
# cd /data/apache2/htdocs/
# chmod 777-R bugzilla
編輯hosts文件:
# vi /etc/hosts
增加如下一行
127.0.0.1 localhost.localdomain localhost MYHOST
在瀏覽器輸入:http://XXX.XXX.XXX.XXX/bugzilla,用剛才設置的管理員賬號登陸即可。
本文資料來源:http://zh.wikipedia.org/wiki/Ruby_on_Rails
簡介
Ruby on Rails 是一個可以使你開發,部署,維護 web 應用程序變得簡單的框架。
Ruby on Rails,簡稱Rails,是一個使用Ruby語言寫的開源Web應用框架,它是嚴格按照MVC結構開發的。它努力使自身保持簡單,來使實際的應用開發時的代碼更少,使用最少的配置。
Ruby on Rails是一種結合Ruby語言與Rails平臺的一種網頁編程語言,Ruby語言以自然、簡潔、快速著稱,全面支持面向對象程序設計,而Rails則是Ruby廣泛應用方式之一,在Rails平臺上設計出一套獨特的MVC開發架構,采取模型(Model)、外觀(View)、控制器(Controller)分離的開發方式,不但減少了開發中的問題,更簡化了許多繁復的動作。
Rails的設計原則包括“不做重復的事”(Don't Repeat Yourself)和“慣例優于設置”(Convention Over Configuration)。來歷
Ruby的作者于1993年2月24日開始編寫Ruby,直至1995年12月才正式公開發布于fj(新聞組)。之所以稱為Ruby,是因為Perl的發音與6月的誕生石pearl(珍珠)相同,因此Ruby以7月的誕生石ruby(紅寶石)命名。
2004年7月,Rails的創始人大衛•海納梅爾•韓森從37signals公司的項目管理工具Basecamp里面分離出Ruby on Rails,并且以開源方式發布。
Rails在發布以后的短短的時間內就迅速獲得很多開發人員歡迎,大衛認為這歸功于Rails設計為opinionated software。Rails當中有很多規矩從一開始就按照David的意見制定好了,所以在Rails上開發應用程序時,開發人員可以專注于應用程序自 身的設計,省卻那些花在了解及配置基礎框架上面的時間。這也正是Rails很重要的精神“約定優于配置”,開發人員遵照Rails本身的慣例便可以省卻配置組態檔的時間;此外,Rails雖然強調慣例的重要及便利性,但針對不同的需求,Rails也提供修改的空間讓開發人員可以進行自定義的組態。運作模式
Rails框架是以固定的命名習慣來自動判斷整個架構,默認下會將網址分析成http://domain-name/ControllerName /ActionName/Attribute/ 然后運行目標Controller中的Action,并取出指定的View(視圖)回傳給瀏覽器顯示。面對數據庫則以Model(模塊)的形式,借由Active Record作為與數據庫之間的傳輸接口。Rails的MVC架構
Ruby on Rails的模型-視圖-控制器架構由以下各部分組成:
模型
模型包含著應用的狀態,狀態可能是臨時的也可能是長久性保存在數據庫中的。需要注意的是模型不僅包含數據,而且包含數據代表的邏輯。在Rails中,模型通常是由一些代表關系數據庫中RDBMS表的類組成的。
在RoR中,模型類是通過Active Record模式進行處理的。一般來說,程序員要做的是繼承ActiveRecord類,同時程序會自動計算出要使用哪個RDBMS表,這個表有哪些列。表與表之間的關系通過簡單的命令來指明。
控制器
控制器將用戶界面和數據模型關聯起來,并充當協調運作的角色。它接收各種用戶操作,更新數據模型,并用合適的view展示結果給用戶。像他的名字一樣,可以說應用的主要控制中心就是各個控制器。
視圖
View負責根據Model中的數據顯示用戶界面。作為web應用,Rails里的View通常是生成整個或者部分網頁。當然可以是XML或者甚至是JavaScript代碼。表現為使用內嵌Ruby的HTML/XML/JavaScript模板。Rails的組成模塊
Rails使用如下Gems
actionmailer (1.3.2)
Service layer for easy email delivery and testing.
actionpack (1.13.2)
Web-flow and rendering framework putting the VC in MVC.
actionwebservice (1.2.2)
Web service support for Action Pack.
activerecord (1.15.2)
Implements the ActiveRecord pattern for ORM.
activesupport (1.4.1)
Support and utility classes used by the Rails framework.
rails (1.2.2)
Web-application framework with template engine, control-flow layer, and ORM.
模型:Active Record
ActiveRecord實現了Rails的對象關系映射。
控制器和視圖:ActionPack
ActionController是Rails中的控制器,提供各種方法供用戶操作使用。
ActionView是Rails中的視圖,負責展現用戶界面。
常用實用工具:ActiveSupport
ActiveSupport包提供一些工具和支持代碼。
處理郵件:ActionMailer
ActionMailer用來發送和接收email。
Web服務:ActionWebService
ActionWebService來提供SOAP和XML-RPC支持。需要注意的是,Rails趨向使用更加簡單明了的REST方式web服務而不再提倡SOAP格式的web服務。ActionWebServices在未來的版本里面會逐步淡出。
網絡資源:ActionResource
用REST對Web服務提供了優秀的支持。這種風格的Web服務使用指定的資源。Rails中的AJAX
AJAX(異步JavaScript與XML)是一種異步傳輸接口,可以借由瀏覽器使用JavaScript和XML來處理傳輸請求,而將Web服務器作為后臺來處理,這樣無須載入額外的網頁。Rails自帶有Prototype包 來實現這個技術。Ajax已經和Ruby on Rails結合在了一起成為了一個新的系統叫做“Ajax on Rails”。Rails提供一些助手工具來更方便地實現AJAX應用。 Rails提供了一些Helper,可以在服務器一端用純Ruby語言生成給瀏覽器用的JavaScript代碼,從而讓Rails的開發者不需掌握 JavaScript就可以簡單方便的開發出AJAX的應用。Rails和Web服務
稍早的版本的Rails中提供了ActionWebService作為開發XML-RPC和SOAP的web服務的基礎。但是最近的Rails 1.2更加傾向于是用REST方式的web服務,而ActionWebService在Rails 2.0中作為plugin而不再是rails核心的一部分。Web服務器支持
對于開發和測試來說,一個很輕量的WEBrick網頁服務器已經被包含在了Ruby中,常被用來作為應用服務器。而對于生產應用,常推薦使用帶FastCGI的Apache或者Lighttpd,但任何支持CGI或者FastCGI的網頁服務器都可以使用。在Apache上,mod_ruby也可以考慮用來提高性能。數據庫支持
使用Rails的架構開發網絡應用一般都使用數據庫,所以推薦使用一個關系數據庫系統來進行數據存儲,若不能運行一個關系數據庫服務器,Rails也支持SQLite庫。很多關系數據庫系統都支持,包括MySQL、PostgreSQL、SQLite、IBM DB2、Oracle和SQL Server。系統要求
• Ruby語言
• Web服務器,如Apache、lighttpd等。
• FastCGI,或者Mongrel為了提高效率
• 數據庫和驅動程序
集成開發環境
開發用的IDE有:Eclipse , IntelliJ, Aptana。類似的框架
• CakePHP
• Django
• TurboGears
• CodeIgniter
前段時間有不少獵頭來電詢問是否考慮換工作,我一一回絕;因為在目前公司要完成的目標目前完成了1個,正在進行中1個,剩余1個還沒有開始;其中一個獵
頭問我為什么來這家公司,主要是因為我的老板懂測試這個工種和工作,非常實實在在的支持和重視測試部門。
非常感謝今年的績效考核工作,增加了一項考核指標:生產環境bug修復及時率,讓我有機會學習和學會如何用這項指標來驅動開發的工作和檢查測試工作成
果,感謝我的老板給我的工作指導和好的想法,感謝在工作中時常提醒我做重要事情并給我很多工作建議的mac。
今天拿出來和同行分享,希望對大家有幫助。^_^。
點子1:生產環境bug的review會議
我們有固定的時間每周四上午,花1小時和開發及管理層過生產環境沒有處理的P0、P1、P2問題,時間來得及會把P3也過一過;主要讓大家知道目前生產環境
都有哪些問題,處理進展如何,什么時候能解決,解決這些問題有什么困難。連續開了4周,有一些進步,還需繼續引導。
點子2:每周過一遍生產環境bug修復及時率數據
給大家分享一下上半年的數據,還沒有進行更深入的分析。從數據上可以看出測試漏出去不少問題,我在想:為什么會漏出去這些問題?在哪些環節給漏出去的?最近親自在跟兩個重要項目,感受很多,明天準備寫其中一個項目的項目測試總結在組內分享,有一個還在背后默默關注。
在深圳工作1年了,每當組內的測試人員出現一些很常識的問題和面試過的測試人員回答的一些問題;非常明顯的感覺到南北測試人員工作水平和對測試工作理
解的差異,在深圳想找到有共鳴的人好難啊。
今天寫這個文章,只是把工作中的一些片段和場景與大家分享,希望測試新人在做測試工作中多一些執著、多一些思考和多問為什么?
故事1:搜索列表頁的一個神奇bug
問題現象:一個已經測試通過并上線的商品搜索列表頁,頁面功能很簡單、有搜索的篩選項、商品展示、商品翻頁功能。通常大家在測試翻頁功能時,基本測
試點都是測試上一頁、下一頁、具體頁數、頁數輸入框(正常、異常);有意思的是這個搜索列表結果有500多個商品1百頁,我就一直點擊下一頁、一頁一頁的瀏
覽商品,當瀏覽到第24頁時,發現瀏覽器訪問報錯提示連接不上;訪問其它網站或該網站的其它功能就正常。
問題分析:此處的點擊下一頁的翻頁程序代碼,每翻一頁,URL請求就會多加一串字符“swIFRPIDUwMH0gcHJpY2VfQ05ZOjUwMDxKaW1pPnByaWNlX0NOWTp7MCBUTyA1MDB9IHByaWNlX0NOWTo1MDA8SmltaT5wcmljZV9DTlk6ez
AgVE8gNTAwfSBwcmljZV9DTlk6NTAwPEppbWk+cHJpY2VfQ05ZOn”;這串字符出現6次以上后,url訪問長度超過2k瀏覽器請求就會參數丟失,導致頁面訪
問報錯
5個思考點:
思考1:為什么測試的時候沒有發現呢?其中一個測試人員說,這個場景很少有人想到。
思考2:測試人員如何能測試出這種問題呢?我在想,聰明的辦法那就是對設計實現熟悉了解,了解開發是如何實現的,應該可以想出來這個地方會有問題。另
一個辦法就是增加這樣的測試點,用自動化測試腳本來測試這種大數據量的功能極限測試。
思考3:對比其它網站,為什么別的網站沒有這種問題呢?開發在設計上沒有考慮這種情況?
思考4:為什么開發沒有自測發現這個問題?我在想,開發沒有考慮到URL會有問題
思考5:我們如何改進和提高呢?我在想,測試除了要補充測試用例;開發要整理出搜索結果列表頁的一些設計規范,同時要參考和同行對比;開發要對系統的
實現邏輯加強極限測試。
最后我想,還好這個場景不常見,影響范圍沒有很大的殺傷力。
故事2:兩個bug還是1個bug
現象:一個問題是:商品買滿打XX折,從購物車進入到訂單提交頁中,商品總結算金額顯示不正確;另一個問題是:商品買滿減XX元,從購物車進入到訂單提
交頁中,商品總結算金額顯示不正確。開發認為這是1個bug,因為都是商品總結算金額顯示不正確;我認為是2個bug,因為是兩個不同的測試用例場景得出的問
題,不能因為現象一樣就認為是一個bug,同時懷疑代碼里面的處理邏輯是不一樣的。
分析:為什么這種問題在我過去工作8年的公司和開發團隊,沒有開發管理人員認為這類bug是1個,而認為是2個;而這位開發管理人員認為是1個;我在
想:原因是這位開發管理人員很害怕bug?還是這位開發管理人員很不喜歡看到很多的bug,因為今天我們測試兩個頁面,4小時報了35個bug讓人心情很不爽?答
案不知道,只要解決就好。
5個思考點?
思考1:站在用戶角度,如果是用戶發現的,我們告訴用戶是1個問題?用戶能明白嗎?
思考2:站在開發設計角度,需要知道那個地方的實現邏輯都是一個類或方法嗎?即使是一個類或方法,當參數不一樣時內部處理邏輯一樣嗎?找個時間問具體
寫代碼的開發人員問問就知道了?
思考3:下次碰到此類開發管理人員該如何相處?我在想:只要改了就行,不能和這類人去糾結1個還是2個,因為道不同不能理解;但是測試工作總結時要算成
2個。
思考4:為什么不能報成1個bug,因為當把多個bug放到1個bug里報時,如何有效跟蹤?(比如:開發修改轉測后,測試驗證有一部分沒有修改好,這個bug會
來回修復、打開);如何有效做bug分析?(測試任務結束后,如何分類分析bug的錯誤類型及開發工作改進建議數據分析)。
思考5:為什么這么明顯的bug開發沒有自測出來?開發做自測了嗎?這樣的開發管理人員管理的開發團隊,轉測出現這樣低級的bug,消耗了多少不必要的測試
成本(測試環境部署+bug報告跟蹤和驗證時間)和開發修復版本成本?降低了多少工作效率?這類bug有多少?
最后我想:我要通過什么方法來改變?
生活還在繼續、工作也在繼續,世界之大、無奇不有,每天都有不同的見聞和收獲,活著真好!
今天晚上在家喝著紅酒和可樂參雜的酒,味道非常好;好想退休啊!最近2周心情欠佳,主要是工作上的事情;工作那么久,遇到自己不能接受的事情我還是控制不了自己的情緒;今天靜心想想最終還是開發惹的禍,開發質量非常非常的差,改個文字也能把功能改的不能用,真是無語;目前的開發團隊能力水平真是讓人堪憂、最倒霉和郁悶的是我的測試團隊;從本周開始將要開始收集開發轉測版本次數及bug的情況、從本周開始將要收集開發有多少延期轉測的情況。
測試管理之前有寫過2篇博文,今天給大家分享今年的最新版本,希望對大家有幫助!
做為管理者,每次給員工做工作績效考核都會遇到這樣或那樣的問題,如:憑什么那位員工得分高?如何通過數據更客觀的對員工的工作做考核?為什么某些人做的多,問題很多,結果不好?
在最近一次面試中,我問一個面試人:“如果你所管理的員工出現這么個現象:她做了很多工作,但問題很多,結果不好?你怎么看?”他回答到“說明這個人能力不行!!!”我說:“這里面管理者有問題”。。。。。。。。。。。
本文中所述的測試主要指軟件領域的測試,與核武器的測試無關。
測試是什么?它如同醫學、教學一樣是個獨立的、專業的行業。測試人員之于軟件系統猶如醫生之于患者,教師之于學生。醫生的職責是治病救人,教師的職責是教書育人。
測試這個行業的從業人員是保證軟件實現的完整性和正確性。當然:雖然患者的身體健康與否取決于患者自己,但一個優秀的醫生除了有精湛的醫術外,也會用各種方法渠道讓患者明白如何預防疾病發生。雖然學生的成長也是取決于學生自己,但一個優秀的教師除了有精湛的教書能力外,也會用各種方法渠道讓學生明白做人的道理。所以,雖然軟件質量的好壞取決于實現軟件的人,但是一個優秀的測試人員除了優精湛的測試技能外,還會用各種方法渠道讓實現者明白如何做出一個高質量的軟件產品。
現在言歸正傳,一個測試人員之路是什么?前面說了,測試是一個行業,所謂行行出狀元,測試行業的狀元是什么樣的呢?繼續細分,如同醫療行業有內科、外科、腦科、心血管科等等各種專業領域;測試行業本身也有各種專業領域:功能、性能、安全、可用性等等。每個專業領域的狀元一定是在這個專業領域上有精湛造詣的人。
到這里,大家一定會有疑問,做到什么樣才叫有精湛造詣呢?現在講個大家耳熟能詳的故事: 魏文王問名醫扁鵲說:“你們家兄弟三人,都精于醫術,到底哪一位最好呢?” 扁鵲答說:“長兄最好,中兄次之,我最差。” 文王再問:“那么為什么你最出名呢? 扁鵲答說:“我長兄治病,是治病于病情發作之前。由于一般人不知道他事先能鏟除病因,所以他的名氣無法傳出去,只有我們家的人才知道。我中兄治病,是治病于病情初起之時。一般人以為他只能治輕微的小病,所以他的名氣只及于本鄉里。而我扁鵲治病,是治病于病情嚴重之時。一般人都看到我在經脈上穿針管來放血、在皮膚上敷藥等大手術,所以以為我的醫術高明,名氣因此響遍全國。”
首先:若想成為某個測試領域的專家,個人認為應具備如扁鵲之力,除了要精通于自身領域內的知識,對系統也了如指掌,快速看到問題現象,同時也能夠快速通過現象找到問題本質,最后用最簡單最有效的解決方案來根治問題。比如在經脈上針灸、在皮膚上敷藥。如果要大動干戈、開腸破肚解決問題,那是普通水平。如果是頭痛醫頭腳痛醫腳,那是庸醫;呵呵。
其次:小隱隱于野。若想成為某個測試領域的大師的話,則需具備扁鵲二哥的能力,當系統還在設計的時候,就能夠找到致病因素,用簡單高效的手段鏟除病因。也就是要具備系統分析師的能力,對設計的功能、性能、易用性、可靠性、可維護性、可移植性、安全性、可測性等各方面能夠起到指導作用。知易行難,要做到如此很考驗人的毅力。
最后:大隱隱于市。若想成為測試領域的隱士的話,則需具備扁鵲大哥的能力,能夠在軟件系統創造前期,就將問題防范于未然。要做到這樣,除了需要有精湛的技術外,還需具備的是對這個行業的熱愛,具備幫助他人成功的心態。并且要有甘于寂寞、淡泊名利的心境,因為幾乎沒有人知道你的存在,更少人懂你。
接下來我們再講講TL(Techlead),
TL如同主任醫生或者碩士生導師,他不僅在某個領域內有很深的造詣同時也非常有熱情繼續在這個領域中深入,并且也愿意帶領小部分人一起來探索、研究、創新。套用前面的故事,即如同扁鵲三兄弟的父親。據說他將自己的行醫之道總結了2本秘籍,一本是《醫道》、一本是《防道》,根據扁鵲三兄弟的天資,分別傳授了給他們。扁鵲三兄弟的功力也是長年跟著醫術高明的父親看病實踐及理論教導而日益增長的。所以TL不僅自己能夠獨立做戰,也能夠帶領人共同做戰的leader。
以上是對P路線的闡釋
—————————————————————————————————————–
以下是對M路線的闡釋
前面說了測試工作本身是為了保證軟件產品的正確性完整性。但在研發體系運作中,測試團隊或者測試部門的建立則是為了提升研發效率。
先闡釋下,如何來理解它是個效率部門。這里做一個簡單的模型,模型的前提是:1、先把需求設計階段拋開,單從開發和測試來說;2、產量和質量是相當的。假設一個場景:如果1個人做1個產品需要15天, 2個人做的話,就能將原先串行的工作變成并行,這樣能夠縮短系統上線工期。變化如下圖1所示。
圖1
前提假設都不變的情況下,如果變成如圖2的話,那么這個研發體系實在不咋地。
圖2
前提假設都不變的情況下,如果變成圖3的話,那么這個研發體系則比較優秀,因為不僅開發和測試本身的工期都得到了縮短,總工期也得到了大大縮短,并且還降低了總人力成本。
圖3
以上幾種體系的建立實施都離不開管理者,即是我們所說的M。下面我們就來說說作為測試部門的M應該做哪些事。
一、 M得具備如上面模型中談到的測試體系建設及研發體系建設的能力。要有系分或者架構師的視角來優化測試體系和研發體系。
二、 M得有Loadbalance的功能。測試部門作為研發部門中的公共資源部門,需要起到削峰填谷的作用,合理得分配和調度測試資源是M的基本職責。
三、 M得是個優秀的HR。招聘策略、培訓體系、員工關懷、員工成長體系乃至離職管理都得搞定。這也是基本職責。
四、 M得是個指揮家。需要指揮協調團隊中各種專家為同一首交響曲而合作共同演奏。
五、 M得是個司令官。戰略可大可小,時刻得記得給團隊一個方向和目標。
六、 M得是個隊長。戰術的落地,跟蹤執行、績效review等。就公司來說,這對保證公司業績完成是非常重要的內容
七、 M得是個外交官。要獲得客戶、員工、老板、同事等的支持和合作,沒點外交能力還真搞不定。
八、 M得是個銷售員。要將自己的產品、思想銷售給有需要的人,甚至那些還未意識到自己有需要的人。必要時還得盜夢空間下。
另外,M還得懂點心理學、經濟學、社會學、哲學等等,總之各種學科都略懂肯定沒錯啦。
《大學》中有談到一個人從內在修養到外發事業的完成是這樣8個順序:格物、致知、誠意、正心、修身、齊家、治國、平天下。
大致意思是了解事物原來才能擁有知識,心意才會真誠,思想才會端正,然后才能提高自身的品德修養,自身品德修養高了才能管理好家庭、治理好國家、使天下太平。
所以說難,M真的很難,要懂的知識很多,要想的事很多。說容易也容易,其實只要誠意正心,心無旁騖,真心為客戶好、為員工好、為公司好,用心將工作內容做好就好。
—————————————————————————————————————–
以下內容獻給在P和M中糾結徘徊的同學們
很多同學格物致知到了P6、P7后就會猶豫自己是該繼續走P還是改走M,也有的同學轉了M后,也還糾結,要么感覺沒變化,要么感覺不做P的事,心里沒底。
這里我將我的理解分享給大家,僅供參考。我認為打造一個團隊如同打造一座房子,P是房子的頂梁柱,而M是房子的橫梁。如下圖所示,圖中的P和M的數字只是為了舉例方便,千萬不要生搬硬套。
……
……
……
……
……
圖4
圖4中可以看出,如果要更上一層樓,就要有更高的P和更高的M。那么做為已有的P和M應該怎么到更高的數字呢?以圖4中的數字為例,P6若要晉升到P7,那么做的事一定是能夠讓團隊的技術能力或工作產出上一個臺階的。你可以選擇做其他P7正在做的事,但實際上因為每個人的工作機會和成長路線都不盡相同,所以很難去模仿他人,因此更多的時候還是要觸類旁通,自己創新。P8、P9等等以此類推。
同理,M要從M2晉升到M3,則是要讓團隊在更高的一層樓上高效得運作。每層樓的人數并不是晉升的關鍵,但是在2樓運作還是在3樓運作則是關鍵。
看到這里,大家肯定有疑問了,說的簡單啊,可真實情況咋那么糾結呢。這個說:“我是P,可是做了一堆M的事。”另外一個又說:“我是M,可也做了一堆P的事。”到底怎么回事呢?其實這就對了,糾結說明你又上進又有責任感。為什么這么說呢?所謂世上不如意事十有八九。現實中很難有M和P都匹配得非常完美的情況。仍舊用圖4舉例:如果你是P7,可是團隊中又沒有M3,你又希望團隊進步,希望其他成員用你的思想、方法、理論在3樓運作,怎么辦?要招聘,更要承擔M3的很多責任。同樣,如果你是M2,你非常希望你的團隊能夠更上一層樓,但是又沒有P7,怎么辦?在招聘未果的情況下,你就不得不承擔很多P7應該做的事了。以此類推。
只要社會在發展、公司在發展,樓總是需要越建越高的,而人才總是越來越稀缺的。所以我們每個人除了要有自己的目標自己的夢想外,也都得接受現實的不完美。人生短暫,讓我們一起享受在實現目標和夢想過程中的種種挑戰吧!一起為高樓的建設而努力吧!
本文與在測試行業道路上孜孜不倦追求卓越的同行們共勉。