自從搞了bi數(shù)據(jù)就很少寫代碼了,這次到新公司要從頭開始搭建測(cè)試團(tuán)隊(duì),又要開啟新的自動(dòng)化測(cè)試之旅,python已經(jīng)到3.X版本了,也支持了Robot framework的ride庫(kù),現(xiàn)把安裝文檔整理如下,便于后續(xù)新人安裝,少走彎路。
參考資料:
https://blog.csdn.net/thefg/article/details/128601410
https://blog.csdn.net/qq_45894553/article/details/119893181
特別說(shuō)明:
安裝環(huán)境選擇的版本:Windows10+python3.7,大于3.7版本安裝Robot framework的ride庫(kù)不能正常使用。
一、安裝的軟件清單見(jiàn)下圖:
二、安裝步驟:
順序 | 安裝包名 | 安裝方法 | 下載地址 | 備注 |
1 | python | 具體見(jiàn):https://blog.csdn.net/thefg/article/details/128601410 | 切記目前最高有效版本只能安裝3.7.9 | |
2 | setuptools | 不需要安裝,python3.7.9安裝后自帶安裝 | 無(wú) | Python 的套件管理程式 |
3 | pip | 不需要安裝,python3.7.9安裝后自帶安裝 | 無(wú) | Python 的套件管理程式 |
4 | 升級(jí)pip | Cmd命令執(zhí)行:pip install --upgrade pip | 無(wú) | 升級(jí)pip到最新版本 |
5 | robot framework | Cmd命令執(zhí)行:pip install robotframework | robot framework本身 | |
6 | robotframework-ride | Cmd命令執(zhí)行:pip install robotframework-ride | Ride | |
7 | wxPython | 不需要安裝,安裝robotframework-ride自動(dòng)安裝 | 無(wú) | 支撐Ride的運(yùn)行庫(kù) |
8 | wheel | Cmd 命令執(zhí)行:pip install wheel | 無(wú) | 運(yùn)行安裝.whl包 |
9 | robotframework-selenium2library | Cmd命令執(zhí)行:pip install robotframework-selenium2library | https://pypi.python.org/pypi/robotframework-selenium2library | selenium2測(cè)試庫(kù),基于webdriver驅(qū)動(dòng) |
10 | robotframework-databaselibrary | Cmd命令執(zhí)行:pip install robotframework-databaselibrary | https://github.com/franz-see/Robotframework-Database-Library | DB庫(kù) |
11 | Pymysql | Cmd命令執(zhí)行:pip install pymysql | https://pypi.python.org/pypi/pymssql | Mysql第三方庫(kù) |
12 | pywin32 | 不需要安裝,安裝robotframework-ride自動(dòng)安裝 | 無(wú) | |
13 | AutoItV3 | exe文件,直接雙擊安裝 | http://www.autoitscript.com/site/autoit-news/autoit-v3-3-10-0-released/ | AutoItLibrary使用前提 |
14 | Requests | Cmd命令執(zhí)行:pip install requests | RequestsLibrary庫(kù)使用前提 | |
15 | RequestsLibrary | Cmd命令執(zhí)行:pip install -U robotframework-requests | http request庫(kù) | |
16 | robotframework-autoitlibrary | Cmd命令執(zhí)行:pip install robotframework-autoitlibrary | 無(wú) |
|
17 | autoitlibrary3 | Cmd命令執(zhí)行:pip install autoitlibrary3 | http://code.google.com/p/robotframework-autoitlibrary/ | AutoItLibrary測(cè)試庫(kù) |
18 | robotframework-appiumlibrary | Cmd命令執(zhí)行:pip install robotframework-appiumlibrary | 無(wú) |
|
19 | robotframework-httplibrary | Cmd命令執(zhí)行:pip install robotframework-httplibrary | 無(wú) | 安裝完后會(huì)出現(xiàn)ride加載httplibrary庫(kù)標(biāo)紅失敗,解決辦法手動(dòng)安裝livetest,具體見(jiàn)下面說(shuō)明 |
三、安裝后檢查:
1. Cmd命令下執(zhí)行ride.py,能成功進(jìn)入ride頁(yè)面說(shuō)明robot framework安裝成功。
2. 配置ride為桌面快捷方式:在RIDE的操作界面,點(diǎn)擊Tools下的 Create RIDE Desktop Shortcut 在桌面上創(chuàng)建 RIDE 快捷方式即可,具體見(jiàn)下圖
3. 在ride操作頁(yè)面新建一個(gè)項(xiàng)目,把AutoItLibrary、Selenium2Library類加載,加載中如果不顯示紅色說(shuō)明AutoItLibrary、Selenium2Library安裝成功。
4. Cmd命令下執(zhí)行pip list,可以查看安裝的包列表有哪些
四、特別說(shuō)明:
問(wèn)題:python 解決 robotframework RIDE 中導(dǎo)入HttpLibrary庫(kù)為紅色
解決辦法:
1. 檢查相關(guān)庫(kù)是否以及安裝
jsonpath,jsonpointer 可以直接pip install 進(jìn)行安裝,livetest 需要離線安裝,步驟如下:
2. 下載livetest包,地址:https://pypi.org/project/livetest/#files
3. 解壓并修改相關(guān)文件
修改 /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. 手動(dòng)安裝livetest
在cmd中切換路徑到\livetest-0.5,執(zhí)行 python setup.py install,安裝成功。
5. 修改HttpLibrary相關(guān)配置
修改__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,導(dǎo)入正常
五、驗(yàn)證工具是否能正常使用
1.安裝Firefox瀏覽器
2.打開ride工具,加載相關(guān)類庫(kù),輸入如下代碼運(yùn)行,運(yùn)行成功說(shuō)明安裝成功可用
編寫背景:
還記得自己第一次安裝appium時(shí),在baidu和google上找了很多資料,按照找來(lái)的文檔,沒(méi)有一個(gè)文檔是能完整的從頭到尾一次安裝成功的,遇到了不少坑,這些坑都是怎么解決的在這里總結(jié),為方便以后自己回頭看看。
安裝的環(huán)境是:windows7系統(tǒng)
問(wèn)題一:在線安裝appium,cmd執(zhí)行命令:npm install –g appium出現(xiàn)如下錯(cuò)誤信息:
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 ]
解決辦法:
安裝能訪問(wèn)www.google.com網(wǎng)站的VPN軟件,然后再重新安裝appium的低版本,執(zhí)行命令:npm install –g appium@1.5
問(wèn)題二:在線安裝appium,cmd執(zhí)行命令:npm install –g appium出現(xiàn)錯(cuò)誤提示:
MSBUILD : error MSB3428: 未能加載 Visual C++ 組件“VCBuild.exe”。要解決此問(wèn)題, 1) 安裝 .NET Framework 2.0 SDK;2) 安裝 Microsoft Visual Studio 2005;或 3) 如果將該組件安裝到了 其他位置,請(qǐng)將其位置添加到系統(tǒng) 路徑中。
解決辦法:
下載.NET Framework 4.5和Microsoft Visual C++ 2015 Redistributable (x64)進(jìn)行安裝
問(wèn)題三:在線安裝appium,cmd執(zhí)行命令:npm install –g appium,當(dāng)appium版本高于1.6.1以上,會(huì)安裝sqlite3,這時(shí)會(huì)出現(xiàn)錯(cuò)誤提示:
node-pre-gyp install --fallback-to-build
解決辦法一:執(zhí)行npm install –g grunt-node-inspector 安裝后,繼續(xù)安裝。
解決辦法二:降級(jí)版本安裝,執(zhí)行安裝命令:npm install –g appium@1.5;appium1.5版本的安裝是不包含sqlite3。
問(wèn)題四:在線安裝appium,cmd執(zhí)行命令:npm install –g appium@1.5 ,當(dāng)安裝到appium-selendroid-driver組件后會(huì)報(bào)錯(cuò)。
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.
解決辦法:通常是網(wǎng)絡(luò)問(wèn)題,需要安裝能訪問(wèn)www.google.com網(wǎng)站的VPN軟件,然后再重新安裝。
最后提醒:安裝appium一定要有耐心、一定要有耐心、一定要有耐心,因?yàn)樵L問(wèn)國(guó)外網(wǎng)站在線安裝是需要花時(shí)間的;要想安裝軟件又不影響工作,就要申請(qǐng)一臺(tái)機(jī)器單獨(dú)弄會(huì)省時(shí)省力。
上面的幾個(gè)坑,都是在折騰了N次appium的版本安裝、N次node的版本安裝后得出的經(jīng)驗(yàn)。
編寫背景:
部門內(nèi)部開始使用robotframework自動(dòng)化框架進(jìn)行網(wǎng)站和手機(jī)自動(dòng)化測(cè)試的試運(yùn)行有3個(gè)月了,今天抽空把安裝文檔整理整理,共享給需要的同行和新手學(xué)習(xí),讓大家在安裝的過(guò)程中少碰到我遇到的坑。
目標(biāo):在windows7安裝手機(jī)自動(dòng)化工具appium和手機(jī)模擬器進(jìn)行手機(jī)軟件自動(dòng)化測(cè)試
安裝準(zhǔn)備:需要準(zhǔn)備如下軟件,可以自己在網(wǎng)上下載:
1.工具:LoCo加速器,注意:一定要能訪問(wèn)國(guó)外網(wǎng)站,不然在線安裝會(huì)失敗
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.手機(jī)模擬器:夜神模擬器
一、安裝軟件
1. LoCo加速器:LoCo加速器下載后,直接點(diǎn)擊exe可執(zhí)行文件安裝即可,安裝后用郵箱注冊(cè),注冊(cè)后15元購(gòu)買1個(gè)月的服務(wù);然后登錄,登錄后進(jìn)行鏈接操作。鏈接成功后,訪問(wèn)網(wǎng)站:www.google.com能正確顯示并搜索出內(nèi)容,說(shuō)明成功。
2. JDK安裝:下載java的jdk后,點(diǎn)擊exe可執(zhí)行文件安裝即可,安裝后進(jìn)行如下配置:
1)添加系統(tǒng)環(huán)境變量:JAVA_HOME,值:Jdk的安裝路徑,如:D:\Java\jdk1.6.0_45
2)添加系統(tǒng)環(huán)境變量:CLASSPATH,值:
.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;
3)修改系統(tǒng)環(huán)境變量path值,加上:%JAVA_HOME%\bin;%JAVA_HOME%\jre\bin;
檢查JAVA環(huán)境是否配置好,進(jìn)入CMD命令行,輸入java或javac,可以看到好多的命令提示,說(shuō)明成功。
3. Android SDK安裝:直接點(diǎn)擊Android Studio的exe可執(zhí)行文件安裝即可,安裝后進(jìn)行如下配置:
1) 新增系統(tǒng)環(huán)境變量 ANDROID_HOME,值為 Android SDK 路徑,如:D:\Android\sdk
2) 修改系統(tǒng)環(huán)境變量Path值,加上:
;%ANDROID_HOME%\tools;%ANDROID_HOME%\platform-tools
4. Nodejs安裝:直接點(diǎn)擊exe可執(zhí)行文件安裝即可,安裝后在cmd命令下輸入:node –v,能看到版本信息說(shuō)明安裝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"
配置后,通過(guò)如下命令可以查看配置信息:
npm config list
npm config ls -l
5. Microsoft組件安裝:直接點(diǎn)擊Visual C++ 2015 Redistributable (x64)和.NET Framework 4.5的exe安裝文件,直接安裝即可。
6. Appium安裝:cmd命令下輸入如下命令:
1) npm install –g appium-doctor
確保國(guó)外網(wǎng)站google能正常訪問(wèn)情況下,在線安裝appium-doctor軟件包,安裝成功后,在cmd命令下輸入:appium-doctor,查看appium安裝配置環(huán)境是否ok,都OK說(shuō)明配置正常
2) appium-doctor安裝正常后,輸入命令:npm install -g appium@1.5
下載的文件內(nèi)容比較多,一定要確保網(wǎng)絡(luò)正常,安裝時(shí)間會(huì)比較長(zhǎng),一定要耐心等待。
3) Appium安裝成功后,cmd命令窗口輸入:appium在界面會(huì)顯示版本信息
7. 夜神模擬器安裝:直接點(diǎn)擊exe文件進(jìn)行安裝即可
二、開始使用
1. 打開模擬器
2. Cmd命令窗口輸入:adb connect 127.0.0.1:62001 鏈接成功后會(huì)顯示如下信息
3. Cmd命令窗口輸入:appium 啟動(dòng)appium服務(wù)
4. 打開ride,加載AppiumLibrary類庫(kù),編寫手機(jī)自動(dòng)化腳本,編寫完畢后,點(diǎn)擊運(yùn)行即可
到此,appium1.5的安裝和使用介紹完畢,預(yù)祝大家有個(gè)愉快的手機(jī)自動(dòng)化之旅!
2年沒(méi)有更新博客了,自從有娃后時(shí)間變得越來(lái)越少,深刻體會(huì)了當(dāng)媽的不容易;整理這個(gè)文章是為了讓部門的新人學(xué)習(xí)這個(gè)工具能輕松的入門第一關(guān):安裝,同時(shí)希望能幫助到其它同行。
參考資料:
http://www.cnblogs.com/puresoul/p/3854963.html
http://www.itest.pro/howto-install-robot-framework-autoit-windows-x64/
一、安裝的軟件清單見(jiàn)下圖:
二、安裝步驟:
順序 | 安裝包名 | 安裝方法 | 下載地址 | 備注 |
1 | python | exe文件,直接雙擊安裝,安裝完設(shè)置Python環(huán)境變量,將“d:\Python27”和“d:\Python27\Scripts”添加到環(huán)境變量“PATH”項(xiàng)中(注意環(huán)境變量之間用“;”隔開) | 一切的基礎(chǔ),安裝路徑不能有空格 | |
2 | setuptools | 下載ez_setup.py文件,把文件放到python安裝目錄的scripts目錄下,雙擊文件名 | Python 的套件管理程式 | |
3 | pip | 1.cmd進(jìn)入ez_setup.py文件目錄,如: d:\Python27\Scripts 2.用setuptools安裝:easy_install pip | Python 的套件管理程式 | |
4 | 升級(jí)php | Cmd命令執(zhí)行: pip install --upgrade pip | 無(wú) | 升級(jí)pip到最新版本 |
5 | robot framework | Cmd命令執(zhí)行:pip install robotframework | robot framework本身 | |
6 | wxPython | exe文件,直接雙擊安裝 | 支撐Ride的運(yùn)行庫(kù) | |
7 | robotframework-ride | Cmd命令執(zhí)行:pip install robotframework-ride | Ride | |
8 | robotframework-selenium2library | Cmd命令執(zhí)行:pip install robotframework-selenium2library | https://pypi.python.org/pypi/robotframework-selenium2library | selenium2測(cè)試庫(kù),基于webdriver驅(qū)動(dòng) |
9 | robotframework-databaselibrary | Cmd命令執(zhí)行:pip install robotframework-databaselibrary | https://github.com/franz-see/Robotframework-Database-Library | DB庫(kù) |
10 | Pymysql | Cmd命令執(zhí)行:pip install pymysql | https://pypi.python.org/pypi/pymssql | Mysql第三方庫(kù) |
11 | pywin32 | exe文件,直接雙擊安裝,注意py對(duì)應(yīng)的版本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命令執(zhí)行:pip install AutoItLibrary | http://code.google.com/p/robotframework-autoitlibrary/ | AutoItLibrary測(cè)試庫(kù) |
14 | Requests | Cmd命令執(zhí)行:pip install requests | RequestsLibrary庫(kù)使用前提 | |
15 | RequestsLibrary | Cmd命令執(zhí)行:pip install -U robotframework-requests | http request庫(kù) |
三、安裝后檢查:
1. 配置ride為桌面快捷方式:
1) 新建快捷方式,在桌面右擊鼠標(biāo),彈出的菜單選擇 新建-快捷方式 ,然后在 請(qǐng)鍵入對(duì)象 的位置輸入這一行命令,C:\Python27\pythonw.exe -c "from robotide import main; main()",注意“C:\Python27\pythonw.exe”是python安裝的路徑,需要換成你的Python所在目錄的路徑;注意雙引號(hào)為英文。
2) 點(diǎn)擊下一步,輸入你要建立的快捷方式的名稱,點(diǎn)擊完成,看到圖標(biāo)表示已經(jīng)建好。
3) 顯示不爽,圖標(biāo)要換成機(jī)器人圖標(biāo),需要快捷方式上點(diǎn)擊右鍵-屬性,點(diǎn)擊“更改圖標(biāo)”,在瀏覽里找到目錄F:\Python27\Lib\site-packages\robotide\widgets,里面有個(gè)robot.ico的圖標(biāo)(大家到自己的安裝目錄相同路徑去找一下)選它之后,點(diǎn)打開,確定之后再確定就可以了,雙擊圖標(biāo),進(jìn)入ride操作頁(yè)面
2. Cmd命令下執(zhí)行ride.py,能成功進(jìn)入ride頁(yè)面說(shuō)明robot framework安裝成功。
3. 在ride操作頁(yè)面新建一個(gè)項(xiàng)目,把AutoItLibrary、Selenium2Library類加載,加載中如果不顯示紅色說(shuō)明AutoItLibrary、Selenium2Library安裝成功。
4. Cmd命令下執(zhí)行pip list,可以查看安裝的包列表有哪些
四、特別說(shuō)明:
1.安裝robotframework-selenium2library 后會(huì)自動(dòng)安裝selenium的最新3.0版本,selenium 3.0以上版本安裝后編寫的自動(dòng)化腳本打開firefox瀏覽器會(huì)失敗,robotframework會(huì)報(bào)如下錯(cuò)誤
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
或者這個(gè)錯(cuò)誤
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進(jìn)入selenium解壓的文件夾路徑,執(zhí)行如下命令:python setup.py install
4) Cmd執(zhí)行pip list 查看安裝的selenium版本是否正確
2.python下如何安裝.whl包?
答:pip install wheel;先安裝wheel,然后pip install 包名字.whl 即可安裝.whl包。
五、安裝過(guò)程遇到的問(wèn)題匯總:
問(wèn):Python有兩個(gè)版本:2.X和3.X,裝那個(gè)版本比較好?
答:由于windows7下,Python 對(duì)應(yīng)的wxPython 版本只支持 2.x 不支持3.x,因此Python目前只能裝2.x版本
問(wèn):pip安裝完畢后,如何升級(jí)?
答:使用命令:pip install --upgrade pip
問(wèn):win76下安裝autoitlibrary失敗
答:必須先安裝pywin32,并且Python的安裝目錄不能有空格,如果有空格會(huì)導(dǎo)致注冊(cè)autoit的dll時(shí)出錯(cuò)
到此,安裝完畢,可以用ride編寫自己的自動(dòng)化測(cè)試腳本,開始自動(dòng)化測(cè)試之旅?。。?/span>^_^。
ADB工具的安裝與卸載命令的實(shí)踐
作者:李玉玲
adb工具的作用就是連接安卓操作系統(tǒng);下面分享ADB工具的安裝和卸載命令實(shí)踐。
一、安裝adb工具的前提
1、查看盒子是否開啟adb的功能
查看盒子是否開啟adb功能,需要使用“ping 盒子IP”,如果通過(guò)但是“adb connection 盒子IP”連接失敗,則沒(méi)有開啟adb功能。這時(shí)候,需要用USB連接盒子和PC,根據(jù)開發(fā)人員提供的升級(jí)安裝包進(jìn)行升級(jí),即可開啟adb功能。
本次使用的是Q12機(jī)頂盒。它默認(rèn)開通了adb功能。只有XXXXX的版本才禁掉了adb功能。
方法:把附件中的adb.exe、AdbWinApi.dll、AdbWinUsbApi.dll文件拷貝到D盤/adb。(也可拷貝到其他自定義路徑,如D:\Fbox。)
上圖是重新配置環(huán)境變量后,adb命令可以隨時(shí)使用。
Android中adb環(huán)境變量的設(shè)置
(2)輸入連接機(jī)頂盒命令
adb connect 192.168.88.104 //IP地址為機(jī)頂盒IP
顯示有……connected字樣,表示已連接成功。(4)查看應(yīng)用是否安裝成功
進(jìn)入“應(yīng)用”中的“我的應(yīng)用”,即可查看。
(1) 連接機(jī)頂盒
輸入adb connect 192.168.88.104 //IP地址為機(jī)頂盒IP
(2)adb uninstall 包名 //包名形如com.android.testme,不包含后綴.apk
如果不知道包名,可通過(guò)以下方法查詢:
1) adb connect 192.168.88.104
2) adb shell
3) #cd data/app
4) #ls //查看包名。其中需要注意的是:
查看有com.youku.tv-1.apk,卸載時(shí)如果輸入:adb uninstall com.youku.tv-1.apk,則會(huì)報(bào)Failure錯(cuò)誤,正確應(yīng)該輸入:adb uninstallcom.youku.tv,后面的“-1”也不用,它不是包名的一部分,而是多次重復(fù)安裝時(shí)Android系統(tǒng)自動(dòng)加上的。和安裝時(shí)一樣,可以查看此軟件已經(jīng)被成功卸載。
注:如果在安裝軟件的過(guò)程中,出現(xiàn)了“系統(tǒng)空間不足”的信息,可以先查看包名,進(jìn)行卸載。完成之后,繼續(xù)安裝新軟件。 三、adb工具的相關(guān)問(wèn)題
1、apk安裝后存放在Android系統(tǒng)的目錄位置為什么是/data?是否可以自定義?
/data 存放的是用戶的軟件信息(非自帶rom安裝的軟件);/data/app 存放用戶安裝的軟件;/data/data 存放所有軟件(包括/system/app 和 /data/app 和 /mnt/asec中裝的軟件)的一些lib和xml文件等數(shù)據(jù)信息;/data/dalvik-cache
存放程序的緩存文件,這里的文件都是可以刪除的。
因此,apk安裝后,默認(rèn)的存放位置時(shí)/data。詳細(xì)文章參考如下鏈接:
http://www.androidlearner.net/android-directory-apk-install.html
利用adb工具進(jìn)行軟件安裝不可以自定義安裝位置。安裝后的軟件只能默認(rèn)存放在/data/app中,這里的軟件才具有可視性。
adb shell
cd /data/app
ll //查看安裝的每一個(gè)軟件的具體信息,具體包含權(quán)限、占用空間等
df //檢查文件系統(tǒng)的磁盤空間占用情況
(1)安裝命令
adb install <apk文件路徑> :將指定的apk文件安裝到設(shè)備上
adb install -s
apk文件名稱.apk :替代內(nèi)存儲(chǔ)器,安裝軟件到SD卡上
adb install -r
apk文件名稱.apk :覆蓋原來(lái)安裝的軟件并保留之前的數(shù)據(jù)
(2)卸載命令
adb uninstall apk包名.apk :卸載apk軟件
adb uninstall -k <軟件名> :卸載軟件但是保留配置和緩存文件
問(wèn)題一:若安裝時(shí)提示"error:more than one device and
emulator",可用“adb devices”查看,應(yīng)該存在多個(gè)devices,此時(shí)可用“adb disconnect 172.30.57.86”命令斷開不使用的連接,再用命令“adb connect 172.30.
一、mysql數(shù)據(jù)庫(kù)日常操作。
1.啟動(dòng)mysql:/etc/init.d/mysql start (前面為mysql的安裝路徑)
2.重啟mysql: /etc/init.d/mysql restart (前面為mysql的安裝路徑)
3.關(guān)閉mysql: /etc/init.d/mysql stop(前面為mysql的安裝路徑)
4.連接本機(jī)上的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)進(jìn)入mysql命令行SET PASSWORD FOR 用戶名@主機(jī)=PASSWORD("root");
例:set password for root@localhost=password(“123456”);
(3)修改自己的密碼:
set password=password(“123456”);
7.增加新用戶:
grant 操作 on 數(shù)據(jù)庫(kù).* to 用戶名@登錄主機(jī) identified by "密碼"
例:grant select on yingyu to qiu@localhost indentify by “123456”;
8.建庫(kù):
create database 庫(kù)名;
例:create database yingyu;
9.顯示數(shù)據(jù)庫(kù)列表: show databases;
10.打開數(shù)據(jù)庫(kù):
use 數(shù)據(jù)庫(kù);
例:use yingyu;
11.刪庫(kù):
drop database 庫(kù)名;
例:drop database yingyu;
12.顯示庫(kù)中的數(shù)據(jù)表:
show tables;
13.顯示數(shù)據(jù)表的結(jié)構(gòu):
describe 表名;
例:describe student;
14.編碼的修改:
(1)改變整個(gè)mysql的編碼格式:
啟動(dòng)mysql的時(shí)候,mysqld_safe命令行加入
--default-character-set=編碼格式
例:--default-character-set=UTF-8
(2)改變某個(gè)庫(kù)的編碼格式:
在mysql提示符后輸入命令:
alter database 數(shù)據(jù)庫(kù) default character set 編碼格式;
例:alter database student default character set UTF-8;
二、sql常用命令
1.建表:
create table 表名(字段設(shè)定列表);
例: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.修改表設(shè)置默認(rèn)字段:
(1)alter table 表名 modify 字段名稱 字段類型 default 默認(rèn)值;
例: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.增加表的一個(gè)字段:
alter table 表名 add column 字段名稱 字段類型 (default 默認(rèn)值);
例:alter table student add column sex char(10) (default 1);
9.刪除表的一個(gè)字段
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.往表里插入一行數(shù)據(jù):
insert into 表名 values(字段數(shù)據(jù)1,字段數(shù)據(jù)2,•••)
例:insert into student values(‘123’,‘qqqq’,‘80’);
13.往表里插入多行數(shù)據(jù):
insert into 表名 values(字段數(shù)據(jù)1,字段數(shù)據(jù)2,•••) ,(字段數(shù)據(jù)1,字段數(shù)據(jù)2,•••),•••;
例:insert into student values(‘123’,‘qqqq’,‘80’),(‘124’,‘yyyy’,‘90’);
14. 修改表的數(shù)據(jù):
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.關(guān)于年份的查詢
例:查詢?cè)?990-1993年之間出生的學(xué)生的全部信息
select * from student where year(Sbirthday)between 1990 and 1993;
查詢?cè)?990年12月5日之前出生的學(xué)生的全部信息
select * from student where birthday < date(‘1990-12-05’);
三、備份與還原
1.備份數(shù)據(jù)庫(kù):
mysqldump –u 用戶名 –p 數(shù)據(jù)庫(kù)名 > 保存路徑+文件名;
例:mysqldump –u root –p yingyu > /home/yingyu/yingyu.sql;
2.還原數(shù)據(jù)庫(kù):
mysql –u 用戶名 –p 數(shù)據(jù)庫(kù)名 < 文件路徑+文件名;
例:mysql –u root –p yingyu < /home/yingyu/yingyu.sql;
3.直接將MySQL數(shù)據(jù)庫(kù)壓縮備份
mysqldump –u 用戶名 –p 數(shù)據(jù)庫(kù)名 | gzip > 保存路徑+文件名
例:mysqldump –u root –p yingyu | gzip > /home/yingyu/yingyu.sql.gz;
4.還原壓縮的Mysql數(shù)據(jù)庫(kù)
gunzip < 文件路徑+文件名 | mysql –u 用戶名 –p 數(shù)據(jù)庫(kù)名
例:gunzip < /home/yingyu/yingyu.sql.gz | mysql –u root –p yingyu;
5.備份數(shù)據(jù)庫(kù)中的某些表:
mysqldump –u 用戶名 –p 數(shù)據(jù)庫(kù)名 表名1 表名2 > 保存路徑+文件名
例:mysqldump –u root –p yingyu student > /home/yingyu/yingyu.sql;
6.備份數(shù)據(jù)庫(kù)中的某些數(shù)據(jù)庫(kù):
mysqldump –u 用戶名 –p –B 庫(kù)1 庫(kù)2 > 保存路徑+文件名
例:mysqldump –u root –p –B yingyu1 yingyu2>/home/yingyu/yingyu.sql;
7.還原數(shù)據(jù)庫(kù)中的某些數(shù)據(jù)庫(kù):
mysqldump –u 用戶名 –p –D 庫(kù)1 庫(kù)2 < 文件路徑 + 文件名;
例:mysqldump–u root –p–D qiuyingyu yingyu</home/yingyu/yingyu.sql;
8.還原數(shù)據(jù)庫(kù)中的某些表:
mysql –u 用戶名 –p 數(shù)據(jù)庫(kù)名 < 保存路徑+表文件名
例:mysql –u root –p yingyu < /home/yingyu/yingyu.sql;
二、 導(dǎo)入Bugzilla 4.0.1數(shù)據(jù)庫(kù)
創(chuàng)建新的數(shù)據(jù)庫(kù)用于導(dǎo)入備份的數(shù)據(jù)庫(kù),命令如下:
# mysql –u root –p
輸入密碼后進(jìn)入mysql操作界面
輸入:create database bugzilla_new
使用如下命令導(dǎo)入備份的Bugzilla 4.0.1的mysql數(shù)據(jù)庫(kù),從新命名數(shù)據(jù)庫(kù)名
# gunzip < bugzilla_20121206.sql.gz | mysql –u root –p bugzilla_new
三、 安裝Bugzilla 4.2.3程序包
安裝步驟具體見(jiàn):http://www.aygfsteel.com/lijun_li/archive/2012/11/29/392220.html
四、 更新導(dǎo)入的Bugzilla 4.2.3數(shù)據(jù)庫(kù)表結(jié)構(gòu)
創(chuàng)建bugzilla_new數(shù)據(jù)庫(kù)用戶
# 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
根據(jù)數(shù)據(jù)庫(kù)的實(shí)際情況修改如下參數(shù):
$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數(shù)據(jù)庫(kù)表
進(jìn)入新安裝的bugzilla 4.2.3文件目錄
#cd /data/apache2/htdocs/bugzilla
#./checksetup.pl
自動(dòng)更新bugzilla_new數(shù)據(jù)庫(kù)表內(nèi)容
在瀏覽器訪問(wèn)新版本bugzilla,使用之前的老用戶賬戶登錄,能成功登錄進(jìn)去并看到之前的bug組件和內(nèi)容,恭喜你成功了。^_^。
到這里,更新完畢,轉(zhuǎn)帖的同行記得要寫上此貼出處。
二、 導(dǎo)入TestLink 1.8.4數(shù)據(jù)庫(kù)
創(chuàng)建新的數(shù)據(jù)庫(kù)用于導(dǎo)入備份的數(shù)據(jù)庫(kù),命令如下:
# mysql –u root –p
輸入密碼后進(jìn)入mysql操作界面
輸入:create database testlink_new
使用如下命令導(dǎo)入備份的TestLink 1.8.4的mysql數(shù)據(jù)庫(kù),從新命名數(shù)據(jù)庫(kù)名
# Gunzip < testlink_20121205.sql.gz | mysql –u root –p testlink_new
三、 安裝TestLink 1.9.4程序包
安裝步驟具體見(jiàn):http://www.aygfsteel.com/lijun_li/archive/2012/11/29/392224.html
四、 更新導(dǎo)入的Testlink1.8.4數(shù)據(jù)庫(kù)表結(jié)構(gòu)
記錄testlink的數(shù)據(jù)庫(kù)更新sql文件存放地方進(jìn)行數(shù)據(jù)庫(kù)表升級(jí)
# cd /data/apache2/htdocs/Testlink/install/sql/alter_tables/
# ll
會(huì)顯示Testlink各版本的更新數(shù)據(jù)庫(kù)sql文件,從1.9依次升級(jí)到1.9.4
進(jìn)入mysql執(zhí)行如下命令
# 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配置文件
進(jìn)入新安裝的TestLink1.9.4數(shù)據(jù)庫(kù)配置文件,更新鏈接的數(shù)據(jù)庫(kù)鏈接到testlink_new.
# cd /data/apache2/htdocs/Testlink
# vi config_db.inc.php
修改’DB_NAME’ 的值為:testlink_new
保存后在瀏覽器訪問(wèn)testlink,使用之前的老用戶賬戶登錄,能成功登錄進(jìn)去并看到之前的測(cè)試用例和測(cè)試計(jì)劃,恭喜你成功了。^_^。
六、 更新缺失的數(shù)據(jù)庫(kù)表
對(duì)比備份的TestLink 1.8.4和新安裝的TestLink 1.9.4數(shù)據(jù)庫(kù)表,發(fā)現(xiàn)還需要做如下操作。
需要在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);
到這里,更新完畢,轉(zhuǎn)帖的同行記得要寫上此貼出處。^_^。
參考資料: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服務(wù),只需開啟和設(shè)置就可以使用,不需要sendmail支持。配置方法如下:
1.修改bugzilla的params文件內(nèi)容
進(jìn)入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郵箱必須是存在的真實(shí)的郵箱,smtp_password是郵箱的密碼(要與你所登陸郵箱時(shí)的密碼相同)!
2.登錄bugzilla進(jìn)行params參數(shù)核對(duì)
訪問(wèn):http://localhost/bugzilla/
用管理員賬戶和密碼登錄
登錄后選擇“Administartor”-》“Parameters”-》“Email”
查看并核對(duì)各參數(shù)是否正確。
3.錄入一個(gè)新bug,到郵箱查看新接收到的bug郵件,如能收到就恭喜你,OK啦。^_^。
TestLink 1.9.4 郵箱配置
進(jìn)入TestLink安裝目錄文件,修改config.inc.php配置文件內(nèi)容
# 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 以下這三處不能有中括號(hào),一般保持一致即可。
$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 #賬號(hào)和密碼,有的需要加上域名有的不需要,最好加上域名。
$g_smtp_password = ’123123123′; # password
保存后,再次登錄testlink:http://localhost/TestLink/,重置某一用戶的密碼,到該用戶郵箱中查收郵件,能收到郵件就恭喜你,OK啦。^_^。
安裝環(huán)境: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的安裝具體見(jiàn)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處添加內(nèi)容為:
AddType application/x-httpd-php .php .phtml
保存后重啟httpd服務(wù)
# cd /data/apache2/bin/
# ./apachectl restart
備注:查找文件命令是 # find / -name 查找的文件名字
3.php配置
# vi php.ini
修改max_execution_time=120
取消掉;extension=php_gd2.dll 前面的;號(hào),讓其生效
修改;date.timezone的值為:date.timezone=”Asia/Shanghai”,并去掉前面的;號(hào),讓其生效
修改mysql.default_port=3306
修改mysql.default_socket=/var/lib/mysql/mysqld.sock (注意:是mysql安裝時(shí)設(shè)置的路徑)
保存后重啟httpd服務(wù)
# 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
修改如下內(nèi)容:
$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.訪問(wèn)TestLink
在URL中輸入:http://localhost/TestLink/install/index.php
在界面中輸入數(shù)據(jù)庫(kù)的用戶名:root;密碼:123456
成功后出現(xiàn)TestLink的登錄頁(yè)面,用用戶名:admin;密碼:admin 登錄即可。
到此,TestLink安裝完畢,后續(xù)還需要進(jìn)行郵箱配置。
參考資料:http://blog.chinaunix.net/uid-10697776-id-3080243.html
http://hi.baidu.com/widebright/item/2f28cd0da72b9210addc70a7
問(wèn):dell的optiplex 360或者optiplex 380機(jī)器,broadcom網(wǎng)卡如何在redhat enterprise linux 5系統(tǒng)下識(shí)別和安裝驅(qū)動(dòng)?
答案如下:
首先看網(wǎng)卡是否已經(jīng)正確連接到計(jì)算機(jī),使用的命令是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)
會(huì)發(fā)現(xiàn)系統(tǒng)識(shí)別不到這個(gè)網(wǎng)卡的設(shè)備,需要更新網(wǎng)卡設(shè)備讀取文件,具體是:
用update-pciids 命令先更新一下 系統(tǒng)的pci.ids文件,這個(gè)最新的應(yīng)該有人維護(hù)的在http://pciids.sourceforge.net/ 可以找得到。
或者像我這樣直接手工更新一下/usr/share/hwdata/pci.ids 文件的內(nèi)容。
把pci.ids文件放到tmp目錄
Redhat上使用命令:cp /tmp/pci.ids /usr/share/hwdata/pci.ids;回車后回復(fù)yes
再次執(zhí)行l(wèi)spci,結(jié)果如下,成功識(shí)別。
[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)
網(wǎng)卡成功識(shí)別后,使用ifconfig命令看網(wǎng)卡信息,發(fā)現(xiàn)沒(méi)有eth0,需要進(jìn)行如下操作:
下載網(wǎng)卡驅(qū)動(dòng)安裝包:
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
打開網(wǎng)絡(luò)設(shè)備:[root@linpcl root]#ifconfig eth0 up
使用命令ifconfig查看可看見(jiàn)eth0
到此Dell optiplex 380 broadcom網(wǎng)卡在redhat 5下網(wǎng)卡識(shí)別和安裝驅(qū)動(dòng)完畢。^_^。
編寫背景:
這幾天開始梳理和總結(jié)測(cè)試環(huán)境維護(hù)管理方面的工作,bugzilla和Testlink也該升級(jí)了,找了臺(tái)機(jī)器重新安裝這兩個(gè)軟件,先試試;順帶整理相關(guān)安裝文檔給測(cè)試人員進(jìn)行安裝學(xué)習(xí)并錄像,便于以后要用或培訓(xùn)時(shí)可以拿出來(lái)分享。放在這里希望對(duì)測(cè)試新手有幫助。
參考資料:http://3708841.blog.51cto.com/3698841/1020932
安裝環(huán)境: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安裝的相關(guān)組件包:DBD-mysql-4.0.22.tar.gz
二、卸載linux安裝后自動(dòng)安裝上的mysql和httpd所有相關(guān)包,具體如下:
1. 用下面命令查看系統(tǒng)自動(dòng)安裝的mysql和http相關(guān)的包有哪些
rpm –qa|grep mysql
rpm –qa|grep http
2. 用下面命令刪除系統(tǒng)自動(dòng)安裝的mysql和http的包
3. rpm -e –nodeps mysql已經(jīng)安裝的文件包名
三、安裝mysql并創(chuàng)建bugzilla數(shù)據(jù)庫(kù)
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
安裝前確認(rèn)系統(tǒng)是否安裝了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)初始化數(shù)據(jù)庫(kù)
# /data/mysql/scripts/mysql_install_db --basedir=/data/mysql/ --user=mysql --datadir=/data/db/mysql_data/
4)創(chuàng)建配置文件
#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)后臺(tái)啟動(dòng)
# 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內(nèi)容,追加如下內(nèi)容
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自啟動(dòng)服務(wù)
# 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
用#注釋掉文件內(nèi)容,增加如下內(nèi)容
/data/mysql/lib
# ldconfig -v |grep mysql
/data/mysql/lib:
libmysqlclient.so.18 -> libmysqlclient_r.so.18.0.0
7)為mysql數(shù)據(jù)庫(kù)root用戶設(shè)置密碼
# 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;
增加遠(yuǎn)程登錄權(quán)限
刪除匿名用戶:
delete from user where user=' ';
設(shè)置所有root密碼
update user set password=password( "qwe123") where user= "root";
4. 創(chuàng)建bugzilla數(shù)據(jù)庫(kù)和用戶
1)創(chuàng)建數(shù)據(jù)庫(kù)bugs
create database bugs;
show databases;
use bugs;
2)創(chuàng)建用戶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自啟動(dòng)腳本
#cp /data/apache2/bin/apachectl /etc/init.d/httpd
#vi /etc/init.d/httpd
在第三行添加以下兩行內(nèi)容
#chkconfig:345 85 15
#description: Start and stops the Apache HTTP Server.
[root@localhost opt]#chkconfig httpd on
3. 啟動(dòng)HTTP服務(wù)
[root@localhost opt]#service httpd start
安裝完畢,啟動(dòng)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所需模塊
由于默認(rèn)的perl安裝包缺少一些bugzilla需要的模塊,所以需要補(bǔ)充一些模塊,最好是在線進(jìn)行,不要一個(gè)一個(gè)的自己安裝。以root身份運(yùn)行在聯(lián)網(wǎng)情況下用以下命令安裝所需的最少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
再次執(zhí)行安裝相關(guān)包命令
# /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
根據(jù)數(shù)據(jù)庫(kù)的實(shí)際情況修改如下參數(shù):
$db_name = 'bugs';
$db_user = 'bugs';
$db_pass = '123456';
$db_port = 3306;
$db_sock = '/var/lib/mysql/mysqld.sock';
$index_html = 1;
4. 配置啟動(dòng)apache
在 httpd.conf 中添加(或者去除注釋)以下這一行:
AddHandler cgi-scrīpt .cgi
到 httpd.conf 中 DirectoryIndex 那一行,修改為:
DirectoryIndex index.html index.html.var index.cgi
指定Bugzilla的訪問(wèn)目錄,在最后添加:
<Directory /data/apache2/htdocs/bugzilla>
AddHandler cgi-script .cgi
Options +Indexes +ExecCGI
DirectoryIndex index.cgi
AllowOverride Limit FileInfo Indexes
</Directory>
5. 安裝bugzilla數(shù)據(jù)庫(kù)配置和文件權(quán)限設(shè)置
#cd /data/apache2/htdocs/bugzilla
#./checksetup.pl
開始自動(dòng)安裝bugzilla數(shù)據(jù)庫(kù)表并設(shè)置管理員賬號(hào)
# 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,用剛才設(shè)置的管理員賬號(hào)登陸即可。
本文資料來(lái)源:http://zh.wikipedia.org/wiki/Ruby_on_Rails
簡(jiǎn)介
Ruby on Rails 是一個(gè)可以使你開發(fā),部署,維護(hù) web 應(yīng)用程序變得簡(jiǎn)單的框架。
Ruby on Rails,簡(jiǎn)稱Rails,是一個(gè)使用Ruby語(yǔ)言寫的開源Web應(yīng)用框架,它是嚴(yán)格按照MVC結(jié)構(gòu)開發(fā)的。它努力使自身保持簡(jiǎn)單,來(lái)使實(shí)際的應(yīng)用開發(fā)時(shí)的代碼更少,使用最少的配置。
Ruby on Rails是一種結(jié)合Ruby語(yǔ)言與Rails平臺(tái)的一種網(wǎng)頁(yè)編程語(yǔ)言,Ruby語(yǔ)言以自然、簡(jiǎn)潔、快速著稱,全面支持面向?qū)ο蟪绦蛟O(shè)計(jì),而Rails則是Ruby廣泛應(yīng)用方式之一,在Rails平臺(tái)上設(shè)計(jì)出一套獨(dú)特的MVC開發(fā)架構(gòu),采取模型(Model)、外觀(View)、控制器(Controller)分離的開發(fā)方式,不但減少了開發(fā)中的問(wèn)題,更簡(jiǎn)化了許多繁復(fù)的動(dòng)作。
Rails的設(shè)計(jì)原則包括“不做重復(fù)的事”(Don't Repeat Yourself)和“慣例優(yōu)于設(shè)置”(Convention Over Configuration)。來(lái)歷
Ruby的作者于1993年2月24日開始編寫Ruby,直至1995年12月才正式公開發(fā)布于fj(新聞組)。之所以稱為Ruby,是因?yàn)镻erl的發(fā)音與6月的誕生石pearl(珍珠)相同,因此Ruby以7月的誕生石ruby(紅寶石)命名。
2004年7月,Rails的創(chuàng)始人大衛(wèi)•海納梅爾•韓森從37signals公司的項(xiàng)目管理工具Basecamp里面分離出Ruby on Rails,并且以開源方式發(fā)布。
Rails在發(fā)布以后的短短的時(shí)間內(nèi)就迅速獲得很多開發(fā)人員歡迎,大衛(wèi)認(rèn)為這歸功于Rails設(shè)計(jì)為opinionated software。Rails當(dāng)中有很多規(guī)矩從一開始就按照David的意見(jiàn)制定好了,所以在Rails上開發(fā)應(yīng)用程序時(shí),開發(fā)人員可以專注于應(yīng)用程序自 身的設(shè)計(jì),省卻那些花在了解及配置基礎(chǔ)框架上面的時(shí)間。這也正是Rails很重要的精神“約定優(yōu)于配置”,開發(fā)人員遵照Rails本身的慣例便可以省卻配置組態(tài)檔的時(shí)間;此外,Rails雖然強(qiáng)調(diào)慣例的重要及便利性,但針對(duì)不同的需求,Rails也提供修改的空間讓開發(fā)人員可以進(jìn)行自定義的組態(tài)。運(yùn)作模式
Rails框架是以固定的命名習(xí)慣來(lái)自動(dòng)判斷整個(gè)架構(gòu),默認(rèn)下會(huì)將網(wǎng)址分析成http://domain-name/ControllerName /ActionName/Attribute/ 然后運(yùn)行目標(biāo)Controller中的Action,并取出指定的View(視圖)回傳給瀏覽器顯示。面對(duì)數(shù)據(jù)庫(kù)則以Model(模塊)的形式,借由Active Record作為與數(shù)據(jù)庫(kù)之間的傳輸接口。Rails的MVC架構(gòu)
Ruby on Rails的模型-視圖-控制器架構(gòu)由以下各部分組成:
模型
模型包含著應(yīng)用的狀態(tài),狀態(tài)可能是臨時(shí)的也可能是長(zhǎng)久性保存在數(shù)據(jù)庫(kù)中的。需要注意的是模型不僅包含數(shù)據(jù),而且包含數(shù)據(jù)代表的邏輯。在Rails中,模型通常是由一些代表關(guān)系數(shù)據(jù)庫(kù)中RDBMS表的類組成的。
在RoR中,模型類是通過(guò)Active Record模式進(jìn)行處理的。一般來(lái)說(shuō),程序員要做的是繼承ActiveRecord類,同時(shí)程序會(huì)自動(dòng)計(jì)算出要使用哪個(gè)RDBMS表,這個(gè)表有哪些列。表與表之間的關(guān)系通過(guò)簡(jiǎn)單的命令來(lái)指明。
控制器
控制器將用戶界面和數(shù)據(jù)模型關(guān)聯(lián)起來(lái),并充當(dāng)協(xié)調(diào)運(yùn)作的角色。它接收各種用戶操作,更新數(shù)據(jù)模型,并用合適的view展示結(jié)果給用戶。像他的名字一樣,可以說(shuō)應(yīng)用的主要控制中心就是各個(gè)控制器。
視圖
View負(fù)責(zé)根據(jù)Model中的數(shù)據(jù)顯示用戶界面。作為web應(yīng)用,Rails里的View通常是生成整個(gè)或者部分網(wǎng)頁(yè)。當(dāng)然可以是XML或者甚至是JavaScript代碼。表現(xiàn)為使用內(nèi)嵌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實(shí)現(xiàn)了Rails的對(duì)象關(guān)系映射。
控制器和視圖:ActionPack
ActionController是Rails中的控制器,提供各種方法供用戶操作使用。
ActionView是Rails中的視圖,負(fù)責(zé)展現(xiàn)用戶界面。
常用實(shí)用工具:ActiveSupport
ActiveSupport包提供一些工具和支持代碼。
處理郵件:ActionMailer
ActionMailer用來(lái)發(fā)送和接收email。
Web服務(wù):ActionWebService
ActionWebService來(lái)提供SOAP和XML-RPC支持。需要注意的是,Rails趨向使用更加簡(jiǎn)單明了的REST方式web服務(wù)而不再提倡SOAP格式的web服務(wù)。ActionWebServices在未來(lái)的版本里面會(huì)逐步淡出。
網(wǎng)絡(luò)資源:ActionResource
用REST對(duì)Web服務(wù)提供了優(yōu)秀的支持。這種風(fēng)格的Web服務(wù)使用指定的資源。Rails中的AJAX
AJAX(異步JavaScript與XML)是一種異步傳輸接口,可以借由瀏覽器使用JavaScript和XML來(lái)處理傳輸請(qǐng)求,而將Web服務(wù)器作為后臺(tái)來(lái)處理,這樣無(wú)須載入額外的網(wǎng)頁(yè)。Rails自帶有Prototype包 來(lái)實(shí)現(xiàn)這個(gè)技術(shù)。Ajax已經(jīng)和Ruby on Rails結(jié)合在了一起成為了一個(gè)新的系統(tǒng)叫做“Ajax on Rails”。Rails提供一些助手工具來(lái)更方便地實(shí)現(xiàn)AJAX應(yīng)用。 Rails提供了一些Helper,可以在服務(wù)器一端用純Ruby語(yǔ)言生成給瀏覽器用的JavaScript代碼,從而讓Rails的開發(fā)者不需掌握 JavaScript就可以簡(jiǎn)單方便的開發(fā)出AJAX的應(yīng)用。Rails和Web服務(wù)
稍早的版本的Rails中提供了ActionWebService作為開發(fā)XML-RPC和SOAP的web服務(wù)的基礎(chǔ)。但是最近的Rails 1.2更加傾向于是用REST方式的web服務(wù),而ActionWebService在Rails 2.0中作為plugin而不再是rails核心的一部分。Web服務(wù)器支持
對(duì)于開發(fā)和測(cè)試來(lái)說(shuō),一個(gè)很輕量的WEBrick網(wǎng)頁(yè)服務(wù)器已經(jīng)被包含在了Ruby中,常被用來(lái)作為應(yīng)用服務(wù)器。而對(duì)于生產(chǎn)應(yīng)用,常推薦使用帶FastCGI的Apache或者Lighttpd,但任何支持CGI或者FastCGI的網(wǎng)頁(yè)服務(wù)器都可以使用。在Apache上,mod_ruby也可以考慮用來(lái)提高性能。數(shù)據(jù)庫(kù)支持
使用Rails的架構(gòu)開發(fā)網(wǎng)絡(luò)應(yīng)用一般都使用數(shù)據(jù)庫(kù),所以推薦使用一個(gè)關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)來(lái)進(jìn)行數(shù)據(jù)存儲(chǔ),若不能運(yùn)行一個(gè)關(guān)系數(shù)據(jù)庫(kù)服務(wù)器,Rails也支持SQLite庫(kù)。很多關(guān)系數(shù)據(jù)庫(kù)系統(tǒng)都支持,包括MySQL、PostgreSQL、SQLite、IBM DB2、Oracle和SQL Server。系統(tǒng)要求
• Ruby語(yǔ)言
• Web服務(wù)器,如Apache、lighttpd等。
• FastCGI,或者M(jìn)ongrel為了提高效率
• 數(shù)據(jù)庫(kù)和驅(qū)動(dòng)程序
集成開發(fā)環(huán)境
開發(fā)用的IDE有:Eclipse , IntelliJ, Aptana。類似的框架
• CakePHP
• Django
• TurboGears
• CodeIgniter
前段時(shí)間有不少獵頭來(lái)電詢問(wèn)是否考慮換工作,我一一回絕;因?yàn)樵谀壳肮疽瓿傻哪繕?biāo)目前完成了1個(gè),正在進(jìn)行中1個(gè),剩余1個(gè)還沒(méi)有開始;其中一個(gè)獵
頭問(wèn)我為什么來(lái)這家公司,主要是因?yàn)槲业睦习宥疁y(cè)試這個(gè)工種和工作,非常實(shí)實(shí)在在的支持和重視測(cè)試部門。
非常感謝今年的績(jī)效考核工作,增加了一項(xiàng)考核指標(biāo):生產(chǎn)環(huán)境bug修復(fù)及時(shí)率,讓我有機(jī)會(huì)學(xué)習(xí)和學(xué)會(huì)如何用這項(xiàng)指標(biāo)來(lái)驅(qū)動(dòng)開發(fā)的工作和檢查測(cè)試工作成
果,感謝我的老板給我的工作指導(dǎo)和好的想法,感謝在工作中時(shí)常提醒我做重要事情并給我很多工作建議的mac。
今天拿出來(lái)和同行分享,希望對(duì)大家有幫助。^_^。
點(diǎn)子1:生產(chǎn)環(huán)境bug的review會(huì)議
我們有固定的時(shí)間每周四上午,花1小時(shí)和開發(fā)及管理層過(guò)生產(chǎn)環(huán)境沒(méi)有處理的P0、P1、P2問(wèn)題,時(shí)間來(lái)得及會(huì)把P3也過(guò)一過(guò);主要讓大家知道目前生產(chǎn)環(huán)境
都有哪些問(wèn)題,處理進(jìn)展如何,什么時(shí)候能解決,解決這些問(wèn)題有什么困難。連續(xù)開了4周,有一些進(jìn)步,還需繼續(xù)引導(dǎo)。
點(diǎn)子2:每周過(guò)一遍生產(chǎn)環(huán)境bug修復(fù)及時(shí)率數(shù)據(jù)
給大家分享一下上半年的數(shù)據(jù),還沒(méi)有進(jìn)行更深入的分析。從數(shù)據(jù)上可以看出測(cè)試漏出去不少問(wèn)題,我在想:為什么會(huì)漏出去這些問(wèn)題?在哪些環(huán)節(jié)給漏出去的?最近親自在跟兩個(gè)重要項(xiàng)目,感受很多,明天準(zhǔn)備寫其中一個(gè)項(xiàng)目的項(xiàng)目測(cè)試總結(jié)在組內(nèi)分享,有一個(gè)還在背后默默關(guān)注。
在深圳工作1年了,每當(dāng)組內(nèi)的測(cè)試人員出現(xiàn)一些很常識(shí)的問(wèn)題和面試過(guò)的測(cè)試人員回答的一些問(wèn)題;非常明顯的感覺(jué)到南北測(cè)試人員工作水平和對(duì)測(cè)試工作理
解的差異,在深圳想找到有共鳴的人好難啊。
今天寫這個(gè)文章,只是把工作中的一些片段和場(chǎng)景與大家分享,希望測(cè)試新人在做測(cè)試工作中多一些執(zhí)著、多一些思考和多問(wèn)為什么?
故事1:搜索列表頁(yè)的一個(gè)神奇bug
問(wèn)題現(xiàn)象:一個(gè)已經(jīng)測(cè)試通過(guò)并上線的商品搜索列表頁(yè),頁(yè)面功能很簡(jiǎn)單、有搜索的篩選項(xiàng)、商品展示、商品翻頁(yè)功能。通常大家在測(cè)試翻頁(yè)功能時(shí),基本測(cè)
試點(diǎn)都是測(cè)試上一頁(yè)、下一頁(yè)、具體頁(yè)數(shù)、頁(yè)數(shù)輸入框(正常、異常);有意思的是這個(gè)搜索列表結(jié)果有500多個(gè)商品1百頁(yè),我就一直點(diǎn)擊下一頁(yè)、一頁(yè)一頁(yè)的瀏
覽商品,當(dāng)瀏覽到第24頁(yè)時(shí),發(fā)現(xiàn)瀏覽器訪問(wèn)報(bào)錯(cuò)提示連接不上;訪問(wèn)其它網(wǎng)站或該網(wǎng)站的其它功能就正常。
問(wèn)題分析:此處的點(diǎn)擊下一頁(yè)的翻頁(yè)程序代碼,每翻一頁(yè),URL請(qǐng)求就會(huì)多加一串字符“swIFRPIDUwMH0gcHJpY2VfQ05ZOjUwMDxKaW1pPnByaWNlX0NOWTp7MCBUTyA1MDB9IHByaWNlX0NOWTo1MDA8SmltaT5wcmljZV9DTlk6ez
AgVE8gNTAwfSBwcmljZV9DTlk6NTAwPEppbWk+cHJpY2VfQ05ZOn”;這串字符出現(xiàn)6次以上后,url訪問(wèn)長(zhǎng)度超過(guò)2k瀏覽器請(qǐng)求就會(huì)參數(shù)丟失,導(dǎo)致頁(yè)面訪
問(wèn)報(bào)錯(cuò)
5個(gè)思考點(diǎn):
思考1:為什么測(cè)試的時(shí)候沒(méi)有發(fā)現(xiàn)呢?其中一個(gè)測(cè)試人員說(shuō),這個(gè)場(chǎng)景很少有人想到。
思考2:測(cè)試人員如何能測(cè)試出這種問(wèn)題呢?我在想,聰明的辦法那就是對(duì)設(shè)計(jì)實(shí)現(xiàn)熟悉了解,了解開發(fā)是如何實(shí)現(xiàn)的,應(yīng)該可以想出來(lái)這個(gè)地方會(huì)有問(wèn)題。另
一個(gè)辦法就是增加這樣的測(cè)試點(diǎn),用自動(dòng)化測(cè)試腳本來(lái)測(cè)試這種大數(shù)據(jù)量的功能極限測(cè)試。
思考3:對(duì)比其它網(wǎng)站,為什么別的網(wǎng)站沒(méi)有這種問(wèn)題呢?開發(fā)在設(shè)計(jì)上沒(méi)有考慮這種情況?
思考4:為什么開發(fā)沒(méi)有自測(cè)發(fā)現(xiàn)這個(gè)問(wèn)題?我在想,開發(fā)沒(méi)有考慮到URL會(huì)有問(wèn)題
思考5:我們?nèi)绾胃倪M(jìn)和提高呢?我在想,測(cè)試除了要補(bǔ)充測(cè)試用例;開發(fā)要整理出搜索結(jié)果列表頁(yè)的一些設(shè)計(jì)規(guī)范,同時(shí)要參考和同行對(duì)比;開發(fā)要對(duì)系統(tǒng)的
實(shí)現(xiàn)邏輯加強(qiáng)極限測(cè)試。
最后我想,還好這個(gè)場(chǎng)景不常見(jiàn),影響范圍沒(méi)有很大的殺傷力。
故事2:兩個(gè)bug還是1個(gè)bug
現(xiàn)象:一個(gè)問(wèn)題是:商品買滿打XX折,從購(gòu)物車進(jìn)入到訂單提交頁(yè)中,商品總結(jié)算金額顯示不正確;另一個(gè)問(wèn)題是:商品買滿減XX元,從購(gòu)物車進(jìn)入到訂單提
交頁(yè)中,商品總結(jié)算金額顯示不正確。開發(fā)認(rèn)為這是1個(gè)bug,因?yàn)槎际巧唐房偨Y(jié)算金額顯示不正確;我認(rèn)為是2個(gè)bug,因?yàn)槭莾蓚€(gè)不同的測(cè)試用例場(chǎng)景得出的問(wèn)
題,不能因?yàn)楝F(xiàn)象一樣就認(rèn)為是一個(gè)bug,同時(shí)懷疑代碼里面的處理邏輯是不一樣的。
分析:為什么這種問(wèn)題在我過(guò)去工作8年的公司和開發(fā)團(tuán)隊(duì),沒(méi)有開發(fā)管理人員認(rèn)為這類bug是1個(gè),而認(rèn)為是2個(gè);而這位開發(fā)管理人員認(rèn)為是1個(gè);我在
想:原因是這位開發(fā)管理人員很害怕bug?還是這位開發(fā)管理人員很不喜歡看到很多的bug,因?yàn)榻裉煳覀儨y(cè)試兩個(gè)頁(yè)面,4小時(shí)報(bào)了35個(gè)bug讓人心情很不爽?答
案不知道,只要解決就好。
5個(gè)思考點(diǎn)?
思考1:站在用戶角度,如果是用戶發(fā)現(xiàn)的,我們告訴用戶是1個(gè)問(wèn)題?用戶能明白嗎?
思考2:站在開發(fā)設(shè)計(jì)角度,需要知道那個(gè)地方的實(shí)現(xiàn)邏輯都是一個(gè)類或方法嗎?即使是一個(gè)類或方法,當(dāng)參數(shù)不一樣時(shí)內(nèi)部處理邏輯一樣嗎?找個(gè)時(shí)間問(wèn)具體
寫代碼的開發(fā)人員問(wèn)問(wèn)就知道了?
思考3:下次碰到此類開發(fā)管理人員該如何相處?我在想:只要改了就行,不能和這類人去糾結(jié)1個(gè)還是2個(gè),因?yàn)榈啦煌荒芾斫猓坏菧y(cè)試工作總結(jié)時(shí)要算成
2個(gè)。
思考4:為什么不能報(bào)成1個(gè)bug,因?yàn)楫?dāng)把多個(gè)bug放到1個(gè)bug里報(bào)時(shí),如何有效跟蹤?(比如:開發(fā)修改轉(zhuǎn)測(cè)后,測(cè)試驗(yàn)證有一部分沒(méi)有修改好,這個(gè)bug會(huì)
來(lái)回修復(fù)、打開);如何有效做bug分析?(測(cè)試任務(wù)結(jié)束后,如何分類分析bug的錯(cuò)誤類型及開發(fā)工作改進(jìn)建議數(shù)據(jù)分析)。
思考5:為什么這么明顯的bug開發(fā)沒(méi)有自測(cè)出來(lái)?開發(fā)做自測(cè)了嗎?這樣的開發(fā)管理人員管理的開發(fā)團(tuán)隊(duì),轉(zhuǎn)測(cè)出現(xiàn)這樣低級(jí)的bug,消耗了多少不必要的測(cè)試
成本(測(cè)試環(huán)境部署+bug報(bào)告跟蹤和驗(yàn)證時(shí)間)和開發(fā)修復(fù)版本成本?降低了多少工作效率?這類bug有多少?
最后我想:我要通過(guò)什么方法來(lái)改變?
生活還在繼續(xù)、工作也在繼續(xù),世界之大、無(wú)奇不有,每天都有不同的見(jiàn)聞和收獲,活著真好!
今天晚上在家喝著紅酒和可樂(lè)參雜的酒,味道非常好;好想退休啊!最近2周心情欠佳,主要是工作上的事情;工作那么久,遇到自己不能接受的事情我還是控制不了自己的情緒;今天靜心想想最終還是開發(fā)惹的禍,開發(fā)質(zhì)量非常非常的差,改個(gè)文字也能把功能改的不能用,真是無(wú)語(yǔ);目前的開發(fā)團(tuán)隊(duì)能力水平真是讓人堪憂、最倒霉和郁悶的是我的測(cè)試團(tuán)隊(duì);從本周開始將要開始收集開發(fā)轉(zhuǎn)測(cè)版本次數(shù)及bug的情況、從本周開始將要收集開發(fā)有多少延期轉(zhuǎn)測(cè)的情況。
測(cè)試管理之前有寫過(guò)2篇博文,今天給大家分享今年的最新版本,希望對(duì)大家有幫助!
做為管理者,每次給員工做工作績(jī)效考核都會(huì)遇到這樣或那樣的問(wèn)題,如:憑什么那位員工得分高?如何通過(guò)數(shù)據(jù)更客觀的對(duì)員工的工作做考核?為什么某些人做的多,問(wèn)題很多,結(jié)果不好?
在最近一次面試中,我問(wèn)一個(gè)面試人:“如果你所管理的員工出現(xiàn)這么個(gè)現(xiàn)象:她做了很多工作,但問(wèn)題很多,結(jié)果不好?你怎么看?”他回答到“說(shuō)明這個(gè)人能力不行?。?!”我說(shuō):“這里面管理者有問(wèn)題”。。。。。。。。。。。
本文中所述的測(cè)試主要指軟件領(lǐng)域的測(cè)試,與核武器的測(cè)試無(wú)關(guān)。
測(cè)試是什么?它如同醫(yī)學(xué)、教學(xué)一樣是個(gè)獨(dú)立的、專業(yè)的行業(yè)。測(cè)試人員之于軟件系統(tǒng)猶如醫(yī)生之于患者,教師之于學(xué)生。醫(yī)生的職責(zé)是治病救人,教師的職責(zé)是教書育人。
測(cè)試這個(gè)行業(yè)的從業(yè)人員是保證軟件實(shí)現(xiàn)的完整性和正確性。當(dāng)然:雖然患者的身體健康與否取決于患者自己,但一個(gè)優(yōu)秀的醫(yī)生除了有精湛的醫(yī)術(shù)外,也會(huì)用各種方法渠道讓患者明白如何預(yù)防疾病發(fā)生。雖然學(xué)生的成長(zhǎng)也是取決于學(xué)生自己,但一個(gè)優(yōu)秀的教師除了有精湛的教書能力外,也會(huì)用各種方法渠道讓學(xué)生明白做人的道理。所以,雖然軟件質(zhì)量的好壞取決于實(shí)現(xiàn)軟件的人,但是一個(gè)優(yōu)秀的測(cè)試人員除了優(yōu)精湛的測(cè)試技能外,還會(huì)用各種方法渠道讓實(shí)現(xiàn)者明白如何做出一個(gè)高質(zhì)量的軟件產(chǎn)品。
現(xiàn)在言歸正傳,一個(gè)測(cè)試人員之路是什么?前面說(shuō)了,測(cè)試是一個(gè)行業(yè),所謂行行出狀元,測(cè)試行業(yè)的狀元是什么樣的呢?繼續(xù)細(xì)分,如同醫(yī)療行業(yè)有內(nèi)科、外科、腦科、心血管科等等各種專業(yè)領(lǐng)域;測(cè)試行業(yè)本身也有各種專業(yè)領(lǐng)域:功能、性能、安全、可用性等等。每個(gè)專業(yè)領(lǐng)域的狀元一定是在這個(gè)專業(yè)領(lǐng)域上有精湛造詣的人。
到這里,大家一定會(huì)有疑問(wèn),做到什么樣才叫有精湛造詣呢?現(xiàn)在講個(gè)大家耳熟能詳?shù)墓适?span lang="EN-US">: 魏文王問(wèn)名醫(yī)扁鵲說(shuō):“你們家兄弟三人,都精于醫(yī)術(shù),到底哪一位最好呢?” 扁鵲答說(shuō):“長(zhǎng)兄最好,中兄次之,我最差。” 文王再問(wèn):“那么為什么你最出名呢? 扁鵲答說(shuō):“我長(zhǎng)兄治病,是治病于病情發(fā)作之前。由于一般人不知道他事先能鏟除病因,所以他的名氣無(wú)法傳出去,只有我們家的人才知道。我中兄治病,是治病于病情初起之時(shí)。一般人以為他只能治輕微的小病,所以他的名氣只及于本鄉(xiāng)里。而我扁鵲治病,是治病于病情嚴(yán)重之時(shí)。一般人都看到我在經(jīng)脈上穿針管來(lái)放血、在皮膚上敷藥等大手術(shù),所以以為我的醫(yī)術(shù)高明,名氣因此響遍全國(guó)。”
首先:若想成為某個(gè)測(cè)試領(lǐng)域的專家,個(gè)人認(rèn)為應(yīng)具備如扁鵲之力,除了要精通于自身領(lǐng)域內(nèi)的知識(shí),對(duì)系統(tǒng)也了如指掌,快速看到問(wèn)題現(xiàn)象,同時(shí)也能夠快速通過(guò)現(xiàn)象找到問(wèn)題本質(zhì),最后用最簡(jiǎn)單最有效的解決方案來(lái)根治問(wèn)題。比如在經(jīng)脈上針灸、在皮膚上敷藥。如果要大動(dòng)干戈、開腸破肚解決問(wèn)題,那是普通水平。如果是頭痛醫(yī)頭腳痛醫(yī)腳,那是庸醫(yī);呵呵。
其次:小隱隱于野。若想成為某個(gè)測(cè)試領(lǐng)域的大師的話,則需具備扁鵲二哥的能力,當(dāng)系統(tǒng)還在設(shè)計(jì)的時(shí)候,就能夠找到致病因素,用簡(jiǎn)單高效的手段鏟除病因。也就是要具備系統(tǒng)分析師的能力,對(duì)設(shè)計(jì)的功能、性能、易用性、可靠性、可維護(hù)性、可移植性、安全性、可測(cè)性等各方面能夠起到指導(dǎo)作用。知易行難,要做到如此很考驗(yàn)人的毅力。
最后:大隱隱于市。若想成為測(cè)試領(lǐng)域的隱士的話,則需具備扁鵲大哥的能力,能夠在軟件系統(tǒng)創(chuàng)造前期,就將問(wèn)題防范于未然。要做到這樣,除了需要有精湛的技術(shù)外,還需具備的是對(duì)這個(gè)行業(yè)的熱愛(ài),具備幫助他人成功的心態(tài)。并且要有甘于寂寞、淡泊名利的心境,因?yàn)閹缀鯖](méi)有人知道你的存在,更少人懂你。
接下來(lái)我們?cè)僦v講TL(Techlead),
TL如同主任醫(yī)生或者碩士生導(dǎo)師,他不僅在某個(gè)領(lǐng)域內(nèi)有很深的造詣同時(shí)也非常有熱情繼續(xù)在這個(gè)領(lǐng)域中深入,并且也愿意帶領(lǐng)小部分人一起來(lái)探索、研究、創(chuàng)新。套用前面的故事,即如同扁鵲三兄弟的父親。據(jù)說(shuō)他將自己的行醫(yī)之道總結(jié)了2本秘籍,一本是《醫(yī)道》、一本是《防道》,根據(jù)扁鵲三兄弟的天資,分別傳授了給他們。扁鵲三兄弟的功力也是長(zhǎng)年跟著醫(yī)術(shù)高明的父親看病實(shí)踐及理論教導(dǎo)而日益增長(zhǎng)的。所以TL不僅自己能夠獨(dú)立做戰(zhàn),也能夠帶領(lǐng)人共同做戰(zhàn)的leader。
以上是對(duì)P路線的闡釋
—————————————————————————————————————–
以下是對(duì)M路線的闡釋
前面說(shuō)了測(cè)試工作本身是為了保證軟件產(chǎn)品的正確性完整性。但在研發(fā)體系運(yùn)作中,測(cè)試團(tuán)隊(duì)或者測(cè)試部門的建立則是為了提升研發(fā)效率。
先闡釋下,如何來(lái)理解它是個(gè)效率部門。這里做一個(gè)簡(jiǎn)單的模型,模型的前提是:1、先把需求設(shè)計(jì)階段拋開,單從開發(fā)和測(cè)試來(lái)說(shuō);2、產(chǎn)量和質(zhì)量是相當(dāng)?shù)摹<僭O(shè)一個(gè)場(chǎng)景:如果1個(gè)人做1個(gè)產(chǎn)品需要15天, 2個(gè)人做的話,就能將原先串行的工作變成并行,這樣能夠縮短系統(tǒng)上線工期。變化如下圖1所示。
圖1
前提假設(shè)都不變的情況下,如果變成如圖2的話,那么這個(gè)研發(fā)體系實(shí)在不咋地。
圖2
前提假設(shè)都不變的情況下,如果變成圖3的話,那么這個(gè)研發(fā)體系則比較優(yōu)秀,因?yàn)椴粌H開發(fā)和測(cè)試本身的工期都得到了縮短,總工期也得到了大大縮短,并且還降低了總?cè)肆Τ杀尽?span lang="EN-US">
圖3
以上幾種體系的建立實(shí)施都離不開管理者,即是我們所說(shuō)的M。下面我們就來(lái)說(shuō)說(shuō)作為測(cè)試部門的M應(yīng)該做哪些事。
一、 M得具備如上面模型中談到的測(cè)試體系建設(shè)及研發(fā)體系建設(shè)的能力。要有系分或者架構(gòu)師的視角來(lái)優(yōu)化測(cè)試體系和研發(fā)體系。
二、 M得有Loadbalance的功能。測(cè)試部門作為研發(fā)部門中的公共資源部門,需要起到削峰填谷的作用,合理得分配和調(diào)度測(cè)試資源是M的基本職責(zé)。
三、 M得是個(gè)優(yōu)秀的HR。招聘策略、培訓(xùn)體系、員工關(guān)懷、員工成長(zhǎng)體系乃至離職管理都得搞定。這也是基本職責(zé)。
四、 M得是個(gè)指揮家。需要指揮協(xié)調(diào)團(tuán)隊(duì)中各種專家為同一首交響曲而合作共同演奏。
五、 M得是個(gè)司令官。戰(zhàn)略可大可小,時(shí)刻得記得給團(tuán)隊(duì)一個(gè)方向和目標(biāo)。
六、 M得是個(gè)隊(duì)長(zhǎng)。戰(zhàn)術(shù)的落地,跟蹤執(zhí)行、績(jī)效review等。就公司來(lái)說(shuō),這對(duì)保證公司業(yè)績(jī)完成是非常重要的內(nèi)容
七、 M得是個(gè)外交官。要獲得客戶、員工、老板、同事等的支持和合作,沒(méi)點(diǎn)外交能力還真搞不定。
八、 M得是個(gè)銷售員。要將自己的產(chǎn)品、思想銷售給有需要的人,甚至那些還未意識(shí)到自己有需要的人。必要時(shí)還得盜夢(mèng)空間下。
另外,M還得懂點(diǎn)心理學(xué)、經(jīng)濟(jì)學(xué)、社會(huì)學(xué)、哲學(xué)等等,總之各種學(xué)科都略懂肯定沒(méi)錯(cuò)啦。
《大學(xué)》中有談到一個(gè)人從內(nèi)在修養(yǎng)到外發(fā)事業(yè)的完成是這樣8個(gè)順序:格物、致知、誠(chéng)意、正心、修身、齊家、治國(guó)、平天下。
大致意思是了解事物原來(lái)才能擁有知識(shí),心意才會(huì)真誠(chéng),思想才會(huì)端正,然后才能提高自身的品德修養(yǎng),自身品德修養(yǎng)高了才能管理好家庭、治理好國(guó)家、使天下太平。
所以說(shuō)難,M真的很難,要懂的知識(shí)很多,要想的事很多。說(shuō)容易也容易,其實(shí)只要誠(chéng)意正心,心無(wú)旁騖,真心為客戶好、為員工好、為公司好,用心將工作內(nèi)容做好就好。
—————————————————————————————————————–
以下內(nèi)容獻(xiàn)給在P和M中糾結(jié)徘徊的同學(xué)們
很多同學(xué)格物致知到了P6、P7后就會(huì)猶豫自己是該繼續(xù)走P還是改走M,也有的同學(xué)轉(zhuǎn)了M后,也還糾結(jié),要么感覺(jué)沒(méi)變化,要么感覺(jué)不做P的事,心里沒(méi)底。
這里我將我的理解分享給大家,僅供參考。我認(rèn)為打造一個(gè)團(tuán)隊(duì)如同打造一座房子,P是房子的頂梁柱,而M是房子的橫梁。如下圖所示,圖中的P和M的數(shù)字只是為了舉例方便,千萬(wàn)不要生搬硬套。
……
……
……
……
……
圖4
圖4中可以看出,如果要更上一層樓,就要有更高的P和更高的M。那么做為已有的P和M應(yīng)該怎么到更高的數(shù)字呢?以圖4中的數(shù)字為例,P6若要晉升到P7,那么做的事一定是能夠讓團(tuán)隊(duì)的技術(shù)能力或工作產(chǎn)出上一個(gè)臺(tái)階的。你可以選擇做其他P7正在做的事,但實(shí)際上因?yàn)槊總€(gè)人的工作機(jī)會(huì)和成長(zhǎng)路線都不盡相同,所以很難去模仿他人,因此更多的時(shí)候還是要觸類旁通,自己創(chuàng)新。P8、P9等等以此類推。
同理,M要從M2晉升到M3,則是要讓團(tuán)隊(duì)在更高的一層樓上高效得運(yùn)作。每層樓的人數(shù)并不是晉升的關(guān)鍵,但是在2樓運(yùn)作還是在3樓運(yùn)作則是關(guān)鍵。
看到這里,大家肯定有疑問(wèn)了,說(shuō)的簡(jiǎn)單啊,可真實(shí)情況咋那么糾結(jié)呢。這個(gè)說(shuō):“我是P,可是做了一堆M的事。”另外一個(gè)又說(shuō):“我是M,可也做了一堆P的事。”到底怎么回事呢?其實(shí)這就對(duì)了,糾結(jié)說(shuō)明你又上進(jìn)又有責(zé)任感。為什么這么說(shuō)呢?所謂世上不如意事十有八九?,F(xiàn)實(shí)中很難有M和P都匹配得非常完美的情況。仍舊用圖4舉例:如果你是P7,可是團(tuán)隊(duì)中又沒(méi)有M3,你又希望團(tuán)隊(duì)進(jìn)步,希望其他成員用你的思想、方法、理論在3樓運(yùn)作,怎么辦?要招聘,更要承擔(dān)M3的很多責(zé)任。同樣,如果你是M2,你非常希望你的團(tuán)隊(duì)能夠更上一層樓,但是又沒(méi)有P7,怎么辦?在招聘未果的情況下,你就不得不承擔(dān)很多P7應(yīng)該做的事了。以此類推。
只要社會(huì)在發(fā)展、公司在發(fā)展,樓總是需要越建越高的,而人才總是越來(lái)越稀缺的。所以我們每個(gè)人除了要有自己的目標(biāo)自己的夢(mèng)想外,也都得接受現(xiàn)實(shí)的不完美。人生短暫,讓我們一起享受在實(shí)現(xiàn)目標(biāo)和夢(mèng)想過(guò)程中的種種挑戰(zhàn)吧!一起為高樓的建設(shè)而努力吧!
本文與在測(cè)試行業(yè)道路上孜孜不倦追求卓越的同行們共勉。