ネットワーク全体で最高の Jmeter インターフェイス自動化 - ユースケースの実行を読み取り、結果を書き戻す (詳細な調整)


序文

1. 環境の準備

jar パッケージ jxl.jar をダウンロードします;
ダウンロード後、Jmeter のインストール パス下の lib ディレクトリに配置します;
jxl.jar の機能: Excel の読み取り、書き込み、および変更を完了します。

jmter を使用して Excel を操作する方法の分析:
① Excell には通常、ワークブック、シート、セルの 3 つの最も重要な要素があります。
② 結果を指定したセルに保存したい場合は、これらの 3 つの要素に従って結果を配置する必要があります。
③まずエクセルのファイル名を取得します
④シート名を取得します
セルの座標を取得します

2. テストデータ構造の準備

用意するデータは次のとおりです:
テスト ケース ファイルの名前は user.csv、
テスト データ ファイルの名前は num.csv、テスト データ ファイルの名前は num.csv です。

注: 最初に新しい txt ファイルを作成してから、ファイル拡張子を csv に変更します。新しい xls を作成してから csv に変更しないでください。そうしないと、ファイルが読み取られません。

①テストケースファイルを作成し、CSV Data Set Configにインポートし、test_caseという名前を付け、関連する属性を設定します(丸で囲った部分に注目)

D1

D2

②テストデータファイルを作成してCSV Data Set Configにインポートし、test_dataという名前を付け、変数名tel、pwdを記述します

D3

D4

③新しいスレッドグループを作成し、ログインリクエストhttpを作成し、関連パラメータを渡します

D5

④httpリクエストによって返された結果を取得するための新しい正規表現エクストラクタを作成します。

D6

⑤ コードの準備。コードを書いた後、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 サンプラー呼び出しコードを追加し、コントローラーを 1 回だけ使用します (エクスポートする必要がある Excel ファイルは 1 つだけであるため)

t=new CWOutputFile();
String filepath=t.cOutputFile("测试");
vars.put("filepath",filepath);//转为jMeter变量,方便后期获取。

D10

⑦別の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);

D11

⑧クリックして実行し、Dドライブにテスト結果ファイルを見つけます。

D13

⑨テスト結果ファイルは以下の通りです

D7

以下は、私がまとめた 2023 年の最も完全なソフトウェア テスト エンジニア学習知識アーキテクチャ システム図です。

1. Pythonプログラミングの入門から習得まで

画像の説明を追加してください

2.インターフェース自動化プロジェクトの実戦

画像の説明を追加してください

3. Web自動化プロジェクトの実戦

画像の説明を追加してください

4. アプリ自動化プロジェクトの実戦

画像の説明を追加してください

5. 一流メーカーの再開

画像の説明を追加してください

6. DevOps システムのテストと開発

画像の説明を追加してください

7. 一般的に使用される自動テストツール

画像の説明を追加してください

8、JMeterのパフォーマンステスト

画像の説明を追加してください

9. まとめ(最後にちょっとしたサプライズ)

闘争は一種の内なる燃え上がり、粘り強さと追求の信念です。迷いを手放し、勇気を抱き、恐怖を乗り越えて、羽ばたいてください。たとえ前途多難であっても、自分の能力を信じて突き進んでいけば、いつかは自分だけの輝かしい人生を切り開くことができるでしょう!

どんなに世界が浮き沈みしても、追いつく勇気は決して衰えることはありません。風を切って駆ける馬のように、夢を乗せて障害を乗り越える。たとえ困難で危険な道であっても、しっかりと前に進み、自分の能力を信じて、光を追いかけて、輝かしい人生航海を始めましょう!

粘り強く戦い、輝かしい成果を上げましょう。あらゆる試みは進歩の機会です。心に火を灯し、限界を超え、挑戦を受け入れ、勇敢に前進してください。自分の力を信じ、リスクを冒すことによってのみ、人生に自分自身の壮大な章を書くことができます。

おすすめ

転載: blog.csdn.net/csdnchengxi/article/details/131939928