1. python3實現自動化測試 [基於python語言實現自動化測試的研究]
[摘 要]自動化測試近年來的技術已經越來越成熟,在某些方面有著不可替代的作用,例如在性能測試,壓力測試中,自動化測試可以模擬成千上萬個用戶對目標程序進行測試。本文通過對大型實際項目的分析研究,分析針對某一產品的自動化測試框架。然後討論怎樣用python實現自動化測試。
[關鍵詞]測試技術手工測試自動化測試python腳本
[中圖分類號]TP3[文獻標識碼]A[文章編號]1007-9416(2010)03-0088-01
地添加測試用例,為測試用例提供公用函數,執行測試用例,發送測試結果等功能。
1 自動化測試的重要概念
檢查點(CheckPoint):將特定屬性的當前數據與期望數據進行比較的地方,用於判定被測試程序的功能是否正確。
成本收益比:並不是所有的測試都適合自動化測試,衡量一個用例是否適合自動化測試一個很重要的參考是國際上流行的自動化測試成本收益比,即是p=k*n/c1+c2。各個參數的意義下:
K=手工執行自動化測試案例所花費的時間成本。
N=自動化測試案例執行的次數
C1=花費在自動化測試前期的(時間成本+人力成本+金錢成本)
C2=花費在自動化測試後期的(時間成本+人力成本+金錢成本)
二八定律:1897年義大利經濟學家帕列托發現的二八定律在軟體行業同樣適用,而可以給我們很多啟發,指導我們的軟體開發和測試。80%的用戶經常使用的是20%的軟體功能。在軟體測試中,80%的bug是集中在20%的軟體模塊中,對於自動化測試來說,找出這20%的測試用例是至關重要的。
2 自動化測試的執行步驟
每次腳本都是從一個統一的文件開始執行的,就是如上的Start.py。這樣做的好處是可以把每個腳本都需要處理的工作放到一個文件中去執行,例如收集一些配置信息,讀取命令行參數。以這樣統一的處理風格為腳本的可讀性提供了保證,也為簡化了測試腳本的編寫,不用每次都要處理一些基本的事務。
啟動文件Start.py首先會讀取命行參數,如pthon Start.py -s FileMenu.suite -t FileNew
通過python的內置函數sys.argv就可以讀取命令行參數吵肢,非常方便。讀取到命令行參數後,在Start.py內部可以判斷命令行的格式是否符合我們的格式,如測試人員不小心把-s 寫成了-z 這樣就要退出測試執行。
如果輸入的格式是正確的,Start.py 負責在特定的目錄下尋找特定的Suite文件和Testcase。Suite文件和Testcase的格式會在下邊的具體實例中作介紹。
找到特定的Testcase後就可以執行測試用例,根據檢查點的通過或失敗發送測試報告,該報告會以網頁的形式顯示,方便測試人員和開發人員的查找調試。
3 用python實現GUI測試
圖形用戶界面(GUI) 就是使用圖象,輸入的文字,帶圖標的計算機界面,取而代之了許多鍵盤的功能。GUI可以讓用戶通過圖標和滑鼠與計算機進行交互,而不是單調地在命令行中輸入文本進行操作。設計良好的圖形用戶界面可以使用戶從命令中解放出來。
GUI測試主要包括兩個方面:一是純GUI測試,主要關注應用程序上GUI組件是否符合規范或是用戶的使用習慣,二是功能測試,主要是檢驗和驗證系統是否實現了系統的業務需求,旨在驗證系統的業務實現能力。但事實上兩者不是完全獨立的,一方面GUI的測試必定要觸發功能,另一方面,功能測試也一定要通過GUI將搜碰洞事件傳遞給後台服務。
3.1 編寫測試用例
ID 466540 :: Test CaseGeneral UI File Menu
Version 2
世枯PriorityP1
Summary:Verify File New window
Steps
SelectFile -> New
Expected Results
1. The VM creation window should open.
Keywords: i18n
Requirements : None
Created on 09/22/2008 20:58:23by wangw
Last modified on04/17/2009 00:20:53by marian
3.2 測試用例分析
以上是一個完整測試用例, 該測試用例包括:
測試ID 466540 , 有了測試ID就可以在測試人員提交bug後,QA或開發人員通過ID找到這個測試用例。還有一個更大的用處就是,在自動個腳本生成測試報告後,可以根據測試ID把該測試用例顯示在測試報告中,以供測試人員和開發人員調試。
測試名稱,根據測試名稱應該可以很快了解測試用例的內容,所以好的測試名稱也是非常重要的。
測試用例的版本(Version)。
測試優先順序(Priority),測試優先順序也是一個很重要的參數,因為大型項目都要有很多測試用例要執行。只有明確測試優先順序才能確保重要的測試用例得以及時進行,保證軟體質量。
測試用例概述(summary),幫助測試執行人員了解該測試用例的用測的功能。
測試步驟,描述測試人員或是自動化腳本每一步是怎樣操作的,例如本例告訴測試人員選擇菜單Fie,然後選擇菜單項New。
預期結果(Expected Results),說明經過以上測試步驟,期望程序運行出現的結果。
4 結語
本文在明確軟體測試理論的基礎上,對自動化測試做了重點闡述,通過實際項目的自動化測試分析,有些測試用例特別適合用自動化測試。例如GUI測試中,用些是要驗證界面元素是否顯示正常。如果是腳本就可以准確無誤地很快驗證完畢,而用人工驗證不僅容易出錯而且費時間。由於時間和硬體條件有限,本論文規避了許多問題,所以仍有許多工作需要完成。例如:做好腳本的復用,使測試腳本不斷積累。及研究怎樣在測試工具和自己搭建框架中尋找平衡等。
[參考文獻]
[1] 張克東.《軟體工程與軟體測試自動化教程》.北京:電子工業出版社,2002.
[2] 朱菊,王志堅,楊雪.《基於數據驅動的軟體自動化測試框架》[J]計算機技術測試與發展,2006.
[3] 馬瑞芳,王會燃.《計算機軟體測試方法的研究》.小型微型計算機系統,2003.
[4] 朱鴻,金凌紫.《軟體質量保障和測試》[M].北京:電子科學出版社,1997.
本文為全文原貌 未安裝pdf瀏覽器用戶請先下載安裝 原版全文
2. 如何製作PDF樣本
PDF文件是目前比較流行的電子文檔格式,在辦公自動化(OA)等軟體的開發中,經常要用到該格式,但介紹如何製作PDF格式文件的資料非常少,在網上搜來搜去,都轉貼的是同一段「暴力」破解的方法,代碼片斷如下:
StreamWriter pPDF=new StreamWriter(filePath);
ArrayList xRefs=new ArrayList();
float yPos =0f;
long streamStart=0;
long streamEnd=0;
long streamLen =0;
string strPDFMessage=null;
//PDF文檔頭信息
strPDFMessage="%PDF-1.1\n";
ConvertToByteAndAddtoStream(strPDFMessage);
xRefs.Add(mPDF.Length);
strPDFMessage="1 0 obj\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="<< /Length 2 0 R >>\n";
ConvertToByteAndAddtoStream(strPDFMessage);
strPDFMessage="stream\n";
ConvertToByteAndAddtoStream(strPDFMessage);
……
看了上面的製作辦法,我眼鏡都摔壞了三幅,如果用上面這樣原始的辦法能製作出滿意的PDF文件,那一定是天才所為。後來,我從一個網站(網址:http://itextsharp.sourceforge.net/index.html)中看到了專門製作PDF文件的控制項的介紹,暗喜之餘,立馬下載試驗,果然非常輕松地製作出了想要的PDF文件,因為網站為英文,內容又多,讀起來非常費力,在解決了自己的問題後,看到許多網友還在為PDF文件製作而郁悶,遂決定將該內容翻譯為中文,由於本人英語水平一般,許多地方又晦澀難懂,故翻譯質量不是很滿意,敬請斧正,但大部分能看懂。本文的目的一是解決部分網友的燃眉之急,二是拋磚引玉,如果哪位仁兄願意將該網站中的內容准確翻譯出來,則是天下之大幸。
要用本文的方法生成PDF文件,需要兩個控制項:itextsharp.dll和ICSharpCode.SharpZipLib.dll,由於示例代碼實在太多,我將代碼全部整理出來,放在另外一個文件「示例代碼.doc」中,所有這些資源,我均放在了本人的ftp站點(ftp://202.107.251.26)上的「Pdf文件製作全攻略」文件夾中(文件夾中另外兩個rar壓縮文件為兩個控制項的源代碼,供大家學習研究使用),你可以到這里下載相應的資源,或者直接到原網站下載。
為便於調試和敘述,所有例子均為DOS控制台程序,windows程序使用方法完全一樣,按照下面的步驟創建一個可調試的項目:
1、 打開VS2003;
2、 單擊菜單「文件」→「新建」→「項目」,在項目類型中選擇「Visual C#項目」,在模板中選擇「控制台應用程序」,輸入文件名稱如「MakePdf」,指定好存放路徑,然後點確定按鈕;
3、 在「解決方案資源管理器」中右鍵單擊「引用」,從彈出的菜單中選擇「添加引用」,在「.NET」選項夾中選擇「瀏覽」,添加前面提到的兩個應用,如下圖:
4、 在代碼窗口頂部添加兩個引用:
using iTextSharp.text;
using iTextSharp.text.pdf;
至此,准備工作完畢。
第一部分 iText的簡單應用第一章 創建一個Document
利用iText五步創建一個PDF文件:helloword。
第一步,創建一個 iTextSharp.text.Document對象的實例:
Document document = new Document();
第二步,為該Document創建一個Writer實例:
PdfWriter.getInstance(document, new FileStream("Chap0101.pdf", FileMode.Create));
第三步,打開當前Document
document.Open();
第四步,為當前Document添加內容:
document.Add(new Paragraph("Hello World"));
第五步,關閉Document
document.Close();
完整的代碼見示例代碼0101。
在例中,不難看出,製作一個PDF文件是非常簡單的。
註:如果你將例中「document.Add(new Paragraph("Hello World"));」中的字元串「Hello Word」換成中文,如「這是我的第一個PDF文件」,產生的結果一定讓你大失所望,因為生成的PDF文件中並沒有將中文顯示出來,不要擔心,在第9章中要專門講解字體問題,中文顯示也就迎刃而解了,如果不能正確顯示中文,也就沒有必要翻譯本文了。
下面對這幾步做詳細介紹。
第一步 創建一個Document實例:
iTextSharp.text.Document-object共有三個構造函數:
public Document();
public Document(Rectangle pageSize);
public Document(Rectangle pageSize,
int marginLeft,
int marginRight,
int marginTop,
int marginBottom);
第一個構造函數以A4頁面作為參數調用第二個構造函數,第二個構造函數以每邊36磅頁邊距為參數調用第三個構造函數
u 頁面尺寸:
你可以通過指定的顏色和大小創建你自己的頁面,示例代碼0102創建一個細長的淺黃色背景的頁面:
Rectangle pageSize = new Rectangle(144, 720);
pageSize.BackgroundColor = new Color(0xFF, 0xFF, 0xDE);
Document document = new Document(pageSize);
通常,你不必創建這樣的頁面,而可以從下面頁面尺寸中選擇:
A0-A10, LEGAL, LETTER, HALFLETTER, _11x17, LEDGER, NOTE, B0-B5, ARCH_A-ARCH_E, FLSA 和 FLSE
大多數情況下使用縱向頁面,如果希望使用橫向頁面,你只須使用rotate()函數:
Document document = new Document(PageSize.A4.rotate());
詳細代碼見示例代碼0103。
u 頁邊距:
當創建一個文件時,你還可以定義上、下、左、右頁邊距:
Document document = new Document(PageSize.A5, 36, 72, 108, 180);
在示例代碼0104中你可以看到該文檔有一個0.5英寸的左邊距和1英寸的右邊距,上邊距為1.5英寸,下邊距為2.5英寸。
說明:
當創建一個矩形或設置邊距時,你可能希望知道該用什麼度量單位:厘米、英寸或象素,事實上,默認的度量系統以排版單位磅為基礎得出其他單位的近似值,如1英寸=72磅,如果你想在A4頁面的PDF中創建一個矩形,你需要計算以下數據:
21 厘米 / 2.54 = 8.2677 英寸
8.2677英寸* 72 = 595 磅
29.7 厘米 / 2.54 = 11.6929 英寸
11.6929英寸* 72 = 842 磅
默認邊距為36磅即半英寸。
如果你修改了頁面尺寸,僅僅影響到下一頁,如果你修改了頁邊距,則影響到全部,故慎用。
關於頁面的初始值,請參考第三步。
第二步 創建Writer實例
一旦創建了document,我們可以創建該文檔的多個Writer的實例,所有這些Writer實例均繼承自抽象類「iTextSharp.text.DocWriter」。
同時還有另外一種情況,你可以用iTextSharp.text.pdf.PdfWriter產生文檔PDF文件,如果你想創建一個TeX文檔,你可以使用iTextSharp.text.TeX.TeXWriter包。
Writer類的構造函數是私有的,你只能通過下面的方法創建一個實例:
public static xxxWriter getInstance(Document document, Stream os);(xxx 是 Pdf 或 Xml)
你可以通過下面的方法創建一個實例:
PdfWriter writer = PdfWriter.getInstance(document, new FileStream("Chap01xx.pdf"));
但是你幾乎永遠不會用到Writer實例(除非你想創建高級PDF或者希望用一些非常特殊的函數,如ViewerPreferences 或 Encryption)。所以通過下面的辦法得到實例已經足夠了: PdfWriter.getInstance(document, new FileStream("Chap01xx.pdf"));
在第一步中創建一個文檔時,第一個參數意義不大,第二個參數可以是任何一種流,到目前為止我們一直使用System.IO.FileStream將Document寫入文件中,示例代碼0105用到了System.IO.MemoryStream(這不是一個獨立的例子,你必須在Servlet Engine中測試這些代碼。
第三步 打開Document
u 摘要
在你寫入任何實際數據之前,你可能希望通過以下幾種方法寫入一些關於本文檔的摘要:
public boolean addTitle(String title)
public boolean addSubject(String subject)
public boolean addKeywords(String keywords)
public boolean addAuthor(String author)
public boolean addCreator(String creator)
public boolean addProcer()
public boolean addCreationDate()
public boolean addHeader(String name, String content)
你可以選擇自己的標題、主題、關鍵字、作者、創建程序,但以下產品信息將始終被添加:iTextSharp (或者iTextSharp的引用)和創建時間(實際上這兩種方法是自動調用的)。
你還可以將自定義的名稱添加為「報頭信息」,但是這對於PdfWriter沒有任何作用,如果看看實例代碼0101產生的pdf文件的「文檔屬性」,我們可以看到僅僅有PDF創建程序和產品日期,而示例代碼0106的「文檔屬性」框中有更多的信息。
打開document前要做的事:
你只能在Open方法調用之前添加摘要,這是iText開發工具提供的一個選擇。
在HTML中,報頭信息被放在文檔前面報頭標識中間,調用Open方法將導致報頭信息寫入流,因而在Document被打開後無法更改這些數據。
PDF報頭信息不包括摘要,看起來有類似於:
%PDF-1.2
該行顯示生成的文檔是一個版本為1.2的PDF格式的文件,在PDF中,摘要保存在PdfInfo對象中,當文檔關閉時已經寫入PdfWriter中了,因此,沒有關於為什麼不能修改庫來滿足任何時候添加或更改摘要的技術原因
u 頁面初始化
Open方法在不同的Witer中同時會產生初始化事件,舉例來說,如果你需要一個水印或者頁眉頁角對象出現在文檔第一頁的開始處,你需要在打開文檔前添加這些,同樣的用於設置該文檔其他頁水印、頁眉、頁角、頁數和尺寸。
當調用下列方法:
public bool setPageSize(Rectangle pageSize)
public bool Add(Watermark watermark)
public void removeWatermark()
setting Header property
public void resetHeader()
setting Footer property
public void resetFooter()
public void resetPageCount()
setting PageCount property
產生的結果只能在下一個新頁中看到(當在本頁調用初始化方法時),代碼見示例代碼0107,你必須要准備一張名為watermark.jpg的圖片,如下圖:
u 閱讀器參數:
你可以通過下面的辦法為PDF文件指定一些閱讀器 (如Adobe Reader) 參數:
public void setViewerPreferences(int preferences)
在示例代碼0108中,指定了下面一些參數:
writerA.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft);
writerB.setViewerPreferences(PdfWriter.HideMenubar | PdfWriter.HideToolbar);
writerC.setViewerPreferences(PdfWriter.PageLayoutTwoColumnLeft | PdfWriter.PageModeFullScreen | PdfWriter.);
正如你所看到的,參數可以使用以下一些常量:
l 文件被打開時,頁面布局用到下面的其中一個 :
PdfWriter.PageLayoutSinglePage – 同時只顯示一個頁面
PdfWriter.PageLayoutOneColumn –單列顯示
PdfWriter.PageLayoutTwoColumnLeft –雙列顯示,奇數頁在左
PdfWriter.PageLayoutTwoColumnRight -雙列顯示,奇數頁在右
l 文件打開時,頁面模式用到下面其中之一:
PdfWriter.PageModeUseNone – 既不顯示大鋼也不顯示縮略圖
PdfWriter.PageModeUseOutlines – 顯示大綱
PdfWriter.PageModeUseThumbs – 顯示縮略圖
PdfWriter.PageModeFullScreen – 全屏模式,沒有菜單、windows控制項或者其他任何windows可見控制項
l PdfWriter.HideToolbar – 當文檔激活時,是否隱藏閱讀程序(如Adobe Reader)的工具條
l PdfWriter.HideMenubar -當文檔激活時,是否隱藏閱讀程序的菜單.
l PdfWriter.HideWindowUI -當文檔激活時,是否隱藏閱讀程序的界面元素,如滾動條、導航條等,而僅僅保留文檔顯示
l PdfWriter.FitWindow – 是否調整文檔窗口尺寸以適合顯示第一頁。
l PdfWriter.CenterWindow – 是否將文檔窗口放到屏幕中央
l 在全屏模式下,指定如何顯示界面元素(選擇一個)
PdfWriter.NonFullScreenPageModeUseNone -既不顯示大鋼也不顯示縮略圖
PdfWriter. – 顯示大鋼
PdfWriter. – 顯示縮略圖
說明:你只能在類PdfWriter中調用這些方法。
u 加密
打開文檔之前還要做的一件事情就是加密(如果你希望該文檔加密),要達到這個目的,你可以使用下面的方法:
public void setEncryption(boolean strength, String userPassword, String ownerPassword, int permissions);
strength 是下面兩個常量之一:
PdfWriter.STRENGTH40BITS: 40 位
PdfWriter.STRENGTH128BITS: 128位 (Acrobat Reader 5.0及以上版本支持)
UserPassword和ownerPassword 可以為空或零長度, 這種情況下, ownerPassword 將被隨機的字元串代替
Permissions 為下列常量之一:
PdfWriter.AllowPrinting
PdfWriter.AllowModifyContents
PdfWriter.AllowCopy
PdfWriter.AllowModifyAnnotations
PdfWriter.AllowFillIn
PdfWriter.AllowScreenReaders
PdfWriter.AllowAssembly
PdfWriter.AllowDegradedPrinting
該功能參見示例代碼0109和示例代碼0110。
writer.setEncryption(PdfWriter.STRENGTH40BITS, null, null, PdfWriter.AllowCopy);
示例代碼0109產生的文件能夠被打開而無須密碼,但用戶不能列印、修改本文檔。
writer.setEncryption(PdfWriter.STRENGTH128BITS, "userpass", "ownerpass", PdfWriter.AllowCopy | PdfWriter.AllowPrinting);
打你試圖打開示例代碼0110產生的文件時,將要求輸入密碼('userpass'),因為添加了AllowPrinting參數,你可以列印該文檔而不會發生任何問題。
第四步 添加內容
在解釋第一步到第三步的不同示例中,你可能已經遇到了一些對象如Phrase, Paragraph等 在接下來的幾章中,所有這些問題都將得到詳細解釋。
有時你可能想一個writer故意忽略document產生的行為,如示例代碼0111:
當我們創建了兩個writer: writerA 和 writerB:
PdfWriter writerA = PdfWriter.getInstance(document, new FileStream("Chap0111a.pdf", FileMode.Create));
PdfWriter writerB = PdfWriter.getInstance(document, new FileStream("Chap0111b.pdf", FileMode.Create));
我們可以創建兩個有細微差別的文檔:
writerA.Pause();
document.add(new Paragraph("This paragraph will only be added to Chap0111b.pdf, not to Chap0111a.pdf"));
writerA.resume();
你可以比較文件: Chap0111a.pdf和Chap0111b.pdf的區別
第五步,關閉 document
關閉 document 非常重要, 因為它將關閉正在運行的Writer並將內容寫入文件,該方法在最後被調用,你應該總是要關閉文檔。
高級話題:閱讀PDF文件
該部分內容介紹了iText只能產生PDF格式的文件而不能解析PDF格式文件,不再翻譯。
第二章 塊、短句和段落
塊
塊(Chunk)是能被添加到文檔的文本的最小單位,塊可以用於構建其他基礎元素如短句、段落、錨點等,塊是一個有確定字體的字元串,要添加塊到文檔中時,其他所有布局變數均要被定義。下面一行中,我們創建了一個內容為「hello World」、紅色、斜體、COURIER字體、尺寸20的一個塊:
Chunk chunk = new Chunk("Hello world", FontFactory.getFont(FontFactory.COURIER, 20, Font.ITALIC, new Color(255, 0, 0)));
u 典型字體1:
在本指南中,除了第九章外(你可以在這里學會使用其他字體),我們將始終使用典型字體1,這些是不同的典型字體1:
· Courier (該字體定寬)
· Helvetica
· Times Roman
· Symbol
· ZapfDingbats
u 下劃線/刪除線
如果你希望一些塊有下劃線或刪除線,你可以通過改變字體風格簡單做到:
Chunk chunk1 = new Chunk("This text is underlined", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.UNDERLINE));
Chunk chunk2 = new Chunk("This font is of type ITALIC | STRIKETHRU", FontFactory.getFont(FontFactory.HELVETICA, 12, Font.ITALIC | Font.STRIKETHRU));
u 上標/下標
在塊中有幾個方法可以調用,其中大部分將在接下來的章節中介紹,本章中只介紹一個方法 setTextRise(float f). 你可以使用該方法在上標或下標中寫塊。
u 塊的背景
如果你想改變塊的背景,你可以使用方法setBackground(Color color). 這將在塊文本的下面添加一個彩色矩形:
ck.setBackground(new Color(0xFF, 0xFF, 0x00));
在示例代碼0101中,你可以概覽典型字體1和一個使用setTextRise, setBackground等方法的的例子。
短句
短句(Phrases)是一系列以特定間距(兩行之間的距離)作為參數的塊,一個短句有一個主字體,但短句中的一些塊具有不同於主字體的字體,你有更多的選擇去創建短句,一些具體使用參見代碼0202。
u 古希臘語
因為古希臘語經常使用,在類Phrase的構造函數中有一個特徵:將一個字元串作為參數(如果你想避免這種情況,你只能使用塊工作而不能使用字元串),正如你在示例代碼0203中看到的,這個特徵自動地將913至937(除903)和945至969(古希臘的ASCII值)范圍內的所有字體改為希臘符號。
u 非主要性
與其說這是一個特徵,不如說是一個缺陷,但無論如何,這使創建一個非主要性的短句或段落成為可能,這將產生一個由下向上書寫的臨時作用(參見示例代碼0204)。如果你想在一頁中將一些位置移動到上面時可能有用。
說明,當你穿越上邊屆時無法檢查,也沒有辦法讓你回到前一頁。
段落
段落是一系列塊和(或)短句。同短句一樣,段落有確定的間距。用戶還可以指定縮排;在邊和(或)右邊保留一定空白,段落可以左對齊、右對齊和居中對齊。添加到文檔中的每一個段落將自動另起一行。有幾種辦法建立一個段落,如:
Paragraph p1 = new Paragraph(new Chunk("This is my first paragraph.", FontFactory.getFont(FontFactory.HELVETICA, 12)));
Paragraph p2 = new Paragraph(new Phrase("This is my second paragraph.", FontFactory.getFont(FontFactory.HELVETICA, 12)));
Paragraph p3 = new Paragraph("This is my third paragraph.", FontFactory.getFont(FontFactory.HELVETICA, 12));
所有有些對象將被添加到段落中:
p1.add("you can add strings, "); p1.add(new Chunk("you can add chunks ")); p1.add(new Phrase("or you can add phrases."));
說明:一個段落有一個且僅有一個間距,如果你添加了一個不同字體的短句或塊,原來的間距仍然有效,你可以通過SetLeading來改變間距,但是段落中所有內容將使用新的中的間距。見示例代碼0205。
u 保持段落的整體性
在示例代碼0206中,我們使用了setKeepTogether(true)方法來試圖將一個段落放在同一頁中,該方法並不是始終有效,舉個例子,第一段不能剛好在一頁中,於是被分成了兩部分。第二段被放置在第二頁,但第三段順沿到了第三頁上。
字體的延續
你應該掌握字體延續的一些規則,這些規則的應用見示例代碼0207,當我們將一些內容用指定的字體(非默認字體)創建一個短句或者段落後再添加更多內容時,初始對象的字體風格將被延續,請看「Hello 1!」和「Hello 2」:
Phrase myPhrase = new Phrase("Hello 2! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD));
myPhrase.Add(new Phrase("some other font ", new Font(Font.HELVETICA, 8, Font.ITALIC)));
myPhrase.Add(new Phrase("This is the end of the sentence.\n", new Font(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC)));
document.Add(myPhrase);
我們由Times New Roman 粗體字開始,添加一些文本使用Helvetica字體而不指定風格,我們發現文本被改變成了粗體,當我們再加一些文本使用Times New Roman字體和斜體風格,結果變成了粗斜體。
如果我們使用FontFactory來創建字體,字體風格不會被延續,因為FontFactory使用了另外的技術構建一個字體:
myPhrase = new Phrase("Hello 1bis! ", FontFactory.getFont(FontFactory.TIMES_NEW_ROMAN, 8, Font.BOLD));
myPhrase.Add(new Phrase("some other font ", FontFactory.getFont(FontFactory.HELVETICA, 8, Font.ITALIC)));
myPhrase.Add(new Phrase("This is the end of the sentence.\n", FontFactory.getFont(FontFactory.TIMES_NEW_ROMAN, 8, Font.ITALIC)));
document.Add(myPhrase);
在上面的代碼中,使用Helvetica字體的文本風字體沒有指定(既不是粗體也不是斜體)。採用Times New Roman的額外文本僅僅顯示為斜體。
你也看到我們添加了一個段落,添加該段落就如同一個短句。
Paragraph myParagraph = new Paragraph("Hello 1! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD));
myParagraph.Add(new Paragraph("This is the end of the sentence.",FontFactory.getFont(new Font.TIMES_NEW_ROMAN, 8)));
document.Add(myParagraph);
你可以不這樣做,但將失去字體風格的延續,首先不用任何字體創建段落(例中我們僅僅給字體出間距為1.5倍),然後添加內容的不同部分。
myParagraph = new Paragraph(12);
myParagraph.Add(new Paragraph("Hello 3! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD)));
myParagraph.Add(new Paragraph("This is the end of the sentence.", new Font(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC)));
document.Add(myParagraph);
如果你使用了Phrase對象,你同樣會失去字體風格的延續:
myPhrase = new Phrase(12);
myPhrase.Add(new Phrase("Hello 4! ", new Font(Font.TIMES_NEW_ROMAN, 8, Font.BOLD)));
myPhrase.Add(new Phrase("This is the end of the sentence.", newFont(Font.TIMES_NEW_ROMAN, 8, Font.ITALIC)));
document.Add(myPhrase);
u 更改分割符
通常,當文本不能放在一行時,文本將被分割成不同的部分,iText首先會查找分割符,如果沒有找到,文本將在行尾被截斷。有一些預定的分割符如「 」空格和「-」連字元,但是你可以使用setSplitCharacter方法來覆蓋這些默認值。在示例代碼0208中,你可以看到當到達行尾時一個塊是如何被分割的。然後分隔符被改成點「.」,該行在該字元處被分割。
3. 軟體測試需要用到哪些工具
軟體測試分為手工測試和自動化測試,手工測試分為功能測試、性能測試、介面測試幾個方向,自動化測試又分為功能自動化測試、性能自動化測試、介面自動化測試幾個方向。每個方向用到的測試工具都不盡相同,下面我們來介紹一下一些常用的軟體測試工具有哪些。
一、Selenium
Selenium是常用的功能測試工具之一,它是一套完整的 Web應用程序測試系統,包含了測試的錄制、編寫及運行和測試的並行處理。這個工具的主要功能包括:測試與瀏覽器的兼容性,測試系統功能。
二、Loadrunner
Loadrunner是一種預測系統行為和性能的負載測試工具,它通過模擬大量用戶實施並發負載及實時性能檢測的方式來確認、查找問題,對整個企業架構進行測試。
三、禪道
禪道是一款國產開源項目管理軟體、支持產品管理、項目管理、質量管理、文檔管理等。
四、Jmeter
JMeter是Apache組織開發的基於Java的壓力測試工具。用於對伺服器、網路或對象模擬巨大的負載來做壓力測試,在不同壓力類別下測試他們的強度和分析整體性能。
五、Postman
Postman是一款功能強大的網頁調試與發送網頁HTTP請求的Chrome插件。
六、Fiddler
能夠支持所有瀏覽器、系統和平台的調試代理。位於客戶端和伺服器的中間,它能記錄所有客戶端和伺服器的請求響應。
4. 零成本實現android/ios自動化測試有pdf版本嗎
1、IOS的話用instruments,這個工具是mac系統自帶的,語言為js腳本語言。2、android目前做功能自動化的話主要是還是uiautomator,不過要求android版本17以上,API可以參考官網;3、框架的話可以學習下淘寶的自動化測試框架;4、建議先學習自動化測試的原理,然後弄明白為什麼要做自動化測試、它能做什麼、誰來使用它、目標是什麼以及它能帶來什麼價值;5、關於android版本的問題,之前有講到需要17以上的版本,沒有什麼公司會一個版本一個app的,一般都是做兼容,樓主應該的關注抽取什麼樣的測試用例去實現自動化、框架如何設計以及如何解決軟體版本更新帶來的維護問題。
5. 自動化測試的工具有哪些
QTP
全名HP QuickTest Professional software ,2012年12月6日發布11.5版本,並更名為Unified Functional TestingQTP是quicktest Professional的簡稱,是一種自動測試工具。使用QTP的目的是想用它來執行重復的手動測試,主要是用於回歸測試和測試同一軟體的新版本。因此你在測試前要考慮好如何對應用程序進行測試,例如要測試那些功能、操作步驟、輸入數據和期望的輸出數據等
QuickTest針對的是GUI應用程序,包括傳統的Windows應用程序,以越來越流行的Web應用。它可以覆蓋絕大多數的軟體開發技術,簡單高效,並具備測試用例可重用的特點。其中包括:創建測試、插入檢查點、檢驗數據、增強測試、運行測試、分析結果和維護測試等方面。
WinRunner
Mercury Interactive公司的WinRunner是一種企業級的功能測試工具,用於檢測應用程序是否能夠達到預期的功能及正常運行。通過自動錄制、檢測和回放用戶的應用操作,WinRunner能夠有效地幫助測試人員對復雜的企業級應用的不同發布版進行測試,提高測試人員的工作效率和質量,確保跨平台的、復雜的企業級應用無故障發布及長期穩定運行。企業級應用可能包括Web應用系統,ERP系統,CRM系統等等。這些系統在發布之前,升級之後都要經過測試,確保所有功能都能正常運行,沒有任何錯誤。如何有效地測試不斷升級更新且不同環境的應用系統,是每個公司都會面臨的問題。
RationalRobot
是業界最頂尖的功能測試工具,它甚至可以在測試人員學習高級腳本技術之前幫助其進行成功的測試。它集成在測試人員的桌面IBM Rational Test Manager上,在這里測試人員可以計劃、組織、執行、管理和報告所有測試活動,包括手動測試報告。這種測試和管理的雙重功能是自動化測試的理想開始。
AdventNetQEngine
AdventNet QEngine是一個應用廣泛且獨立於平台的自動化軟體測試工具,可用於Web功能測試、web性能測試、Java應用功能測試、Java API測試、SOAP測試、回歸測試和Java應用性能測試。支持對於使用HTML、JSP、ASP、.NET、PHP、JavaScript/VBScript、XML、SOAP、WSDL、e-commerce、傳統客戶端/伺服器等開發的應用程序進行測試。此工具以Java開發,因此便於移植和提供多平台支持。
SilkTest
是業界領先的、用於對企業級應用進行功能測試的產品,可用於測試Web、Java或是傳統的C/S結構。SilkTest提供了許多功能,使用戶能夠高效率地進行軟體自動化測試。這些功能包括:測試的計劃和管理;直接的資料庫訪問及校驗;靈活、強大的4Test腳本語言,內置的恢復系統(Recovery System);以及具有使用同一套腳本進行跨平台、跨瀏覽器和技術進行測試的能力。
QARun
QARun的測試實現方式是通過滑鼠移動、鍵盤點擊操作被測應用,即而得到相應的測試腳本,對該腳本可以進行編輯和調試。在記錄的過程中可針對被測應用中所包含的功能點進行基線值的建立,換句話說就是在插入檢查點的同時建立期望值。在這里檢查點是目標系統的一個特殊方面在一特定點的期望狀態。通常,檢查點在QARun提示目標系統執行一系列事件之後被執行。檢查點用於確定實際結果與期望結果是否相同
TestPartner
是一個自動化的功能測試工具,它專為測試基於微軟、Java和Web技術的復雜應用而設計。它使測試人員和開發人員都可以使用可視的腳本編制和自動向導來生成可重復的測試,用戶可以調用VBA的所有功能,並進行任何水平層次和細節的測試。TestPartner的腳本開發採用通用的、分層的方式來進行。沒有編程知識的測試人員也可以通過TestPartner的可視化導航器來快速創建測試並執行。通過可視的導航器錄制並回放測試,每一個測試都將被展示為樹狀結構,以清楚地顯現測試通過應用的路徑。
Holodeck-強大的故障植入軟體測試工具
TelelogicTAU
TAU第二代包含三個最新的、最強大的技術用來加速大規模軟體開發和測試:統一建模語言(UML)及它的許多最新修訂版本中的特性,UML2.0;功能強大的測試語言TTCN-3和新的構造系統的方法:Model Driven Architecture(模型驅動構架)。這三個新的業界標准結合成TAU的已經過認可的軟體開發平台,形成了一個系統,一個一流的穩定可靠的工具解決方案。TAU第二代是系統與軟體開發解決方案的一個突破,它把業界從使用了太長時間的手工、易出錯、以代碼為中心的方法中釋放出來,自然而然地邁向下一步,一個更加可視化、自動化及可靠的開發方法。Telelogic TAU/Tester是基於通用測試語言TTCN-3,用於自動化的系統和集成測試的強大工具。TAU/Tester以現代化的開發工具為基礎,提供高層測試功能,支持整個測試生命周期,加速自動化測試。TAU/Tester可使用戶特別關注於測試的開發,因為TTCN-3語言是獨立於開發語言或測試設備的,且是抽象和可移植的。
試工具。最新版本是1.1.8,該工具支持無腳本執行模式,無人值守執行模式,自由定製模式。不僅執行模式可以定製,功能模塊也支持定製。使用該工具的界面創建用例,組裝腳本,啟動執行。使用該工具其他開放的介面,可手動創建腳本,組裝並執行。它支持兩種部署模式,第一種是Server-Client方式,Server與Client均為EXE程序,通信協議是Socket;另一種是WEB版部署,方便與現有系統集成,支持Linux,將Server與Client放到Tomcat或Weblogic伺服器下部署,通信協議為Http,通過WEB頁面控制並監控Client端的執行。