jmeter+ant によって実装されたインターフェイスの自動テスト

jmeter+ANT インターフェイス自動テスト フレームワーク

プロジェクトの指示

  • このフレームワークは、 jmeter+Ant+Excel+Pythonに基づいて設計されたデータ駆動型インターフェイスの自動テスト フレームワークのセットです。jmeter 実行者として使用され、Ant は ビルド テストを実行するための構築ツールとして使用されます。このフレームワークでは、次の作業は必要ありません。コードを使用してテスト ケースを作成します。テスト ケースは csv に保存され、インターフェイス ユース ケース、インターフェイス アサーション、およびユース ケース実行制御を csv に作成できます。

テクノロジースタック

  • jメーター
  • パイソン

環境展開

1.JDKをインストールする
2.Jmeterをインストールする
3.ANTのインストール
  • 1. apache-ant-1.10.5-bin.zip を任意のディレクトリ (E:\apache-ant-1.10.5 など) に解凍します。
  • 2. Windows で ANT 環境変数を構成します。以下は私の構成です。

ANT_HOME    E:\apache-ant-1.10.5
Path        E:\apache-ant-1.10.5\bin
CLASSPATH   E:\apache-ant-1.10.5\lib
  • 3. ANT インストールの検証
    インストール結果を確認します。コマンドラインで ant -v を入力し、図のようにバージョン情報が表示されればインストールは成功です。

4. ANTとJmeterの統合
  • 1. 構成ライブラリ ファイル
    図に示すように、jmeter\extras ディレクトリにある ant-jmeter-1.1.1.jar ファイルを ant インストール ディレクトリの lib フォルダにコピーします。

  • 2. ANT と Jmeter の構成ファイルを構成し、
    次の内容を含む新しいコンパイル済み ant ファイルを build.xml という名前で作成します。


<?xml version="1.0" encoding="UTF-8"?>

<project name="ant-jmeter-test" default="run" basedir=".">
    <tstamp>
        <format property="time" pattern="yyyy_MM_dd_HH_mm" />
    </tstamp>
    <!-- 需要改成自己本地的 项目路径根 目录,即jmeter安装文件所在的目录-->  
    <property name="project.home" value="..\" />
    <!-- 需要改成自己本地的 Jmeter 目录-->  
    <property name="jmeter.home" value="${project.home}\apache-jmeter-3.2" />
    <!-- jmeter生成jtl格式的结果报告的路径--> 
    <property name="jmeter.result.jtl.dir" value="${project.home}\report\jtl" />
    <!-- jmeter生成html格式的结果报告的路径-->
    <property name="jmeter.result.html.dir" value="${project.home}\report\html" />
    <!-- 生成的报告的前缀-->  
    <property name="ReportName" value="TestReport" />
    <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/${ReportName}_${time}.jtl" />
    <property name="jmeter.result.all_htmlName" value="${jmeter.result.html.dir}/All_Report/All${ReportName}_${time}.html" />
    <property name="jmeter.result.detail_htmlName" value="${jmeter.result.html.dir}/Detail_Report/Detail${ReportName}_${time}.html" />	
    
    <target name="run">
        <antcall target="test" />
        <antcall target="report" />
    </target>
    
    <target name="test">
        <taskdef name="jmeter" classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask" />
        <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
             <!-- 声明要运行的目录和脚本。"*.jmx"指包含此目录下的所有jmeter脚本-->
            <testplans dir="${project.home}\jmeter_Code" includes="*.jmx" />

             <property name="jmeter.save.saveservice.output_format" value="xml"/>
        </jmeter>
    </target>
    
     <path id="xslt.classpath">
        <fileset dir="${jmeter.home}/lib" includes="xalan*.jar"/>
        <fileset dir="${jmeter.home}/lib" includes="serializer*.jar"/>
     </path>
        
    <target name="report">
        <tstamp> <format property="report.datestamp" pattern="yyyy/MM/dd HH:mm" /></tstamp>    
        <xslt               
              classpathref="xslt.classpath"
              force="true"
              
              in="${jmeter.result.jtlName}"
              out="${jmeter.result.all_htmlName}"
              style="${jmeter.home}/extras/jmeter-results-detail-report_21.xsl" />  
        
        <xslt               
              classpathref="xslt.classpath"
              force="true"
              
              in="${jmeter.result.jtlName}"
              out="${jmeter.result.detail_htmlName}"
              style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl" /> 	
		
        <!-- 因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以,需要手动拷贝 --> 
        <copy todir="${jmeter.result.html.dir}/All_Report">
            <fileset dir="${jmeter.home}/extras">
                <include name="collapse.png" />
                <include name="expand.png" />
            </fileset>
        </copy>
    </target>    
    
