JMeter-接口自動化測試讀取用例,執行並結果回寫


一:環境准備

1.下載jxl.jar這個jar包

2.下載好之后,放到Jmeter的安裝路徑下的lib目錄下

3.jxl.jar的作用:完成對Excel的讀寫以及修改操作

如何利用jmter操作excel的思路分析:
1,Excell一般有三個最重要的元素:workbook,sheet,cell
2,想要把結果儲存到指定的單元格,那就必須依照這個三個元素來定位。
3,先獲取excel的文件名稱
4,獲取表單名
5,獲取單元格的坐標
6,獲取結果,寫入到對應的單元格去
7,需要利用beanshell寫java代碼,獲取對應的數據寫入到Excel里面去。

二:測試數據結構准備

准備的數據如下:(1)測試用例文件命名為user.csv (2)測試數據文件命名為num.csv

注意:先新建txt文件,然后將文件擴展名改為csv,不要新建xls再改為csv,不然會出現讀取不到文件的情況

1.創建測試用例文件,並導入到CSV Data Set Config,命名為test_case,並設置相關屬性(注意圈起來的部分)

 

2.創建測試數據文件,並導入到CSV Data Set Config,命名為test_data,並寫入變量名為tel,pwd

三:(1)新建線程組,創建一個登錄請求的http,並傳入相關的參數

(2)新建一個正則表達式提取器,獲取http請求返回的結果

四:代碼准備,編寫好代碼后,導出jar包,命名為CWResultFile.jar,將導出的jar包放入放到Jmeter的安裝路目錄下的lib--ext目錄下,然后記得重啟Jmeter,不然不生效

復制代碼
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.text.SimpleDateFormat;
import java.util.Date;
import jxl.Cell;
import jxl.Workbook;
import jxl.format.Alignment;
import jxl.format.Colour;
import jxl.format.VerticalAlignment;
import jxl.read.biff.BiffException;
import jxl.write.Label;
import jxl.write.WritableCellFormat;
import jxl.write.WritableFont;
import jxl.write.WritableSheet;
import jxl.write.WritableWorkbook;
import jxl.write.WriteException;
import jxl.write.biff.RowsExceededException;

/**導入jxl.jar;*后續擴充功能,sheet2增加測試報告展現;------待實現;*/
public class CWOutputFile {
    
    public static void main(String[] args) throws RowsExceededException, WriteException, BiffException, IOException{
        CWOutputFile t=new CWOutputFile();
        String File=t.cOutputFile("測試");
    }
    
