
下载后的tar包,通过rz/scp或者ftp传输工具(xftp/FileZilla)传输到目标linux服务器,解压后移动到目标目录,我这里是保存到/usr/tools/
# 解压
tar -zxvf jdk-18_linux-x64_bin.tar.gz
# 解压后的文件移动到指定目录
mv ./jdk-18.0.1.1 /usr/tools
将jdk添加到环境变量
# 打开环境变量配置文件
vim /etc/profile
在文件末尾添加java环境变量
#java env
JAVA_HOME=/usr/tools/jdk-18.0.1.1(你的jdk目录)
CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
PATH=$PATH:$JAVA_HOME/bin:
export JAVA_HOME
export CLASSPATH
export PATH
重新加载环境变量
source /etc/profile
验证jdk是否安装成功
java -version

下载jmeter包:https://jmeter.apache.org/download_jmeter.cgi,下载后上传到服务器、解压后移动到指定目录,步骤和jdk安装一样,这里我安装到/usr/tools
vim /etc/profile配置环境变量
在文件末尾添加jmeter环境配置
#jmeter env
JMETER_HOME=/usr/tools/apache-jmeter-5.5
CLASSPATH=.:$JMETER_HOME/lib/ext/ApacheJMeter_core.jar:$JMETER_HOME/lib/jorphan.jar:$JMETER_HOME/lib/log4j-core-2.11.0.jar
PATH=$PATH:$JAVA_HOME/bin:$JMETER_HOME/bin:$ANT_HOME/bin
export JMETER_HOME
export CLASSPATH
export PATH
重新加载环境变量
source /etc/profile
验证是否安装成功
jmeter -v

下载ant,下载地址:https://ant.apache.org/bindownload.cgi
下载包上传到服务器,解压后移动到指定目录
tar -zxvf /etc/apache-ant-1.10.9-bin.tar
mv /etc/apache-ant-1.10.9-bin.tar /usr/tools
vim /etc/profile修改环境配置
export ANT_HOME=/home/test/apache-ant-1.10.9
export PATH=$PATH:$ANT_HOME/bin
重新加载环境变量
source /etc/profile
检查是否安装成功,输入ant -v,成功会出现如下信息