</project>
  • 実際の状況に応じて build.xml ファイルを変更します。関連する手順は次のとおりです。

     

  • 3. jmeter.properties を設定する
    • jmeter レポートの出力形式を xml に設定します。図に示すように、jmeter ルート ディレクトリの apache-jmeter-3.2\bin\jmeter.properties ファイルを に jmeter.save.saveservice.output_format=csv 変更し jmeter.save.saveservice.output_format=xml、先行するコメント記号 # を削除します。

フレームワークのコードとユースケースの設計、および関連する手順

1. ユースケースの設計

  • テスト ケースは、図に示すように csv ファイルに保存されます。

2. スクリプトコードの説明

  • 図に示すように、後続のスクリプトで使用するためにテスト計画でユーザー変数を定義します。

  • 図に示すように、ループ コントローラーは永久にループするように設定されています。

  • 図に示すように、新しい CSV Data Set ConFig コントロールがループ コントローラーの下に追加され、ユース ケース ファイル内のテスト ケースをループします。

  • 引用符で囲まれたデータを許可しますか?: 二重引用符で囲まれたデータを許可するかどうか

  1. この項目は、CSV ファイル内の二重引用符が有効な文字であるかどうかを実際に制御します。
  2. データに二重引用符が含まれており、この項目が TRUE に設定されている場合、データを正常に読み取れるようにデータ内の引用符が自動的に削除され、引用符間の内容に区切り文字が含まれている場合でも、データとして扱われます。分離することなく全体として。
  3. データに引用符があり、この項目が FALSE に設定されている場合、データの読み取り時にエラーが報告されます。
  4. 二重引用符フィールドに二重引用符を含める場合は、2 つの二重引用符を追加して 1 つの二重引用符を表す必要があります。
  5. たとえば、この項目が true に設定されている場合、「2,3」-->2,3、「4」「5」-->4"5
  • 共有モード: 共有モード
  1. すべてのスレッド: すべてのスレッド グループのすべてのスレッドについて、各スレッドの値は異なり、csv ファイルの次の行が順番に取得されます。つまり、単一スレッド グループであっても複数スレッド グループであっても、各スレッドは順番に 1 行を取得します。
  2. 現在のスレッド グループ: 現在のスレッド グループ。スレッド グループを単位として、各スレッド グループ内のスレッドは 1 行目から値を取り始め、順番に下に進みます。
  3. 現在のスレッド: 現在のスレッド。各スレッドは 1 行目から値の取得を開始し、下に向かって順番に処理を進め、同じループ内ですべてのスレッドが同じ値を取得します。
  • 以下に示すように、実行コントローラーを追加してテスト ケースの実行をフィルターします。すべてのテスト ケースを実行することも、一部のテスト ケースを実行することも、ユース ケースの優先順位に従ってテスト ケースを実行することもできます。

  • 呼び出しメソッドに応じてリクエストメソッドを選択し、
    ifセレクターでGETメソッドリクエストとPOSTメソッドリクエストを区別し、図のようにhttpリクエストを設定します。

  • ポストリクエストの設定方法: ポストリクエストのパラメータはボディデータに配置されます。

  • 応答結果の構成は図のとおりです

  • Getリクエストの設定方法: getリクエストのパラメータは図のようにURLの後ろに設定されます。

  • Python と組み合わせてテストレポートを電子メールに送信