    /** wOutputFile方法寫結果文件* wOutputFile(文件路徑,案例編號,測試驗證點,預期結果,實際結果,錯誤碼,狀態碼,響應結果)*/
    public void wOutputFile(String filepath, String caseNo,String testPoint, String preResult, String fresult, String errCode,String status, String respond) throws IOException,RowsExceededException, WriteException, BiffException 
            {
                File output = new File(filepath);
                String result = "";
                InputStream instream = new FileInputStream(filepath);
                Workbook readwb = Workbook.getWorkbook(instream);
                WritableWorkbook wbook = Workbook.createWorkbook(output, readwb); // 根據文件創建一個操作對象
                WritableSheet readsheet = wbook.getSheet(0);
                //int rsColumns = readsheet.getColumns(); //獲取Sheet表中所包含的總列數
                int rsRows = readsheet.getRows(); 
                // 獲取Sheet表中所包含的總行數
                /********************************字體樣式設置 ****************************/
                WritableFont font = new WritableFont(WritableFont.createFont("宋體"), 10,WritableFont.NO_BOLD);// 字體樣式
                WritableCellFormat wcf = new WritableCellFormat(font);
                /***********************************************************************/
                Cell cell1 = readsheet.getCell(0, rsRows);
                if (cell1.getContents().equals("")) {
                    Label labetest1 = new Label(0, rsRows, caseNo);// 第1列--案例編號;
                    Label labetest2 = new Label(1, rsRows, testPoint); // 第2列--驗證測試點;
                    Label labetest3 = new Label(2, rsRows, preResult); // 第3列--預期結果;
                    Label labetest4 = new Label(3, rsRows, fresult);// 第4列--實際結果;
                    Label labetest5 = new Label(4, rsRows, errCode);// 第5列--錯誤碼;
                    if (preResult == fresult) {
                        result = "通過";wcf.setBackground(Colour.BRIGHT_GREEN); // 通過案例標注綠色
                        } 
                    else {result = "不通過";wcf.setBackground(Colour.RED);// 不通過案例標注紅色
                    }
                    Label labetest6 = new Label(5, rsRows, result, wcf); // 第6列--執行結果;
                    Label labetest7 = new Label(6, rsRows, status); // 第7列--狀態碼
                    Label labetest8 = new Label(7, rsRows, respond);// 第8列--響應結果
                    readsheet.addCell(labetest1);
                    readsheet.addCell(labetest2);
                    readsheet.addCell(labetest3);
                    readsheet.addCell(labetest4);
                    readsheet.addCell(labetest5);
                    readsheet.addCell(labetest6);
                    readsheet.addCell(labetest7);
                    readsheet.addCell(labetest8);
                    }
                wbook.write();
                wbook.close();
                }
    /** cOutputFile方法創建輸出文件,傳入參數為交易類型,如開戶等;* cOutputFile方法返回文件路徑,作為wOutputFile的入參;*/
    public String cOutputFile(String tradeType) 
            throws IOException, WriteException {
                String temp_str = "";
                Date dt = new Date();
                SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
                temp_str = sdf.format(dt); // 獲取時間戳// 相對路徑默認為 apache-jmeter-3.1\bin
                String filepath = "D:\\\\"+tradeType+"_output_" + "_" + temp_str + ".xls"; // 以時間戳命名結果文件,確保唯一
                File output = new File(filepath);
                if (!output.isFile()) {
                    output.createNewFile(); // 如果指定文件不存在,則新建該文件
                    WritableWorkbook writeBook = Workbook.createWorkbook(output);
                    WritableSheet Sheet = writeBook.createSheet("輸出結果", 0); // createSheet(sheet名稱,第幾個sheet)
                    WritableFont headfont = new WritableFont(WritableFont.createFont("宋體"), 11, WritableFont.BOLD); // 字體樣式
                    WritableCellFormat headwcf = new WritableCellFormat(headfont);
                    headwcf.setBackground(Colour.GRAY_25); // 灰色顏色
                    Sheet.setColumnView(0, 11); // 設置列寬度setColumnView(列號,寬度)
                    Sheet.setColumnView(1, 30);
                    Sheet.setColumnView(2, 35);
                    Sheet.setColumnView(3, 35);
                    Sheet.setColumnView(4, 18);
                    Sheet.setColumnView(5, 11);
                    Sheet.setColumnView(6, 11);
                    Sheet.setColumnView(7, 50);
                    headwcf.setAlignment(Alignment.CENTRE); // 設置文字居中對齊方式;
                    headwcf.setVerticalAlignment(VerticalAlignment.CENTRE); // 設置垂直居中;
                    Label labe00 = new Label(0, 0, "案例編號", headwcf); // Label(列號,行號, 內容)
                    Label labe10 = new Label(1, 0, "驗證測試點", headwcf);
                    Label labe20 = new Label(2, 0, "預期結果", headwcf);
                    Label labe30 = new Label(3, 0, "實際結果", headwcf);
                    Label labe40 = new Label(4, 0, "錯誤碼", headwcf);
                    Label labe50 = new Label(5, 0, "執行結果", headwcf);
                    Label labe60 = new Label(6, 0, "返回狀態", headwcf);
                    Label labe70 = new Label(7, 0, "響應結果", headwcf);
                    Sheet.addCell(labe00);
                    Sheet.addCell(labe10);
                    Sheet.addCell(labe20);
                    Sheet.addCell(labe30);
                    Sheet.addCell(labe40);
                    Sheet.addCell(labe50);
                    Sheet.addCell(labe60);
                    Sheet.addCell(labe70);
                    writeBook.write();
                    writeBook.close();
                    }
                return filepath;
                }
    }
復制代碼

五:添加一個beanshell取樣器調用代碼,並且用到僅一次控制器(因為只需要導出一個Excel文件)

t=new CWOutputFile();
String filepath=t.cOutputFile("測試");
vars.put("filepath",filepath);//轉為jMeter變量,方便后期獲取。

六:再創建一個beanshell取樣器調用代碼,寫入數據到Excel文件中

s=new CWOutputFile();
String testData="{"+"\"mobilephone\":\""+"${tel}\","+"\"pwd\":\""+"${pwd}\""+"}";
String preResult=vars.get("preResult");//用get方法可以確保獲取到的是字符串,里面傳遞的是變量名,不需要用${變量名}這種方式咯!
String fresult=vars.get("fresult");
s.wOutputFile("${filepath}", "${caseNo}","${testPoint}",testData,preResult,fresult);

七:點擊運行,在D盤找到測試結果文件即可

測試結果文件如下


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM