Java自動化測試常用的工具程式碼
1:簡單的截圖——截全屏
package com.auto.Test; import java.awt.Dimension; import java.awt.Rectangle; import java.awt.Robot; import java.awt.Toolkit; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; publicclass snap { private private String defaultName="GuiCamera"; staticintserialNum=0; private String imageFormat;//影象檔案的格式 private String defaultImageFormat="jpg"; Dimension d=Toolkit.getDefaultToolkit().getScreenSize(); public snap(){ fileName=defaultName; imageFormat=defaultImageFormat } public snap(String s,String format) { fileName=s; imageFormat=format; } /** * 對螢幕進行拍照 * * **/ publicvoid snapshot(){ try { //拷貝螢幕到一個BufferedImage物件screenshot BufferedImage screenshot=(new Robot()).createScreenCapture( new Rectangle(0,0,( serialNum++; //根據檔案字首變數和檔案格式變數,自動生成檔名 String name=fileName+String.valueOf(serialNum)+"."+imageFormat; System.out.println(name); File f=new File(name); System.out.println("Save File-"+name); //將screenshot物件寫入影象檔案 ImageIO.write(screenshot, imageFormat, f); System.out.println("..Finished"); } catch (Exception e) { System.out.println(e); } } /* public static void main(String[] args) { //"C:\\sally\\bootstrap柵格"是根據自己隨意找的一個圖片形式,"png"是圖片的格式 snap cam=new snap("C:\\sally\\bootstrap柵格","png"); cam.snapshot(); } */ } |
2:按照指定的高度 寬度進行截圖
publicclass snapWithSize { publicvoid snap(intheight,intwidth,String filename) { try { Robot robot=new Robot(); //根據指定的區域抓取螢幕的指定區域,1300是長度,800是寬度。 BufferedImage bi=robot.createScreenCapture(new Rectangle(height,width)); //把抓取到的內容寫到一個jpg檔案中 ImageIO.write(bi, "jpg", new File(filename+".png")); } catch (AWTException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } } |
3:截圖---按照指定的座標開始截圖指定高度 寬度的圖片
package CommUtils; import java.awt.Rectangle; import java.awt.Robot; import java.awt.image.BufferedImage; import java.io.File; import javax.imageio.ImageIO; publicclass snapFree { private String fileName; private String defaultName="GuiCamera"; staticintserialNum=0; private String imageFormat;//影象檔案的格式 private String defaultImageFormat="jpg"; public snapFree(){ fileName=defaultName; imageFormat=defaultImageFormat; } public snapFree(String s,String format) { fileName=s; imageFormat=format; } /** * 對螢幕進行拍照 * * **/ publicvoid snapshot(intx,inty,intwidth,intHeight){ try { //拷貝螢幕到一個BufferedImage物件screenshot BufferedImage screenshot=(new Robot()).createScreenCapture( new Rectangle(x,y,width,Height)); serialNum++; //根據檔案字首變數和檔案格式變數,自動生成檔名 String name=fileName+String.valueOf(serialNum)+"."+imageFormat; System.out.println(name); File f=new File(name); System.out.println("Save File-"+name); //將screenshot物件寫入影象檔案 ImageIO.write(screenshot, imageFormat, f); System.out.println("..Finished"); } catch (Exception e) { System.out.println(e); } } publicstaticvoid main(String[] args) { //"C:\\sally\\bootstrap柵格"是根據自己隨意找的一個圖片形式,"png"是圖片的格式 snapFree cam=new snapFree("C:\\bootstrap柵格","jpg"); cam.snapshot(200,200,300,400); } } |
4:寫入資料到txt檔案
主程式
package com.auto.Test12306; import org.junit.Test; publicclass wirteContext { private String contxt = "寫入內容"; private String path = "C:\\output.txt"; @Test publicvoidwirteContext() { TestLogin testLogin = new TestLogin(); //傳入 書寫內容和路徑 testLogin.outPut(contxt,path); } } |
寫入流
package com.auto.Test12306; import java.io.File; import java.io.BufferedWriter; import java.io.FileWriter; import org.junit.Test; publicclass TestLogin { @Test publicvoid outPut(String wirteContext,String path) { try { /* 寫入Txt檔案 */ File writename = new File(path); // 相對路徑,如果沒有則要建立一個新的output。txt檔案 writename.createNewFile(); // 建立新檔案 BufferedWriter out = new BufferedWriter(new FileWriter(writename)); out.write(wirteContext); out.flush(); // 把快取區內容壓入檔案 out.close(); // 最後記得關閉檔案 } catch (Exception e) { e.printStackTrace(); } } } |
5:讀取CSV檔案
需要javacsv.jar包
package com.auto.lyzb.utils; import java.nio.charset.Charset; import java.util.ArrayList; import com.csvreader.CsvReader; publicclass ReadCSV { publicstaticvoid main(String args[]) { ArrayList<String []> list = readCsv("C:\\Users\\Administrator\\Desktop\\test.csv"); for(inti=0;i<list.size();i++) { System.out.println(list.get(i)[0]);//name System.out.println(list.get(i)[1]);//age System.out.println(list.get(i)[2]);//sex System.out.println("-------------------"); } } publicstatic ArrayList<String []> readCsv(String filePath) { ArrayList<String[]> list = new ArrayList<String []>();//建立儲存資料集合 //建立csvreader讀取 CsvReader cReader = null; try { cReader = new CsvReader(filePath,',',Charset.forName("GBK")); //是否跳過表頭 cReader.readHeaders(); //錄入資料 while(cReader.readRecord()){ list.add(cReader.getValues()); } } catch (Exception e) { e.printStackTrace(); }finally{ cReader.close(); } //如果使用testng的DataProvider,可以返回一個二維陣列 Object data[][] = new Object[list.size()][]; for(inti=0;i<list.size();i++) { data[i]=list.get(i); } returnlist; } } |
輸出:
QQ1
12
男
-------------------
QQ2
13
男
-------------------
QQ3
14
男
-------------------
QQ4
15
男
-------------------
QQ5
16
男
-------------------
QQ6
17
男
6:讀取excel檔案內容
Maven匯入jxl.jar包
<dependency> <groupId>com.hynnet</groupId> <artifactId>jxl</artifactId> <version>2.6.12.1</version> </dependency> |
package Auto.StreamaxTest.Case; import java.io.File; import jxl.*; publicclass ReadExcel{ publicstaticvoid main(String[] args) { Sheet sheet = null; Workbook book = null; Cell cell1 = null; try { //hello.xls為要讀取的excel檔名 book= Workbook.getWorkbook(new File("C:/Users/Administrator/Desktop/Auto_CSV File/AddCarGroup.xls")); //獲得第一個工作表物件(ecxel中sheet的編號從0開始,0,1,2,3,....) sheet=book.getSheet(0); //獲取左上角的單元格 cell1=sheet.getCell(1,1); System.out.println(cell1.getContents()); } catch(Exception e) { } } } |
7:像指定行列的excel表格中寫入指定資料
package CommUtils; import java.io.File; import java.util.ArrayList; import jxl.Workbook; import jxl.write.Label; import jxl.write.WritableSheet; import jxl.write.WritableWorkbook; publicclass WriteExcel { privatestatic ArrayList<String> arrayList; publicstaticvoid main(String[] args) { arrayList = new ArrayList<String>(); arrayList.add("Streamax1"); arrayList.add("Streamax2"); arrayList.add("Streamax3"); WriteExcel.createExcel("c:/test.xls","第一層", 0); } publicstaticvoid createExcel(String path,String sheetNmae,intsheetNumber) { try { // 在path路徑下建立一個excel檔案 WritableWorkbook wbook = Workbook.createWorkbook(new File(path)); // 建立一個工作表 第一個工作區 WritableSheet wsheet = wbook.createSheet(sheetNmae, sheetNumber); //WritableSheet wsheet1 = wbook.createSheet("資料清單2", 1); //WritableSheet wsheet2 = wbook.createSheet("資料清單3", 2); /** // 設定excel裡的字型 WritableFont wf = new WritableFont(WritableFont.ARIAL, 12, WritableFont.NO_BOLD, false); // 給標題規定字型的格式 WritableCellFormat titleFormat = new WritableCellFormat(wf); String[] title = { "賬號", "密碼" }; // 設定表頭 for (int i = 0; i < title.length; i++) { // 一列列的打印表頭 按照我們規定的格式 Label excelTitle = new Label(i, 0, title[i], titleFormat); // 把標頭加到我們的工作區 wsheet.addCell(excelTitle); } */ for(inti = 0;i<arrayList.size(); i++){ //向第i列 第二行寫入內容 Label lable = new Label(i, 1, arrayList.get(i)); // 把值加到工作表中 wsheet.addCell(lable); } // 寫入檔案 wbook.write(); wbook.close(); System.out.println("建立成功!"); } catch (Exception e) { // TODO: handle exception } } } |
8:寫入內容到CSV檔案
需要javacsv.jar包
package streamax.test; import java.io.BufferedWriter; import java.io.File; import java.io.FileNotFoundException; import java.io.FileWriter; import java.io.IOException; public class WriteCSV { public static void Wirtecsv(String filePath,String WirteContext) { try { File csv = new File(filePath); // CSV資料檔案 例如:C:/Users/Administrator/Desktop/Test1/Test.csv BufferedWriter bw = new BufferedWriter(new FileWriter(csv, true)); // 附加 // 新增新的資料行 bw.write(WirteContext); bw.newLine(); bw.close(); } catch (FileNotFoundException e) { // File物件的建立過程中的異常捕獲 e.printStackTrace(); } catch (IOException e) { // BufferedWriter在關閉物件捕捉異常 e.printStackTrace(); } } } |
9:動態WebElement
Utils函式 定位元素
package com.auto.lyzb.user; import org.openqa.selenium.WebDriver; import org.openqa.selenium.WebElement; import org.openqa.selenium.support.FindBy; public class RegisterBean { private WebDriver driver; @FindBy(linkText = "使用者名稱") private WebElement ele1; @FindBy(linkText = "密碼") private WebElement ele2; @FindBy(linkText = "登入") private WebElement ele3; //建構函式 建立物件時傳入driver public RegisterBean(WebDriver driver) { super(); this.driver = driver; } public void login(String username,String password) { ele1.sendKeys(username); ele2.sendKeys(password); ele3.click(); } } |
主測試函式 用來執行登入動作
package com.auto.lyzb.user; importstatic org.testng.Assert.assertEquals; importstaticorg.testng.Assert.assertTrue; import org.openqa.selenium.WebDriver; import org.openqa.selenium.firefox.FirefoxDriver; import org.testng.annotations.AfterMethod; import org.testng.annotations.Test; publicclass RegisterNew { privatestatic WebDriver driver = new FirefoxDriver(); // RegisterBean有有參建構函式 private RegisterBean rs = new RegisterBean(driver); @Test publicvoid registrnew() { driver.get("http://xx.xx.128.xx:xx埠"); rs.login("123", "qwe"); //斷言 assertEquals(true, true); } @AfterMethod publicvoid closedIE() { driver.quit(); } } |
10:檔案/資料夾的複製貼上(本地資料夾到資料夾)
package Utils; import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.InputStream; import org.junit.Test; publicclass RW { private RW rw = new RW(); /** * */ @Test publicvoid Test1() { //將照片複製1000張到D:/123這個資料夾下 for (inti = 0; i < 1000; i++) { rw.copyFile("c:/1.JPG", "D:/123/"+i+".JPG"); } } @Test publicvoid Test2() { rw.copyFolder("D:/123", "C:/1234"); } /*** * 複製單個檔案* * * @param oldPath * String 原檔案路徑 如:c:/fqf.txt* * @param newPath * String 複製後路徑 如:f:/fqf.txt*@return boolean */ publicvoid copyFile(String oldPath, String newPath) { try { intbytesum = 0; intbyteread = 0; File oldfile = new File(oldPath); if (oldfile.exists()) { // 檔案存在時 InputStream inStream = new FileInputStream(oldPath); // 讀入原檔案 FileOutputStream fs = new FileOutputStream(newPath); byte[] buffer = newbyte[1444]; intlength; while ((byteread =
1:簡單的截圖——截全屏
package com.auto.Test;
import java.awt.Dimension;
import java.awt.Rectangle;
import java.awt.Robot;
ase exploit thumb unet ngs IT學習 戰略 頁面 -a http://blog.csdn.net/huangjin0507/article/details/52453137
下面介紹了這些工具的主要功能以及教程、書籍、視頻等。
端口掃描器: ima -1 mst http file log sts har auto Selenium可以執行UI的交互,ExtentReport用來生成測試報告,NUnit是我熟悉的基礎測試框架,當然你也可以用MSTest、Xunit來代替。Selenium、NUnit沒啥好講 打印 lin text 重要 string ID pre python idg
自動化測試常用斷言的使用方法(python)
自動化測試中尋找元素並進行操作,如果在元素好找的情況下,相信大家都可以較熟練地編寫用例腳本了,但光進行操作可能還不夠,有時候也需要對預期結果進行判 smtp com 情況下 使用 郵箱 gmail pop3 常用 qq郵箱 smtp 發送pop3 、imap 收取
【紅色為建議設置】
1. 163郵箱
POP3服務器:pop.163.com 110 執行如下程式碼,報錯:
package test;
import org.openqa.selenium.WebDriver;
import org.openqa.selenium.firefox.FirefoxDriver;
public class 1、jdk環境配置(參見如下地址)
https://jingyan.baidu.com/article/6dad5075d1dc40a123e36ea3.html
2、eclipse安裝(略)
3、selenium相關jar包匯入(參見如下地址)
https://blog.csdn.net/hszxd 談到風險,都需要思考哪些問題?
如何識別專案進行中的風險?
這些風險,可能帶來的後果是什麼?
如何儘量在前期避免各類風險?
確認風險後,我們要採取的措施是什麼?如何避免風險可能帶來的後果?
一、需求相關
需求改動,如新增、修改需求
需求變更沒有及時溝通
因各方(產品、 時間 數據 配置 一個 信息 常常 占用 設備 優先 談到風險,都需要思考哪些問題?
如何識別項目進行中的風險?
這些風險,可能帶來的後果是什麽?
如何盡量在前期避免各類風險?
確認風險後,我們要采取的措施是什麽?如何避免風險可能帶來的後果?
一、需求相關 bsp 判斷 存在 自動 bool 使用方法 pytho 幫助 otn 這裏介紹幾個常用斷言的使用方法,可以一定程度上幫助大家對預期結果進行判斷。
這裏介紹以下幾個斷言方法: (一)assertEqual 和 assertNotEqual
assertEqual:如兩個值
1.判斷字元傳中是否含有特殊字元
/**
* 判斷是否含有特殊字元
*
* @param str
* @return true為包含,false為不包含
*/
public static boolean isSpec
1:針對元素的操作
1.1:獲取元素的屬性值
如下圖 我們可以獲取元素的屬性有Node Detail下的所有key對應的value屬性值
1.2:獲取元素座標
1:我們可以獲取的資料有 元素的起始座標 X Y值 ,和元素的高 寬 (注意 不能獲取元素的結束點座標)
1
1:APP的滑動的概念
如下圖 橫方向為 X軸 豎方向為Y軸 左上側的左邊為(0,0),右下側的最大左邊為螢幕的解析度(例如1080*1920 座標為(1080,1920));頁面左滑動 Y軸座標值不變 X軸座標值從大到小 頁面向上滑動 X軸座標值不變 Y軸座標值從小變大
一 Timer 定時器
Timer 類主要是用來完成定時任務的功能,比如鬧鐘這種週期性變化的事物。
** 1 一個最簡單的定時器**
兩秒鐘後引爆一個定時炸彈。
@Test
public void test() {
new Timer( 白盒測試工具一般是針對程式碼進行測試,測試中發現的缺陷可以定位到程式碼級,根據測試工具原理的不同,又可以分為靜態測試工具和動態測試工具。靜態測試工具直接對程式碼進行分析,不需要執行程式碼,也不需要對程式碼編譯連結,生成可執行檔案。靜態測試工具一般是對程式碼進行語法掃描,找出不符
眾所周知,伺服器是整個網路系統和計算平臺的核心,許多重要的資料都儲存在伺服器上,很多網路服務都在伺服器上執行,因此伺服器效能的好壞決定了整個應用系統的效能。
現在市面上不同品牌、不同種類的伺服器有很多種,使用者在選購時,怎樣從紛繁的型號中選擇出所需要的,適合於自己應用的伺服器產品,僅僅從配置上判別是不
1.jps–列出java程序,類似於ps命令–引數-q可以指定jps只輸出程序ID ,不輸出類的短名稱–引數-m可以用於輸出傳遞給Java程序(主函式)的引數–引數-l可以用於輸出主函式的完整路徑–引數-v可以顯示傳遞給JVM的引數2.jinfo檢視JVM引數修改簡單的引數3
NovaBench:綜合測試工具
Dbench:檔案伺服器的測試工具,只對io產生負載
Ramspeed:記憶體測速
super_pi:計算圓周率的工具,測試ram和cpu的穩定性
Iperf:網速測 1.設定等待時間Thread.sleep(2000); (1000代表1s)2.斷言assertion:驗證應用程式的狀態是否同所期望的一致。常見的斷言包括:驗證頁面內容,如標題是否為X或當前位置是否正確,或是驗證該複選框是否被勾選。斷言被用於三種模式: assert 、verify、waitforAsser
1. 弱網模擬工具
1.1. iOS平臺,通過自帶的開發者選項 》Network Link Conditioner, 即可簡單的模擬各種速度的網路情況:
1.2 通過抓包工具,設定延遲,進行模擬不同的網路情況,比如常用的fiddler, charles:
1. |