文件配置
创建ant工作目录以及报告存放目录
创建工作目录我这里选择的/usr/jmeter_test,在目录下创建script、result和data文件夹,其中script存放jmeter脚本文件和build.xml文件,result下新建jtl和html文件存放jmeter报告,data存放csv配置的数据文件
本地下载的jmeter插件要同步到linux上的jmeter,否则运行会失败
build文件存放在script目录中,我这里对build.xml做了点个性化配置
<?xml version="1.0" encoding="utf-8"?>
<project name="ant-jmeter" default="all">
<description>
Jmeter+Ant+Jenkins <!--文件描述,可选择项-->
</description>
<!--定义变量并赋值,能够减少配置工作量,后面会用到-->
<!--定义JMeter的工作目录,与%JMETER_HOME%指向同一个目录-->
<property name="jmeter.home" value="/usr/tools/apache-jmeter-5.5"/>
<!--定义JMeter脚本存放目录-->
<property name="script.dir" value="/usr/JmeterScript/wgh/Script"/>
<!--定义JMeter的测试结果存放目录-->
<property name="jmeter.result.dir" value="/usr/JmeterScript/wgh/result"/>
<!--定义测试报告Title-->
<property name="jmeter.result.title" value="WGH_interface Test Summary Report"/>
<!--定义测试结果名称-->
<property name="jmeter.result.name" value="Test"/>
<!--测试报告中是否显示失败事务,n为不显示-->
<property name="show-data" value="n"/>
<!--定义样式版本,有更新时只需要修改此处即可,其他调用处不用更改-->
<property name="format" value="2.1"/>
<condition property="style_version" value="_21">
<equals arg1="${format}" arg2="2.1"/>
</condition>
<condition property="funcMode">
<equals arg1="${show-data}" arg2="y"/>
</condition>
<condition property="funcMode" value="false">
<not>
<equals arg1="${show-data}" arg2="y"/>
</not>
</condition>
<!--定义依赖包目录-->
<path id="jmeter.classpath">
<fileset dir="${jmeter.home}\extras">
<include name="ant-jmeter*.jar"/>
</fileset>
</path>
<!--定义任务,即测试活动,依赖于ant-jmeter.jar包-->
<taskdef
name="jmeter"
classpathref="jmeter.classpath"
classname="org.programmerplanet.ant.taskdefs.jmeter.JMeterTask"/>
<!--定义任务,一个是run,即运行脚本,一个是report,即生成报告-->
<target name="all" depends="run,report"/>
<!--定义run任务-->
<target name="run">
<!--显示上面定义的${show-data}取值-->
<echo>funcMode = ${funcMode}</echo>
<!--删除前一次的测试报告,Html格式的,上面有定义${jmeter.result.name}变量的值-->
<delete file="${jmeter.result.dir}/html/${jmeter.result.name}.html"/>
<!--删除前一次的测试报告,Html格式的,上面有定义${jmeter.result.name}变量的值-->
<delete file="${jmeter.result.dir}/jtl/${jmeter.result.name}.jtl"/>
<jmeter
jmeterhome="${jmeter.home}"
jmeterproperties="${jmeter.home}/bin/jmeter.properties"
resultlog="${jmeter.result.dir}/jtl/${jmeter.result.name}.jtl">
<!-- 指定测试脚本。"*.jmx"指包含此目录下的所有jmeter脚本 -->
<testplans dir="${script.dir}" includes="*.jmx" />
<!--指定测试结果输出格式,在此指定的是xml,也可以指定成文本格式及CSV格式-->
<!--先暂时指定成xml格式,后续会变换成文本格式-->
<property name="jmeter.save.saveservice.output_format" value="xml"/>
<!--是否记录错误信息,上面已经定义了${funcMode}=n-->
<property name="jmeter.save.saveservice.response_data.on_error" value="${funcMode}"/>
</jmeter>
</target>
<!--定义依赖包目录-->
<property name="lib.dir" value="${jmeter.home}/lib"/>
<!-- Use xalan copy from JMeter lib directory to ensure consistent processing with Java 1.4+ -->
<path id="xslt.classpath">
<fileset dir="${lib.dir}" includes="xalan*.jar"/>
<fileset dir="${lib.dir}" includes="serializer*.jar"/>
</path>
<!--定义report任务,此任务依赖于xslt-report,copy-images这2个任务-->
<target name="report" depends="xslt-report,copy-images">
<echo>Report generated at ${report.datestamp}</echo>
</target>
<!--xslt-report是使用xslt来把xml文件转换成Html格式来显示-->
<!--_message_xalan 被xslt-report依赖,由它生成报告-->
<target name="xslt-report" depends="_message_xalan">
<echo>生成接口自动化测试报告</echo>
<tstamp><format property="report.datestamp" pattern="yyyy/MM/dd HH:mm"/></tstamp>
<!--in:将测试结果作为输入-->
<!--style:xslt定义的模板文件地址-->
<xslt
classpathref="xslt.classpath"
force="true"
in="${jmeter.result.dir}/jtl/${jmeter.result.name}.jtl"
out="${jmeter.result.dir}/html/${jmeter.result.name}.html"
style="${jmeter.home}/extras/jmeter-results-detail-report${style_version}.xsl">
<!-- style="${jmeter.home}/extras/jmeter.results.shanhe.me.xsl -->
<param name="showData" expression="${show-data}"/>
<param name="titleReport" expression="${report.title}"/>
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
</target>
<!--copy-images用来cpoy图片,xslt模板中的图片由copy-images任务copy到报告目录-->
<target name="copy-images" depends="verify-images" unless="samepath">
<!--生成Html报告时需要Copy图标到报告目录,expand.png展开图标,collapse.png收起图标-->
<copy file="${jmeter.home}/extras/expand.png" tofile="${jmeter.result.dir}/html/expand.png"/>
<copy file="${jmeter.home}/extras/collapse.png" tofile="${jmeter.result.dir}/html/collapse.png"/>
</target>
<target name="verify-images">
<condition property="samepath">
<equals arg1="${jmeter.result.dir}" arg2="${jmeter.home}/extras/" />
</condition>
</target>
<!--检查依赖-->
<condition property="xalan.present">
<and>
<!-- No need to check all jars; just check a few -->
<available classpathref="xslt.classpath" classname="org.apache.xalan.processor.TransformerFactoryImpl"/>
<available classpathref="xslt.classpath" classname="org.apache.xml.serializer.ExtendedContentHandler"/>
</and>
</condition>
<target name="_message_xalan" unless="xalan.present">
<echo>Cannot find all xalan and/or serialiser jars</echo>
<echo>The XSLT formatting may not work correctly.</echo>
<echo>Check you have xalan and serializer jars in ${lib.dir}</echo>
</target>
<path id="lib_classpath">
<fileset dir="${basedir}/">
<include name="mail*.jar" />
<include name="activation*.jar" />
<include name="commons-email*.jar" />
<include name="ant-contrib*.jar" />
</fileset>
</path>
<!--仅仅打印前面定义的变量的值,检查是否如你所愿,在定义变量时做调试用,可以去掉-->
<!--target name="mail">
<for list="hanxm@thunisoft.com" param="tmp" >
<sequential>
<echo>message @{tmp}</echo>
<mail mailhost="smtp.thunisoft.com" mailport="25" ssl="false" subject="ant mail" messagemimetype="text/html" user="zhangjn" password="xxxx" tolist="@{tmp}">
<from address="zhangjn@thunisoft.com" />
<fileset dir="${jmeter.result.html.dir}">
<include name="*.html" />
<include name="*.png" />
</fileset>
<message>支持多人同时发邮件!!<br /><br /></message>
</mail>
</sequential>
</for>
</target-->
<echo>jmeter.home = ${jmeter.home}</echo>
</project>
修改jmeter.properties文件如下部分,都改成true,让报告输出的内容更详细
jmeter.save.saveservice.data_type=true
jmeter.save.saveservice.label=true
jmeter.save.saveservice.response_code=true
# response_data is not currently supported for CSV output
jmeter.save.saveservice.response_data=false
# Save ResponseData for failed samples
jmeter.save.saveservice.response_data.on_error=false
jmeter.save.saveservice.response_message=true
jmeter.save.saveservice.successful=true
jmeter.save.saveservice.thread_name=true
jmeter.save.saveservice.time=true
jmeter.save.saveservice.subresults=true
jmeter.save.saveservice.assertions=true
jmeter.save.saveservice.latency=true
# Only available with HttpClient4
jmeter.save.saveservice.connect_time=true
jmeter.save.saveservice.samplerData=false
jmeter.save.saveservice.responseHeaders=false
jmeter.save.saveservice.requestHeaders=false
jmeter.save.saveservice.encoding=false
jmeter.save.saveservice.bytes=true
# Only available with HttpClient4
jmeter.save.saveservice.sent_bytes=true
jmeter.save.saveservice.url=true
jmeter.save.saveservice.filename=false
jmeter.save.saveservice.hostname=false
jmeter.save.saveservice.thread_counts=true
jmeter.save.saveservice.sample_count=false
jmeter.save.saveservice.idle_time=true
这俩个也ctrl F找出来改下
jmeter.save.saveservice.output_format=xml (csv改为xml)
server.rmi.ssl.disable=true (false改为true)
测试运行
在以上步骤都完成后,进入script目录,直接运行ant命令
[图片上传失败...(image-43ba7f-1658731744869)]
提示BUILD SUCCESSFUL,即运行成功
可下载html查看html形式的测试报告,也可以通过jtl在jmeter里用查看结果树查看
jenkins有多种安装方式,我这里使用的是rpm安装
下载jenkins的rpm包
下载地址:https://jenkins.io/zh/download/或者https://mirrors.tuna.tsinghua.edu.cn/jenkins/redhat-stable/
安装rpm包及配置
安装:
rpm -ivh jenkins-2.358-1.1.noarch.rpm
配置
vim /etc/sysconfig/jenkins 修改端口号,8080有可能被占用
JENKINS_PORT=“8090”
vim /usr/lib/systemd/system/jenkins.service同步修改里面的端口号
vi /etc/init.d/jenkins 编辑Jenkins配置文件,添加jdk的Java路径