#encoding=utf-8

import time
import smtplib
import email
from email.mime.text import MIMEText
from email.mime.multipart import MIMEMultipart
import sys
import os.path 
reload(sys)
sys.setdefaultencoding('utf-8')

#收件箱,如果是list请以逗号分隔
mailto_list=['[email protected]','[email protected]']
#发件箱
mail_host="smtp.126.com"
mail_user="XXXXtest"
mail_pass="XXXXXX"
mail_postfix="126.com"

def send_mail(attfile1, attfile2):

	today = time.strftime('%Y-%m-%d',time.localtime(time.time()))
	detailTime = time.strftime('%H:%M:%S',time.localtime(time.time()))
	todaytime = today + ' 00:00:00'
	selectres = todaytime
	send_header = "[demo项目][线上环境][自动化用例测试报告]- ".encode("utf-8") + today +" "+detailTime
	me= mail_user+"@"+mail_postfix
	msg = MIMEMultipart()
	msg['Subject'] = send_header
	msg['From'] = me
	msg['To'] = ";".join(mailto_list)
	
	#正文
	fp = open(attfile1,"r")
	content1 = fp.read()
	fp.close()
	
	content2 = '<html><h3>测试结果及更多详情请查看邮件附件【All_Report.html】和【Detail_Report.html】!!!</h3></html>'
	
	msg.attach(MIMEText(content1 + content2, 'html', 'utf-8'))

	#总体报告目录
	att1 = MIMEText(open(attfile1, 'rb').read(), 'base64', 'gb2312')
	att1["Content-Type"] = 'application/octet-stream'
	att1["Content-Disposition"] = 'attachment; filename="All_Report.html"'
	msg.attach(att1)

	#详细报告目录
	att2 = MIMEText(open(attfile2, 'rb').read(), 'base64', 'gb2312')
	att2["Content-Type"] = 'application/octet-stream'
	att2["Content-Disposition"] = 'attachment; filename="Detail_Report.html"'
	msg.attach(att2)

	try:
		server = smtplib.SMTP()
		server.connect(mail_host)
		server.ehlo()
		server.starttls()
		server.login(mail_user,mail_pass)
		server.sendmail(me, mailto_list, msg.as_string())
		server.quit()
		return True
	except Exception, e:
		print str(e)
		return False

#======查找测试报告目录,找到最新生成的测试报告文件====
def new_report(testreport):
	result_dir = testreport
	#获取该目录下的所有文件,将文件存到列表lists里
	lists=os.listdir(result_dir)
	#重新按时间先后对目录下(列表lists里)的文件进行排列,最新文件排末尾
	lists.sort(key=lambda fn: os.path.getmtime(result_dir+"\\"+fn))
	#找到最新生成的文件,并加上路径,lists(-1)倒数第一个
	file_new = os.path.join(result_dir,lists[-1])
	return file_new

if __name__ == '__main__':
	
	report_dir1 = "../report/html/Detail_Report"   #详细报告目录
	report_dir2 = "../report/html/All_Report"   #总体报告目录

	#找到生成的最新的测试报告
	file_new1 = new_report(report_dir1)
	file_new2 = new_report(report_dir2)
	print(file_new2)

	if send_mail(file_new2, file_new1):
		print u"测试报告邮件发送成功!"
	else:  
		print u"测试报告邮件发送失败!"

3. テストを実行して結果を表示する

  • ビルド構成ファイルはテスト スクリプトと同じディレクトリに配置されます。

  • テストの実行

  1. ant run 図に示すように、コマンド ライン cd で build.xml ファイルがあるディレクトリに移動し、 と入力して テストを実行します。

  2. ビルドが成功したと表示された場合は、ビルド テストが成功したことを意味します。
  • テストレポート
  1. 概要レポートは次のとおりです

  2. 詳細レポートは以下の通り

     

入門から習熟までの 2023 年最新 Jmeter インターフェイス テスト (プロジェクトの実践的なチュートリアルのフルセット)

おすすめ

転載: blog.csdn.net/ada4656/article/details/134296904