變異
測試是通過改變被測對象的源碼,比較
單元測試用例的結果,來判斷單元測試用例的質量。了解不是很深,只能粗粗介紹,歡迎大家補充。
網上發現變異測試的資料很少,大多是學術論文為主。
變異測試的公主要是mujava與
muclipse,muclipse是基于mujava的,并且集成于eclipse上的插件,官網介紹
mujava http://cs.gmu.edu/~offutt/mujava/
muclipse http://muclipse.sourceforge.net/index.php
根據官網一步步來,居然沒有成功,逐個改變參數摸索,終于能出結果了,所以寫下這邊
文章,希望減少大家研究的時間
1. 安裝muclipse
由于官網提供的下載url打不開,只好網上找個edu.ncsu.muclipse_1.3.0.jar下載,放入eclipse plugins目錄下,重新啟動eclipse,就算安裝上啦,eclipse的這種安裝方法真簡單。
2. 準備的測試案例
package demo1; public class Example { public int multiply(int a, int b) { return a * b; } } package demo1; public class ExampleTest { public void setUp() throws Exception { } public void tearDown() throws Exception { } public int testMultiply() { Example ex = new Example(); return ex.multiply(1, 1); } } |
3. 配置環境
1. 新建或者導入項目,下載extendedOJ.jar包,導入到Libraries
右擊project name -> properties ->
java build path -> Libraries -> Add External JARs, select it and click ok
in source tab, 可以修改output folder,就是編譯后的.class文件的地址,這里默認是bin
在本節中,我們將介紹一個例子,編寫自定義記錄器和
TestNG的方法。要編寫一個定制的記錄器類,我們的擴展類應實現IReporter接口。讓我們繼續前進,并創建一個示例使用自定義的記錄器。
創建一個
Java類為 SampleTest.java 在 C:\ > TestNG_WORKSPACE
import org.testng.Assert; import org.testng.annotations.Test; public class SampleTest { @Test public void testMethodOne(){ Assert.assertTrue(true); } @Test public void testMethodTwo(){ Assert.assertTrue(false); } @Test(dependsOnMethods={"testMethodTwo"}) public void testMethodThree(){ Assert.assertTrue(true); } } |
上述測試類的包含三個測試方法,其中testMethodOne 和 testMethodThree將通過在執行時,而testMethodTwo由通過一個falseBoolean的值Assert.assertTrue方法,它是用于在測試中的真值條件失敗。
創建自定義報告類
創建另一個新的類名為 CustomReporter.java 在 C:\ > TestNG_WORKSPACE
import java.util.List; import java.util.Map; import org.testng.IReporter; import org.testng.ISuite; import org.testng.ISuiteResult; import org.testng.ITestContext; import org.testng.xml.XmlSuite; public class CustomReporter implements IReporter{ @Override public void generateReport(List xmlSuites, List suites, String outputDirectory) { //Iterating over each suite included in the testfor (ISuite suite : suites) { //Following code gets the suite name String suiteName = suite.getName(); //Getting the results for the said suite Map<string, isuiteresult=""> suiteResults = suite.getResults(); for (ISuiteResult sr : suiteResults.values()) { ITestContext tc = sr.getTestContext(); System.out.println("Passed tests for suite '" + suiteName + "' is:" + tc.getPassedTests().getAllResults().size()); System.out.println("Failed tests for suite '" + suiteName + "' is:" + tc.getFailedTests().getAllResults().size()); System.out.println("Skipped tests for suite '" + suiteName + "' is:" + tc.getSkippedTests().getAllResults().size()); } } } } |
前面的的類實現org.testng.IReporter 接口。它實現了IReporter接口定義的方法GenerateReport。這個方法有三個參數:
第一個是xmlSuite,這是TestNG的測試XML正在執行中提到的列表套件
第二個是套件,其中包含一套測試執行后信息,該對象包含了所有的信息包,類,測試方法和測試執行結果。
第三的outputDirectory,報告將產生的輸出文件夾路徑,其中包含的信息。
創建 testng.xml
創建一個文件testng.xml 在 C:\ > TestNG_WORKSPACE 來執行測試用例
<?xml version="1.0" encoding="UTF-8"?> <suite name="Simple Reporter Suite"> <listeners> <listener class-name="CustomReporter" /> </listeners> <test name="Simple Reporter test"> <classes> <class name="SampleTest" /> </classes> </test> </suite> |
編譯SampleTest,CustomReporter類使用javac
C:\TestNG_WORKSPACE>javac CustomReporter.java SampleTest.java
運行 testng.xml.
C:\TestNG_WORKSPACE>java -cp "C:\TestNG_WORKSPACE" org.testng.TestNG testng.xml
驗證輸出
===============================================
Simple Reporter Suite
Total tests run: 3, Failures: 1, Skips: 1
===============================================
Passed tests for suite 'Simple Reporter Suite' is:1
Failed tests for suite 'Simple Reporter Suite' is:1
Skipped tests for suite 'Simple Reporter Suite' is:1
前面的例子顯示了一個簡單的自定義報告器,打印的數量在控制臺上對每個套件包含在上述的測試執行失敗,通過跳過測試。報告器主要是用于測試的執行,以生成最終的報告。擴展程序可以被用來生成XML,HTML,CHM,CSV或文本格式的文件,根據報告要求。
以前曾經寫了一篇博文談如何推廣
單元測試,最近有朋友問我如下的問題,因此便又寫了本文,閱讀時請綜合原來的博文。
問題:
有開發人員認為進行單元測試會花費大量時間來編寫
測試用例,因此他們做單元測試的意愿比較低,請問有何好的建議進行單元測試的改進?
解答:
1、首先應該明確單元的含義。單元在面向對象的程序中指的是一個類,在結構化的方法中指的是一個函數。
2、其次應該明確單元測試的方法。單元測試的常用方法包括:
(1) 靜態檢查,即采用靜態代碼檢查的工具對程序進行內部邏輯的分析,以分析程序中可能的錯誤或壞味道。
(2) 動態測試,通過編寫單元測試程序,設計單元測試用例,測試每個函數或每個類的邏輯正確性。
3如果一個類或一個函數對其他的類或環境依賴性很強,需要編寫大量的樁程序或驅動程序,那恰恰說明了這個類或這個函數的設計有問題,違背了“低耦合”的基本設計原則,這也正式
敏捷方法中提倡的“測試驅動開發”的作用之一。
4、質量的投入產出也是一種平衡,需要在單元測試上投入到什么程度首先是公司的一個管理方針。如果每個單元都進行單元測試則測試代碼的規模和產品代碼的規模能夠達到1:1,也就是說編寫測試代碼的
工作量還是比較大的,但是也要看到單元測試的產出。在單元測試、集成測試、
系統測試中,單元測試是投入產出比最大的測試種類,即單元測試在單位時間內發現的缺陷個數大于集成與系統測試。原則上單元測試的投入最大,找到的缺陷最多,集成測試與系統測試依次遞減。
5、在實踐中推廣單元測試時可以采用如下的方法:
(1) 加大靜態檢查的力度。通過靜態檢查的工具快速地識別程序中的錯誤、警告、壞味道,公司可以規定對檢查出的哪些警告、壞味道必須進行修改,注意如果修改所有的警告、壞味道可能工作量比較大。靜態檢查是一種投入產出比很高的單元測試方法。在JAVA下可以采用check Style, Source monitor,PMD,Find Bugs,Jslink等。
(2) 通過測試策略的選擇減少測試程序的工作量。單元測試一般有三種策略:
策略一:自底向上的策略:先測底層的函數或類,再測上層的函數或類,此時只需要編寫驅動程序,不需要編寫樁程序。
策略二:自頂向下的策略:先測上層的函數或類,再測試底層的函數類,此時只需要編寫樁程序,不需要或很少需要編寫驅動程序。
策略三:混合策略:綜合上述的2種策略,需要綜合編寫樁程序與驅動程序。
如果被測的單元需要調用很多其他的單元,則可以采用自底向上的策略減少驅動程序的編寫量。如果被測的單元需要很多外圍的環境準備則可以采用自頂向下的策略。
(3) 在組織級可以規定執行單元測試的時機,比如:
i)系統中最核心的、最關鍵的功能模塊;
ii)算法復雜的功能模塊;
iii)出錯最多的功能模塊;
iv)客戶最常使用的功能模塊;
v)復用的底層代碼
根據Pareto定律,我們可以選擇少部分代碼執行單元測試。
6、單元測試的技術
(1) XUnit的工具
(2) 生成測試用例時可以采用如下的方法:
i)單元功能分析
ii)入口參數等價類分析
iii)入口參數邊界分析
iv)全程變量、共享數據的等價類與邊界分析
v)調用函數返回值的等價類與邊界分析
vi)覆蓋率分析
上述的方法要求的嚴格程度可以循序漸進,不能的嚴格程度需要投入的工作量不同。
一、AppScan安裝時出現錯誤1603。
是因為之前安裝過,沒有卸載干凈導致報錯。解決方法如下:
1、控制面板→程序和功能→選中程序卸載。
2、刪除AppScan安裝路徑以及下面的所有內容。
3、在系統[開始]->[運行(R)...]中,運行命令regedit來刪除全部注冊鍵(如果存在的話),以及下列的子 鍵:
A.HKEY_LOCAL_MACHINE\SOFTWARE\IBM\
Rational AppScan
B.HKEY_CURRENT_USER\Software\IBM\ Rational AppScan
A.點擊系統[開始]->[運行(R)...],輸入 %temp%并運行
B.當文件夾打開后,選擇菜單[編輯]->[全部選定(A)],在選定文件的任何部分右擊鼠標并選擇[刪除
(D)](跳過當前可能還在使用的文件,盡可能的刪除所有可以刪除的文件)
5、同樣打開APPSCAN_TEMP文件夾:
A.打開后刪除里面所有的內容
B.如果發生下面的錯誤,忽略該錯誤開始下一步操作
%APPSCAN_TEMP%
Windows cannot find '%APPSCAN_TEMP%'. Make sure you typed the name
correctly, and then try again. To search for a file, slick the Start
button, and then click Search.
6、使用Windows自帶的磁盤清理設置來清理您的電腦:
A.在系統[開始]->[運行(R)...]中,輸入命令: cleanmgr/sageset,選擇"臨時安裝文件","安裝日志
文件","臨時文件"并取消其他項目的勾選(這樣工具的配置已經完成)。
B.在系統[開始]->[運行(R)...]中,輸入命令: cleanmgr/sagerun(這樣就啟動了清除功能,一般需 要幾分鐘才能完成)。
7、重新啟動電腦。
二、AppScan掃描后篡改網站代碼。
在掃描配置→
測試策略→勾選了侵入式,有可能會篡改掉網站的代碼。如果會篡改的話在掃描的時候去掉這個勾選即可。(不過這個就呵呵了,要從代碼上放置被侵入攻擊)
三、AppScan掃描過程中C盤空間不足。
1、建議不要勾選啟用掃描日志,當掃描網站過大或掃描時間過長,隨著日志文件變大會導致系統崩潰。如果已經勾選了,可以在工具→選項→啟用掃描日志勾選去掉即可。
2、如果要勾選的話,可以把用戶文件保存到其它硬盤。默認的用戶文件是:C:\Documents and Settings\Administrator\My Documents\AppScan;可以修改為其他路徑。該路徑可以在菜單欄中依次選擇工具→選項→一般→文件位置部分修改。
3、如果已經把上面的地址都修改到了其他盤,但是在掃描過程中還是發現C 盤的空間快速被消耗,是因為很多臨時文件都保存在C 盤,AppScan 中有一個隱藏的參數APPSCAN_TEMP 來設置臨時文件位置。可以通過修改系統變量來修改到其他硬盤空間。臨時文件位置說明:描述正常操作期間AppScan 將其臨時文件保存到的位置。缺省情況下,AppScan 將其臨時文件存儲在以下位置:C:\Documents and Settings\All Users\Application Data\IBM\Rational AppScan\temp如果需要修改此缺省位置,請按照要求編輯環境變量APPSCAN_TEMP 的路徑。
訪問環境變量的方法是:右鍵單擊我的電腦,然后依次選擇屬性→高級→環境變量。
注意:在新位置的路徑中絕不能有任何Unicode字符。
修改AppScan 中的臨時文件:桌面上鼠標右鍵選擇我的電腦→屬性→高級系統設置→高級→環境變量,增加一個新的“用戶環境變量”,名字是“APPSCAN_TEMP”,設定路徑,指向您希望保存臨時文件的目錄。
4、還可以始終暫停掃描稍后再啟動,當然有了前面的方法我想也不需要這樣了。
四、AppScan掃描時虛擬內存不足。
1、一個小時保存一次,以免出現故障的時候之前掃描的結果白費了;在工具→選項→掃描過程中自動保存設置為60分鐘自動保存一次。
2、可以在工具→選項→高級搜索PerformanceMonitor.RestartOnOutOfMemory把屬性值改為true。使Rational AppScan當內存使用量相對過大時自動重新啟動。 這樣當掃描因為剩余的虛擬內存量過低從而被迫停止時,Rational AppScan會監測系統注冊表的設定來決定是否重新啟動。
五、AppScan掃描時出現通信問題。
1、減小線程數,掃描配置→通信和代理。
2、加大超時數,掃描配置→通信和代理。
3、服務器有防火墻,防火墻關閉之后即可掃描。
六、AppScan打開文件時提示“文件出現損壞”。
1、先試試這個、可能是因為Issch和ISUSPM自啟動項被禁用了。運行“msconfig”看下,如果禁用狀態,開啟為開機啟動即可。
七、AppScan整個掃描流程簡述。
AppScan 使用步驟:計劃、執行、檢查、分析。
1、在計劃階段(plan):明確目的,進行策略性的選擇和任務分解
A、明確目的:選擇合適的掃描策略
B、了解對象:首先進行探索,了解網站結構和規模
C、確定策略:進行對應的配置
D、按照目錄進行掃描任務的分解
E、按照掃描策略進行掃描任務的分解
2、執行階段(Do):一邊掃描一遍觀察
A、先爬后掃(繼續僅測試)
3、檢查階段(Check)
A、檢查和調整配置(過程中可能會產生一些問題)
4、結果分析(Analysis)
A、對比結果
B、匯總結果(整合和過濾)
Ps.一般掃描的時候選擇綜合掃描會掃描的全面些。
八、修改后驗證。
1、右擊需要驗證的問題,點擊重新測試,如果修復了的話,此問題會消失掉。
2、對于HTML注釋敏感信息泄露驗證不掉的問題,可以點擊具體問題然后查看請求/響應點擊下一行突出顯示看具體問題,然后在網站相應頁面前臺中查看是否已去掉此注釋。
第三方支付平臺的功能和結構特點
在信用方面,第三方支付平臺作為中介,在網上交易的商家和消費者之間作一個信用的中轉,通過改造支付流程來約束雙方的行為,從而在一定程度上緩解彼此對雙方信用的猜疑,增加對網上購物的可信度。
在技術層面,第三方支付平臺承擔安全保障和技術支持的作用,提供一系列的應用接口程序,支持多家銀行的多卡種支付,將多家簽約銀行的支付方式整 合到一個界面上,負責交易結算中心與銀行的對接。銀行與商家通過接入第三方支付平臺實現二次結算,并采用國際先進SSL加密模式,在銀行、消費者和商家之 間傳輸和存儲資料。第三方支付服務商所提供的支付系統能夠承載很大的數據量、吞吐率,并具有極高的支付成功率。同時還可以根據不同用戶的需要,對界面、功 能等進行調整,增加個性化和人性化的特征。
目前國內出現了數百個第三方支付平臺,這些平臺的業務模式和技術實現方法不盡相同,但平臺的結構則具有一個相似的基本點,即第三方支付平臺前端直接面對網上客戶,平臺的后端連接各家商業銀行,或通過人民銀行的相關支付系統連接各家商業銀行。
第三方支付平臺業務流分析
根據電子支付產業鏈的分析我們看到,第三方支付最初的支付模式只是作為銀行和網上商戶的中介,這就是第三方支付“一般模式”;隨著支付業務的發展,小商戶和網民之間的信用風險導致了“提供擔保”的支付模式。
第三方支付一般模式的流程:在中國,消費者通過第三方網上支付平臺進行支付一般必須涉及到發卡銀行(網銀)、網上商戶和第三方網上支付平臺。一個典型的消費交易,通過第三方網上支付平臺支付的流程圖如下:
第三方支付一般模式流程說明
一般支付流程如下:
a)網上消費者瀏覽檢索商戶網頁,并在商戶網站選擇商品、下訂單;
b)商戶網站列出可以選擇的支付網關,消費者選擇其一,商戶網站將連接到第三方支付網關的支付頁面;
c)網上消費者在第三方支付平臺的支付頁面,選擇相應的銀行、卡種;
d)第三方支付平臺將網上消費者的支付信息,按照各銀行支付網關的技術要求,傳遞到各相關銀行,進入銀行支付頁面;
e)銀行(銀聯)提供輸入卡號、金額、密碼等關鍵信息的安全頁面;網上銀行轉發給銀行賬務系統,由相關銀行(銀聯)檢查相應賬戶(網上消費者)的支付能力,實行凍結、扣賬或劃賬,并將賬務系統的處理結果返回給網上消費者本身和第三方支付平臺;
f)第三方支付平臺將支付結果轉發給網上商戶;
g)網上商戶確認收到成功支付應答的,向網上消費者發貨或提供服務;
h)第三方平臺根據協議于第二天或約定的周期向商戶支付扣除手續費后的資金;第三方平臺為網上商戶提供差錯交易處理的服務;
i)第三方平臺作為商戶與網上銀行對帳,核對資金、核對;第三方平臺代表網上商戶與網上銀行處理差錯交易。
從整個過程上來看,多家銀行和簽約商家通過支付網關連成通道,消費者通過第三方支付平臺付款給商家,通過第三方支付為商家提供一個可以兼容多銀行支方式的接口平臺。
第三方支付擔保模式的流程:第三方支付擔保模式,也稱為信用中介型模式。該種運營模式,基本是由大型的電子交易平臺獨立開發或與其他投資人共同 開發,憑借運營商的實力和信譽與各大銀行合作,同時能夠為買賣雙方提供中間擔保的第三方支付運營模式。這種模式的運營商主要是借助電子交易平臺和中間擔保 支付平臺與用戶開展業務,在交易過中采用充當信用中介的模式,保證交易的正常進行。
以支付寶模式流程為例,其具體運行流程是:
支付寶模式流程說明
以支付寶支付模式為例,其具體運行流程是:
a)買家確定購買之后從支付寶的個人賬戶中劃撥出來,保留在支付寶監管賬戶中;事先用戶應當保證賬戶中有足夠的資金;如果余額不足,支付寶會自動跳轉到充值頁面,讓客戶通過網銀充值;
b)支付寶扣賬成功后,通知賣家發貨;
c)賣家通過其配送渠道向買家發貨;
d)待買方收到商品并確認無誤后,通知支付寶收到貨物;
e)支付寶將監管賬戶中資金劃撥到賣家在支付寶的賬戶中。
支付寶作為代收代付的中介,主要是為了維護網絡交易的安全性。
在網上交易中, 客戶在商家網站下訂單后,先把貨款付給大家都信任的第三方中介機構,在商家知道貨款己到第三方中介機構后把貨物發送給客戶。如果客戶對貨物滿意,貨款就通過第三方中介機構付給商家;如果不滿意,客戶把貨物返回給商家,并從第三方中介機構處取回貨款。
第三方支付平臺測試方法
從上述的兩種支付流程來看,作為網絡交易的主要支付渠道,第三方網上支付平臺在發卡銀行、網上商戶間提供了接口平臺,在電子支付產業鏈中起到重 要的中介作用。面對這樣的電子化信息系統及其網絡交易中可能存在的風險,我們不得不實時地關注:第三方支付業務的流程是否能夠正確實現、功能是否正確、網 上大量客戶的并發交易會不會導致支付系統崩潰、支付系統的不穩定或者互聯網誠信體系的不健全會不會影響網上購物和交易等等問題。
目前亟待解決的問題就集中在;如何通過有效地方法和策略以驗證第三方支付系統的功能是否正確實現,是否會造成網絡擁堵及如何通過現有的網絡技術 如Internet Web、數據加密、防火墻技術、各種交易協議、客戶端瀏覽技術和軟件等,使得客戶和商家能透明安全地進行交易等。因此,為了防范第三方支付系統的交易風 險,保障系統的穩定運行,必須考慮采取強有力的措施加以管理和控制,積極地引入軟件測試,強化系統質量測試和安全評估,為網絡交易支付系統提供可靠地服務 保證。
根據支付系統的業務流程和發展需要,下面從系統的測試重點出發,主要討論第三方支付系統的功能、性能及安全性的測試方法。
功能測試方法
在對第三方支付平臺實施測試過程中,應采用黑盒測試策略,使用等價類劃分、邊界值分析、因果圖法、判定表法、正交試驗法、功能圖法等測試用例設 計方法的原理與實現,分別對第三方支付系統的功能、第三方賬戶和交易風險監控、系統性能及安全性等測試指標項進行測試。黑盒測試法應制訂覆蓋全部功能模塊 的測試用例,通過執行測試用例以實現系統功能、業務流程和其它質量特性的測試。
針對第三方支付平臺的業務功能,如“會員管理、賬戶管理、中間賬戶資金管理、差錯處理、資金結算、對賬處理、統計報表”等等,應綜合應用各類測 試設計方法:首先對業務流程進行等價類劃分,設計的測試用例應是業務主流程和流程主分支的最小集,所有的判別分支都能被覆蓋,在流程覆蓋的同時,完成等價 功能的測試;采用邊界值分析法,針對功能說明中的輸入輸出域,進行邊界值和極限值的設計和測試;采用逆向思維方式,結合以往測試經驗和直覺設計軟件在功能 和流程上可能存在的各種錯誤,靠經驗用錯誤推測法追加一些測試用例,進行容錯性測試;針對程序功能說明有各種輸入條件組合的,用因果圖和判定表驅動法進行 測試;參數配置類的情況,用正交試驗法選擇較少組合方式達到最佳效果;功能圖法通過不同時期條件的有效性設計數據;對于業務清晰且復雜的系統利用場景法貫 穿整個測試過程。
在本地的虛擬機環境一直湊合著用英文,今天想看看中文的東西都顯示亂碼,下定決心要把問題解決了。
如果直接打印文本內容,通過putty也會顯示亂碼。
[ora11g@rac1 ~]$ cat aa.sh
δ? ε??ο?θ?ζ―δ?δ??ζ?θ―
[ora11g@rac1 ~]$
這個時候很可能是putty的編碼轉換的問題,通過查看putty的設置,如上,可以看到應該選為utf-8。
選為UTF-8以后,重新打印,就沒有問題了。
[ora11g@rac1 ~]$ cat aa.sh
第一個問題解決了,第二個問題又來了,來看看
數據庫層面的亂碼問題。
[ora11g@rac1 ~]$ sqlplus n1/n1
ID NAME
---------- -----------------------------
1 ??????
這個時候看看環境變量NLS_LANG的設置,如果為空,很可能會出問題。
[ora11g@rac1 ~]$ echo $NLS_LANG
[ora11g@rac1 ~]$
簡單設置一下,這個最好和數據庫層面的字符集要一致。
[ora11g@rac1 ~]$ echo $NLS_LANG
american_america.AL32UTF8
再來查看一下,就沒有問題了。
SQL> select *from test;
ID NAME
---------- -----------------------------
1 突破玩法界限
當然了,我的這個問題剛好數據庫層面是完全支持的,這樣就省去了很多額外的
工作,如果數據庫層面的字符集不支持,那很可能就得重建庫來改變字符集了。
select *from nls_database_parameters SQL> / PARAMETER VALUE ------------------------------ ---------------------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET AL32UTF8 NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUAGE AMERICAN NLS_SORT BINARY NLS_TIME_FORMAT HH.MI.SSXFF AM NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MI.SSXFF AM NLS_TIME_TZ_FORMAT HH.MI.SSXFF AM TZR NLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MI.SSXFF AM TZR NLS_DUAL_CURRENCY $ NLS_COMP BINARY NLS_LENGTH_SEMANTICS BYTE NLS_NCHAR_CONV_EXCP FALSE NLS_NCHAR_CHARACTERSET AL16UTF16 NLS_RDBMS_VERSION 11.2.0.3.0 |
另外系統層面的亂碼,網上查看了一下,有些人建議修改/etc/sysconfig/i18n的設置。
[ora11g@rac1 ~]$ cat /etc/sysconfig/i18*
LANG="en_US.UTF-8"
SYSFONT="latarcyrheb-sun16"
如果修改為中文的,一定要注意設置的值,在我本地做測試,是不需要修改的,本身就支持,我修改的時候,竟然改錯了,結果重新登錄及報了一大堆的錯誤,如下:
[ora11g@rac1 caipiao]$ su - ora11g
Password:
-bash: warning: setlocale: LC_CTYPE: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_COLLATE: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_MESSAGES: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_NUMERIC: cannot change locale (zn_CN.UTF-8): No such file or directory
-bash: warning: setlocale: LC_TIME: cannot change locale (zn_CN.UTF-8): No such file or directory
如果修改,應該改為zh_CN,算是一個低級錯誤。
SQLite 事務(Transaction)
事務(Transaction)是一個對
數據庫執行
工作單元。事務(Transaction)是以邏輯順序完成的工作單位或序列,可以是由用戶手動操作完成,也可以是由某種數據庫程序自動完成。
事務(Transaction)是指一個或多個更改數據庫的擴展。例如,如果您正在創建一個記錄或者更新一個記錄或者從表中刪除一個記錄,那么您正在該表上執行事務。重要的是要控制事務以確保數據的完整性和處理數據庫錯誤。
實際上,您可以把許多的 SQLite 查詢聯合成一組,把所有這些放在一起作為事務的一部分進行執行。
1,事務的屬性
事務(Transaction)具有以下四個標準屬性,通常根據首字母縮寫為 ACID:
·原子性(Atomicity):確保工作單位內的所有操作都成功完成,否則,事務會在出現故障時終止,之前的操作也會回滾到以前的狀態。
·一致性(Consistency):確保數據庫在成功提交的事務上正確地改變狀態。
·隔離性(Isolation):使事務操作相互獨立和透明。
·持久性(Durability):確保已提交事務的結果或效果在系統發生故障的情況下仍然存在。
2,事務控制
使用下面的命令來控制事務:
·BEGIN TRANSACTION:開始事務處理。
·COMMIT:保存更改,或者可以使用 END TRANSACTION 命令。
·ROLLBACK:回滾所做的更改。
事務控制命令只與 DML 命令 INSERT、UPDATE 和 DELETE 一起使用。他們不能在創建表或刪除表時使用,因為這些操作在數據庫中是自動提交的。
3,BEGIN TRANSACTION 命令
事務(Transaction)可以使用 BEGIN TRANSACTION 命令或簡單的 BEGIN 命令來啟動。此類事務通常會持續執行下去,直到遇到下一個 COMMIT 或 ROLLBACK 命令。不過在數據庫關閉或發生錯誤時,事務處理也會回滾。以下是啟動一個事務的簡單語法:
BEGIN;
or
BEGIN TRANSACTION;
4,COMMIT 命令
COMMIT 命令是用于把事務調用的更改保存到數據庫中的事務命令。
COMMIT 命令把自上次 COMMIT 或 ROLLBACK 命令以來的所有事務保存到數據庫。
COMMIT 命令的語法如下:
COMMIT;
or
END TRANSACTION;
5,ROLLBACK 命令
ROLLBACK 命令是用于撤消尚未保存到數據庫的事務的事務命令。
ROLLBACK 命令只能用于撤銷自上次發出 COMMIT 或 ROLLBACK 命令以來的事務。
ROLLBACK 命令的語法如下:
ROLLBACK;
6,實例操作
[root@localhost sqlite-autoconf-3080403]# sqlite3 tim.db
SQLite version 3.8.4.3 2014-04-03 16:53:12
Enter ".help" for usage hints.
sqlite> CREATE TABLE COMPANY(ID INT NOT NULL, NAME VARCHAR(20),AGE INT,ADDRESS VARCHAR(20),SALARY DECIMAL(7,2));
現在,讓我們開始一個事務,并從表中刪除 age = 25 的記錄,最后,我們使用 ROLLBACK 命令撤消所有的更改。
先開啟事務,然后刪除AGE為25的記錄,查詢COMPANY表,會看到沒有這條記錄,如下圖所示:
再ROLLBACK,再去查詢COMPANY表,會看到AGE為25的記錄被恢復。
現在開啟一個事務,刪除AGE為25的記錄,再執行COMMIT提交所以的更改,那么就不會再看到已經刪除的記錄,如下所示:
再ROLLBACK,再去查詢COMPANY表,會看到AGE為25的記錄被恢復。
現在開啟一個事務,刪除AGE為25的記錄,再執行COMMIT提交所以的更改,那么就不會再看到已經刪除的記錄,如下所示:
現在常有人“把質量第一”的所謂時髦詞語掛在嘴邊,左一個認證,右一個活動,仿佛告訴你企業重視質量的決心,已經擺在最優先的項目上了。有個笑話 是:企業在生產現場的產品質量無人把關,看不到管理者,就問上哪了,回答,都去聽“質量在我心中”的演講去了。而我并不認為質量是一個優先項目,而且要特 別說明的是,我不認為質量是一個值得經常考慮的項目。
如果把質量當作一個方案或特別的系統來驅使的話,則很容易因為通過與其它商業活動的優先程度比較而導致錯位。這就像在關系里給予愛以優先權一樣。而愛,并不是一個與其它活動相競爭的項目,它需要把時間傾注在全部的關系中。
質量不是項目,質量就是符合要求。我們何時才符合要求呢?我們每一次的業務活動都是為某些人獲得輸出。故而,優先性應給予
工作業務,或它的輸 出,或那些輸出的使用者。如果某人是位有誠信的人,符合要求(或做你答應要做的事),也就因此成為人們做任何工作時想要得到的東西,無論怎樣都應該是優先 的。
質量是從現場中來的,沒有深入到現場去,你永遠不可能管理好你的質量,當然這里的現場是廣義的包括銷售現場、設計現場、生產現場等等。很多朋友 都談到了質量認證和質量活動,我想不管什么樣的措施或管理方法,只要確實能提高產品品質,能持續改進質量水平,那么不管是什么方法什么體系什么活動我都認 可,反之我都堅決反對。
時下咨詢行業有這樣一句行話:“你又搞跨了幾家公司”,這是一個現象,當然并不是說咨詢師不行,是因為他們沒有深入到現場去,不能有針對性的開 展輔助工作,亂開處方,有的企業也是“病急亂投醫”認為咨詢公司或策劃公司能幫他們解決實質性管理問題,當然部分好的咨詢師或策劃人的確是能幫助企業的, 但是象某些書本咨詢師或書本策劃人我是不敢茍同。
企業要發展練好內功是關鍵,不管是品質管理還是其他管理更多的還是依賴于企業自身的管理水平和執行水平,因此所有的企業經營活動或管理方法體系都要踏踏實實的去做,而不是說的,企業是做出來的,不是說出來的也不是想出來的。
* 題目:將一個正整數分解質因數。例如:輸入90,打印出90=2*3*3*5。
* 分析:對n進行分解質因數,應先找到一個最小的質數k,然后按下述步驟完成:
*(1)如果這個質數恰等于n,則說明分解質因數的過程已經結束,打印出即可。
*(2)如果n>k,但n能被k整除,則應打印出k的值,并用n除以k的商,作為新的正整數你n,重復執行第一步。
*(3)如果n不能被k整除,則用k+1作為k的值,重復執行第一步。
*這個題目很明顯是要用遞歸算法來實現的,打印“*”有些技巧,但也很容易解決,程序如下:
import java.util.Scanner; public class Yinshifenjie { public static void fenjie(int n) { for (int i=2;i <=n;i++) { if (i == n) { System.out.print(i); return; } if (n > i && (n % i == 0)) { System.out.print(i+"*"); fenjie(n / i); break; } } } public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.println("請輸入一個整數:"); int n = input.nextInt(); fenjie(n); } } |
使用vbs腳本啟動
QTP并運行
測試,startQTP.vbs
'************************************************************************************************************************ 'Description: ' 'This example opens a test, configures run options and settings, 'runs the test, and then checks the results of the test run. ' 'Assumptions: 'There is no unsaved test currently open in QuickTest. 'For more information, see the example for the Test.SaveAs method. 'When QuickTest opens, it loads the add-ins required for the test. 'For more information, see the example for the Test.GetAssociatedAddins method. '************************************************************************************************************************ Dim qtApp 'As QuickTest.Application ' Declare the Application object variable Dim qtTest 'As QuickTest.Test ' Declare a Test object variable Dim qtResultsOpt 'As QuickTest.RunResultsOptions ' Declare a Run Results Options object variable Set qtApp = CreateObject("QuickTest.Application") ' Create the Application object qtApp.Launch ' Start QuickTest qtApp.Visible = False ' Make the QuickTest application visible ' Set QuickTest run options qtApp.Options.Run.ImageCaptureForTestResults = "OnError" qtApp.Options.Run.RunMode = "Fast" qtApp.Options.Run.ViewResults = False qtApp.Open "D:\NewTest\Scripts\BeforeGlobal\Login", False ' Open the test in read-only mode ' set run settings for the test Set qtTest = qtApp.Test qtTest.Settings.Run.IterationMode = "oneIteration" ' Runs the test only once, using only the first row in the global Data Table 'qtTest.Settings.Run.IterationMode = "rngIterations" ' Run only iterations 2 to 4 'qtTest.Settings.Run.StartIteration = 2 'qtTest.Settings.Run.EndIteration = 4 qtTest.Settings.Run.OnError = "NextStep" ' Instruct QuickTest to perform next step when error occurs qtApp.Test.Settings.Web.BrowserNavigationTimeout = 60000 ' Configure other Web settings Set qtResultsOpt = CreateObject("QuickTest.RunResultsOptions") ' Create the Run Results Options object qtResultsOpt.ResultsLocation = "D:\NewTest\Res1" ' Set the results location qtTest.Run qtResultsOpt ' Run the test 'MsgBox qtTest.LastRunResults.Status ' Check the results of the test run qtTest.Close ' Close the test qtApp.Quit 'Close the QTP Set qtResultsOpt = Nothing ' Release the Run Results Options object Set qtTest = Nothing ' Release the Test object Set qtApp = Nothing ' Release the Application object |