重新配置的端口可能没有开放,这里需要开放端口
# 开启防火墙
systemctl start firewalld
# 开放指定端口
firewall-cmd --permanent --zone=public --add-port=8090/tcp
# 重启防火墙
Firewalls-cmd --reload
netstat -ntlp //查看当前所有tcp端口·
netstat -ntulp |grep 8090 //查看所有8090端口使用情况·
启动
# 重新加载配置
systemctl daemon-reload
# 启动
systemctl start jenkins
# 查看jenkins状态
systemctl status jenkins.service
安装好之后,打开浏览器,输入http://服务器IP:8090/,进入jenkins页面

点击系统管理->插件管理,在可选插件依次安装Ant Plugin、HTML Publisher plugin、Groovy、Email Extension
点击系统管理->系统设置,进入到这个页面,编辑全局属性
添加环境变量ANT_HOME和JAVA_HOME

找到Ant,添加ant的名字,和ANT_HOME路径
[图片上传失败...(image-f9622f-1658731744869)]

增加构建操作,选择Execute system Groovy script在在命令行输入
System.setProperty("hudson.model.DirectoryBrowserSupport.CSP", "script-src 'unsafe-inline'")
这个命令是用于处理测试报告样式无法加载问题的
再增加加构建操作,Invoke Ant选择ant版本,需要运行的节点填写你build.xml文件中的节点,BuildFile就选择脚本目录下面的build.xml的路径

增加构建后操作,选择Publish HTML reports
HTML directory to archive,填写包含存放路径
Index page[s],填写报告名字,如果有多个报告,可以填写*.html

点击构建触发器->定时构建

* 匹配范围内所有值
M-N 匹配M~N范围内所有值
M-N/X 或者 */X 在指定M~N范围内或整个有效区间内每隔X构建一次
A,B,...,Z 匹配多个值

