赞
踩
进入Apache官网上http://ant.apache.org/bindownload.cgi下载,解压即可
在系统变量中,新建变量名“ANT_HOME”,值为你解压的ant安装路径,点击确定保存
在系统变量中编辑变量PATH,在变量值中添加“%ANT_HOME%\bin”,点击确定保存
在CMD窗口中输入ant -version,显示版本号即为成功。
文件目录结构
在jmeter里面新建一个名字叫JmeterTest的目录类似这样
JmeterTest下的目录
- <?xml version="1.0" encoding="utf-8" ?>
- <project name="自动化标题" default="all" >
- <tstamp>
- <format property="time" pattern="yyyyMMddhhmmss" />
- </tstamp>
- <!-- 需要改成自己本地的 Jmeter 目录-->
- <property name="jmeter.home" value="E:\jenkins+jmeter+ANT\jmeter" />
- <!-- jmeter生成jtl格式的结果报告的路径-->
- <property name="jmeter.result.jtl.dir" value="${jmeter.home}/JmeterTest/resultLog-PM/jtl" />
- <!-- jmeter生成html格式的结果报告的路径-->
- <property name="jmeter.result.html.dir" value="${jmeter.home}/JmeterTest/resultLog-PM/html" />
- <!-- jmeter生成html格式的结果报告的前缀-->
- <property name="ReportName" value="SmokeReport" />
- <!-- jmeter生成的结果文件的名称 -->
- <property name="jmeter.result.jtlName" value="${jmeter.result.jtl.dir}/result.jtl" />
- <!-- jmeter生成的html结果文件的名称 -->
- <property name="jmeter.result.htmlName" value="${jmeter.result.html.dir}/${ReportName}${time}.html" />
-
- <target name="all">
- <antcall target="run" />
- <antcall target="report" />
- </target>
-
- <!---指定ant-jmeter-1.1.1.jar 的位置-->
- <path id="jmeter.classpath">
- <fileset dir="${jmeter.home}\extras">
- <include name="ant-jmeter*.jar"/>
- </fileset>
- </path>
-
-
- <target name="run">
- <taskdef
- name="jmeter"
- classpathref="jmeter.classpath"
- classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
-
- <jmeter jmeterhome="${jmeter.home}" resultlog="${jmeter.result.jtlName}">
-
- <!-- 声明要运行的脚本。“.jmx”包含此目录下的所有jmeter脚本-->
- <!-- <testplans dir="D:\yangyb\星印v1.0.01版本" includes="星印扫码.jmx" /> -->
- <testplans dir="C:\Users\Administrator\Desktop\接口脚本\12-13号以后\脚本--jemter脚本" includes="*.jmx" />
- <!-- 声明ant执行jmeter时,传入jmeter的属性值,可以自定义。-->
- <property name="jmeter.save.saveservice.output_format" value="xml"/>
- <property name="thread.num" value="${tn}" />
- <property name="loop.num" value="${ln}" />
- </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.htmlName}"
- style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl" >
- <!-- style="D:/Jmeter/jmeter.results.shanhe.me.json.xsl" > 填写模板的路径位置填写模板的路径位置填写模板的路径位置填写模板的路径位置 -->
- <param name="dateReport" expression="${report.datestamp}"/>
- </xslt>
- <!--jmeter-results-detail-report_21.xsl D:/yangyb/Ant+jmeter/jmeter.results.shanhe.me.xsl-->
-
- <!--因为上面生成报告的时候,不会将相关的图片也一起拷贝至目标目录,所以需要收到拷贝-->
- <copy todir="${jmeter.result.html.dir}">
- <fileset dir="${jmeter.home}/extras">
- <include name="collapse.png" />
- <include name="expand.png"/>
- </fileset>
- </copy>
- <!---发送邮件-->
- </target>
-
- </project>
类似于这样,上面的文件是build.xml的文件内容(记得修改为自己的路径)。
在build.xml文件的目录输入框内输入ant点击回车即可等待报告(html目录)出现。如下图所示
ant生成的报告,没有筛选功能,如果有接口失败了,需要排查的时候只能一个一个去扒拉,扒拉的我眼都累了,所以咱们直接写一个小脚本把错误的接口名称拿出来放到xlsx表格中。
代码逻辑:
寻找同级目录下文件名后缀是.html的文件,读取他们的数据,并找到class等于failure的div标签....具体逻辑读一下代码吧,挺简单的,最后取出他的标题。写入到xlsx中。
代码如下:
- import sys
- from time import sleep
- from bs4 import BeautifulSoup
- import openpyxl
- import os
- import glob
-
- # 获取当前文件夹路径
- # current_dir = os.path.dirname(os.path.realpath(sys.executable))
- #py运行时要使用__file__
- current_dir = os.path.dirname(os.path.abspath(__file__))
-
- # 使用 glob 模块查找所有的 HTML 文件
- html_files = glob.glob(current_dir + "/*.html")
-
- #定义一个空字符串
- file_name = ''
- #定义写入的行数
- dxc = 1
- # 创建一个新的workbook对象
- workbook = openpyxl.Workbook()
- # 选择第一个工作簿
- worksheet = workbook.active
- # 遍历所有 HTML 文件并打印它们的文件名
- for file_path in html_files:
- file_name = os.path.basename(file_path)
- print('你要读取的文件是:{}'.format(file_name),'\n')
- # 读取HTML文件
- with open(file_name, 'r',encoding='utf-8') as f:
- html_data = f.read()
-
- # 解析HTML文件
- soup = BeautifulSoup(html_data, 'html.parser')
-
- # 查找所有class属性为'failure'的<div>元素
- failure_div_elements = soup.find_all('div', {'class': 'failure'})
- # 遍历所有failure_div元素
-
- for failure_div_element in failure_div_elements:
- # 获取当前failure_div元素所在的父元素
- parent_li_element = failure_div_element.parent
-
- # 如果父元素是<li>元素
- if parent_li_element.name == 'li':
- # 查找相邻的class属性为'navigation'的前一个<li>元素
- navigation_li_element = parent_li_element.find_previous_sibling('li', {'class': 'navigation'})
-
- # 如果找到了class属性为'navigation'的<li>元素
- if navigation_li_element is not None:
-
- # 取出该元素的文本
- navigation_text = navigation_li_element.text.strip()
- print(navigation_text)
- # 写入数据
- worksheet.cell(row=dxc, column=1, value=navigation_text)
-
-
- dxc += 1
- # 保存workbook
- workbook.save("data.xlsx")
- print('\n','写入成功,生成:data.xlsx 3秒后关闭该窗口,可手动关闭')
- sleep(3)
注意点,打包成exe小工具时,记得更改下面
py跑的时候选择第二条,比如这样
- # 获取当前文件夹路径
- # current_dir = os.path.dirname(os.path.realpath(sys.executable))
- #py运行时要使用__file__
- current_dir = os.path.dirname(os.path.abspath(__file__))
打包exe的时候选第一条,比如这样
- # 获取当前文件夹路径
- current_dir = os.path.dirname(os.path.realpath(sys.executable))
- #py运行时要使用__file__
- # current_dir = os.path.dirname(os.path.abspath(__file__))
运行结束之后你就会得到一个这样的文件。
就可以分析错误的接口了。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。