每隔5分钟构建一次
H/5 * * * *
每两小时构建一次
H H/2 * * *
每天中午12点定时构建一次
H 12 * * *
每天下午18点定时构建一次
H 18 * * *
在每个小时的前半个小时内的每10分钟
H(0-29)/10 * * * *
每两小时45分钟,从上午9:45开始,每天下午3:45结束
45 9-16/2 * * 1-5
每两小时一次,每个工作日上午9点到下午5点(也许是上午10:38,下午12:38,下午2:38,下午4:38)
H H(9-16)/2 * * 1-5
很好奇,就使用rubyonrails自动化单元测试而言,你们正在做什么?您是否创建了一个脚本来在cron中运行rake作业并将结果邮寄给您?git中的预提交Hook?只是手动调用?我完全理解测试,但想知道在错误发生之前捕获错误的最佳实践是什么。让我们理所当然地认为测试本身是完美无缺的,并且可以正常工作。下一步是什么以确保他们在正确的时间将可能有害的结果传达给您? 最佳答案 不确定您到底想听什么,但是有几个级别的自动代码库控制:在处理某项功能时,您可以使用类似autotest的内容获得关于哪些有效,哪些无效的即时反馈。要确保您的提
我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当
我有一个围绕一些对象的包装类,我想将这些对象用作散列中的键。包装对象和解包装对象应映射到相同的键。一个简单的例子是这样的:classAattr_reader:xdefinitialize(inner)@inner=innerenddefx;@inner.x;enddef==(other)@inner.x==other.xendenda=A.new(o)#oisjustanyobjectthatallowso.xb=A.new(o)h={a=>5}ph[a]#5ph[b]#nil,shouldbe5ph[o]#nil,shouldbe5我试过==、===、eq?并散列所有无济于事。
我有一些Ruby代码,如下所示:Something.createdo|x|x.foo=barend我想编写一个测试,它使用double代替block参数x,这样我就可以调用:x_double.should_receive(:foo).with("whatever").这可能吗? 最佳答案 specify'something'dox=doublex.should_receive(:foo=).with("whatever")Something.should_receive(:create).and_yield(x)#callthere
Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/
我遵循MichaelHartl的“RubyonRails教程:学习Web开发”,并创建了检查用户名和电子邮件长度有效性的测试(名称最多50个字符,电子邮件最多255个字符)。test/helpers/application_helper_test.rb的内容是:require'test_helper'classApplicationHelperTest在运行bundleexecraketest时,所有测试都通过了,但我看到以下消息在最后被标记为错误:ERROR["test_full_title_helper",ApplicationHelperTest,1.820016791]test
我已经构建了一些serverspec代码来在多个主机上运行一组测试。问题是当任何测试失败时,测试会在当前主机停止。即使测试失败,我也希望它继续在所有主机上运行。Rakefile:namespace:specdotask:all=>hosts.map{|h|'spec:'+h.split('.')[0]}hosts.eachdo|host|begindesc"Runserverspecto#{host}"RSpec::Core::RakeTask.new(host)do|t|ENV['TARGET_HOST']=hostt.pattern="spec/cfengine3/*_spec.r
我在app/helpers/sessions_helper.rb中有一个帮助程序文件,其中包含一个方法my_preference,它返回当前登录用户的首选项。我想在集成测试中访问该方法。例如,这样我就可以在测试中使用getuser_path(my_preference)。在其他帖子中,我读到这可以通过在测试文件中包含requiresessions_helper来实现,但我仍然收到错误NameError:undefinedlocalvariableormethod'my_preference'.我做错了什么?require'test_helper'require'sessions_hel
我正在玩HTML5视频并且在ERB中有以下片段:mp4视频从在我的开发环境中运行的服务器很好地流式传输到chrome。然而firefox显示带有海报图像的视频播放器,但带有一个大X。问题似乎是mongrel不确定ogv扩展的mime类型,并且只返回text/plain,如curl所示:$curl-Ihttp://0.0.0.0:3000/pr6.ogvHTTP/1.1200OKConnection:closeDate:Mon,19Apr201012:33:50GMTLast-Modified:Sun,18Apr201012:46:07GMTContent-Type:text/plain
只是想确保我理解了事情。据我目前收集到的信息,Cucumber只是一个“包装器”,或者是一种通过将事物分类为功能和步骤来组织测试的好方法,其中实际的单元测试处于步骤阶段。它允许您根据事物的工作方式组织您的测试。对吗? 最佳答案 有点。它是一种组织测试的方式,但不仅如此。它的行为就像最初的Rails集成测试一样,但更易于使用。这里最大的好处是您的session在整个Scenario中保持透明。关于Cucumber的另一件事是您(应该)从使用您的代码的浏览器或客户端的角度进行测试。如果您愿意,您可以使用步骤来构建对象和设置状态,但通常您