全球讲的最好的jmeter接口自动化 avi-01
1,默认HTTP 可设置在线程组下(位置),作为父请求,子请求获取默认值
2,JSON Path Tester 获取值 Json Path Expresson $.args.user
3,POST 请求 消息体 格式: (“username”:“sss”)
全球讲的最好的jmeter接口自动化 avi-02
测试层: 底层单元测试,中间层接口测试,最顶层为UI测试
HTTPS: hyper text Transfer Protocol over SecureSocket Layer
GET 请求:url 进行传参,和 url 会用 ? 分隔,多个用 “&” 分隔;
POST 请求:用户数据的提交,存在请求体里进行传输,保证安全。
POST 请求 消息体 格式: (“username”:“sss”,“password”:“123456”)
Referer: 用户从该URL 代表的页面访问当前请求的页面
User-Agent :浏览器类型,如果Servlet 返回的内容与浏览器的类型有关,则该值非常有用。
Cookie: 这是重要的请求头信息之一。
From : 请求发送者的emial 地址,由一些特殊的Web客户端程序使用了,浏览器不会用到它。
Host: 初始URL 的主机和端口;
Accept-Language:浏览器所希望的语言种类,当服务器能够提供一种以上的语言版本时用到。
Authorization: 授权信息,通常出现在对服务器发送的 WWW-Authenticate头的应答中。
Context_Type: 表示后面的文档属于什么MIME类型。Servlet 默认为text/plain,但通常需要显示地指定为 text/html。由于需要设置 Context_Type,
因此 HttpServletResponse 提供了一个专用的方法 setContentType。
Request Body
即请求体,一般用于PSOT 请求中,主要定义向服务器提交的数据类型,而对于请求 Request Body 则为空。
Context_Type 提交数据方式
application/x-www-form-urlencoded Form 表单提交
multipart/form-data 表单文件上传提交
application/json 序列化 Json 数据提交
text/xml XML 数据提交
Response
即相应,由服务端返回给客户端。
Response Status Code
Response Headers
Response Body
1xx 服务器接收客户端消息,但没有接收完成,等待一段时间后,发送1xx状态码(很少出现)
2xx 成功。代表:200(成功)
3xx 重定向。代表:302(重定向),304(访问缓存)
4xx 客户端错误。代表:404(请求路径没有对应的资源) 405(请求方式没有对应的doXX方法)
5xx 服务端错误。代表:500(服务器内部出现异常)
JSON 对象
{"firstName":"John","lastNname":"Doc"}
优点
1,数据体积小,轻量级的数据交换
2,程序员编写更加容易
3,相对XML ,JSON 不需要考虑父节点,更易于机器的解析和生成
4,JSON支持多种编程语言,例如:Java,JavaScript,PHP,Python , C,C#等等。
缺点
1,过于严谨
2,代码对数据描述性差
3,代码不宜读
全球讲的最好的jmeter接口自动化 avi-03,04
断言
包括:响应内容包括需要匹配的内容,支持正则
匹配:响应内容完全匹配,不区分大小写,支持正则
Equals:响应内容完全等于,区分大小写,需要匹配的内容是字符串正则表达式
Substring:返回结果包含指定结果的字串,不支持正则
否:不进行匹配
Jmeter Bean Shell
定时器: BeanShell Timer
前置处理器: BeanShell PreProcessor
采样器: BeanShell Smapler
后置处理器: BeanShell PostProcessor
断言: BeanShell 断言
监听器: BeanShell Listener
Jmeter 在它的Beanshell 中内置了变量,用户可以通过这些变量与 jmeter 进行交互,其中主要的变量及其使用方法如下:
vars - (JMeterVariables)操作这个变量实际引用了JMeter线程中的局部变量,容器本质上是Map 它是测试用例与 BeanShell 交互的桥梁 ,常用方法:
//定义jmeter变量
vars.put(String key,String value);
//从 jmeter 中获取变量
vars.get(String key);
log:写入信息到 jmeter.log 文件,使用方法:log.info(“hello motuo”);
全球讲的最好的jmeter接口自动化 avi-05
CSV 数据文件变量
从外部 csv 文件读取数据出来作为变量。选择请求--添加--配置元件-- csv 数据文件设置
注意:创建 csv 文件最好不要用记事本,推荐Nodepad++,文件编码为 UTF-8
用户参数和 csv 不要重复
全球讲的最好的jmeter接口自动化 avi-06
正则表达式提取器
请求--添加--后置处理器--正则表达式提取器
根据 http-get 的响应,提取返回值中的 num 中
正则表达式配置表
模板:用$num$ 有多个匹配,num 表示第几个给变量,如:
$1$ 匹配到第一个值存储在变量中
匹配数字:0 代表随机取值,1 代表全部取值
缺省值:参数没用取到值,默认给的值(null一般习惯)
num':().+?)}
()要提取的值
. 匹配任意字符
+ 一次或多次
?在找到第一个匹配项后停止
更多匹配规则:https://www.runoob.com/regexp/regexp-syntax.html
其他请求从正则表达式提取器中取到的值名称,要与正则表达式提取器的引用名称一致
全球讲的最好的jmeter接口自动化 avi-07
循环控制器多请求发起
CaseNum apiType CaseName CasePriority url methods paramter expectValue
case001 HTTP GET request cmxy 1 /get GET user=cmxy cmxy
case002 HTTP POST request cmxy 1 /post POST user=yzp yzp
case003 HTTP GET request cmxy 1 /get GET user=xln xln
case004 HTTP POST request cmxy 1 /post POST user=xz xz
。。。
从csv 文件可以看出发送的请求很多,可利用循环控制器进行逻辑判断使用什么请求去发送,使用哪个方法去调用值,简单快捷
1,线程组下加入 HTTP请求默认值 设置要访问的同一个地址前缀
2,线程组下加入 循环控制器,根据发送请求的多少来进行设置循环次数
3,循环控制器下 加入逻辑控制器下的如果控制器,设置该控制器使用哪种请求(利用函数groovy来设定值${__groovy("${methods}"=="GET",)})
注意:1,先写"${methods}"=="GET",打开函数助手找到函数直接粘贴,生成函数,在粘贴覆盖之前赋的值
2,名称最好简洁一眼就能看出是访问哪个接口,利用函数获取值eg:名称:${CaseNum}-${CaseName}-${methods}
3,向服务器发送请求时 GET 和 POST 所带的值不一样,一个在路径中,POST在消息体中,其路径只保留url即可
4,添加 csv 文件,根据其需要的值进行设置匹配规则
5,断言 可设置 为 expectValue 的值
全球讲的最好的jmeter接口自动化 avi-08
HTTP Cookie 管理器
对 http 请求服务器会返回一个cookie, JmeterCookie 管理器会保存起来,方便后面使用同一个cookie,
每个 Jmeter 线程都有直接独立的 cookie保存区。
http://httpbin.org/cookies/set
http://httpbin.org/cookies
http://httpbin.org/cookies/delete
http://httpbin.org/cookies/set/{name}/{value}
线程组--添加--配置元件--HTTPCookie 管理器
结果树中可查看cookie值,Cookie管理器可设置具体域名,路径,安全性,标准模式,是否需要清除;
注意:Cookie管理器 可对第一次请求设置的cookie值和后续在管理器设置的cookie值都能进行保存;并返回给下一次请求;
全球讲的最好的jmeter接口自动化 avi-09
授权设置
接口不对外开放,可进行授权机制(Authorization)
授权过程验证您是否有权限访问服务器所需数据的权限。
Jmeter 提供授权类型,可以轻松在本地应用程序中处理身份验证协议
Basic auth
Digest auth
Basic auth
基本身份验证,简单授权类型,只需要验证用户名和密码即可访问服务器数据资源。
http://httpbin.org/bearer
http://httpbin.org/basic-auth/{user}/{passwd}
GET http://httpbin.org/basic-auth/yzp/2021
请求中会返回授权信息,Authorization: Basic NTF6eHc6ODg4OA== 而 “NTF6eHc6ODg4OA==”
这个数值就是用 用户名和密码 经过 Base64 编码后计算出来的
Digest auth
是一个简单的认证机制,也称 HTTP 摘要,采用hash加密方法,以避免用明文进行传输用户的口令,核实参与通信的双方都知道共享的一个口令;
http://httpbin.org/digest-auth/{qop}/{user}/{passwd}
{qop} 规定server 支持哪种保护方案,client 能够从列表列表中选择(auth,auth-int)
auth 仅表示对身份验证
auth-int 身份和完整性保护验证
algorithm 加密方式
http://httpbin.org/digest-auth/{qop}/{user}/{passwd}/{algorithm}/{stale_after}
http://httpbin.org/digest-auth/{qop}/{user}/{passwd}/{algorithm}
http://httpbin.org/hidden-basic-auth/{user}/{passwd}
全球讲的最好的jmeter接口自动化 avi-10
测试报告
打开 jmeter 目录 bin 下执行 cmd
执行命令:
jmeter -n -t httpbin_test.jmx -l httpbin.jtl -e -o C:\users\AnySan\Desktop\report
命令参数:
-n 以非 GUI 形式运行 jmeter
-t jmeter 脚本路径
-l result.jtl 运行结果保存路径(.jtl)此文件必须不存在
-e 在脚本运行结束后生成 html 报告
-o 用于存放 html 报告的目录,不加该参数默认生成到 bin\report-output
全球讲的最好的jmeter接口自动化 avi-11
自动化测试环境平台搭建
一个完整的接口自动化测试平台需要支持接口的自动执行,自动生成测试报告,以及持续集成,Jmeter 支持接口的测试,Ant 支持自动构建,而 Jenkins 支持持续集成,
所以三者结合在一起,构成一个完善的接口自动化测试平台。
环境准备
环境依赖
JDK 环境配置
Jmeter 安装
Ant 安装环境变量配置
Jenkins 安装
Ant 简介
Apache Ant 是一个将软件编译,测试,部署等步骤联系在一起加以自动化的一个工具,大多用于 Java 环境中的软件开发
下载安装
地址:http://ant.apache.org/bindownload.cgi
下载之后解压到任意路径
环境变量配置:
ANT_HOME D:\apache-ant-1.10.9
CLAsspATH ;%ANT_HOME%\lib;
win7: PATH ;%ANT_HOME%\bin;
win10:PATH %ANT_HOME%\bin
配置检测
cmd 窗口下输入命令
ant -version
Jenkins 安装
https://www.cnblogs.com/mecell224/p/12956059.html
平台搭建
依赖文件配置
1,首先在 Jmeter 目录下建一个文件夹 TestCase (文件夹名称不要使用下划线,空格字符),
并将 Jmeter 测试脚本放置到该文件中
2,将 Jmeter extra 文件中的 ant-jmeter-1.1.1.jar 放到 Ant 的 lib文件夹中
3,将 Jmeter extra 文件夹的 jmeter-results-detail-report_21.xsl, build.xml, collapse.png, expand.png
放到 ant 目录的 bin目录下面
<!-- html报告中时间显示为NAN,原因是ant中缺失了两个lib库 xalan-2.7.2.jar和serializer-2.7.2.jar ,
将这两个库拷贝到ant的lib目录下,或者在这里增加如下代码均可解决-->
build.xml 配置
在 Ant 的 bin 目录中 打开build.xml 找到以下内容
<property name="testpath" value="${user.dir}"/>
<property name="jmeter.home" value="${basedir}/.."/>
<property name="report.title" value="Load Test Results"/>
<!-- Name of test (without .jmx) -->
<property name="test" value="Test"/>
参数说明
testpath 测试计划,这里用于存放测试脚本,测试生成的文件,测试报告
jmeter.home Jmeter 目录路径
report.title 测试报告标题
test jmeter 测试脚本名称(无须后缀.jmx)
根据环境 修改配置
<property name="testpath" value="D:\jmeter\apache-jmeter-5.3\TestCase"/>
<property name="jmeter.home" value="D:\jmeter\apache-jmeter-5.3"/>
<property name="report.title" value="TestPlan01 Httpbin API Test Report"/>
<copy todir=""><copy/> 没有todir变量*****
将报告模板优化,使用jmeter-results-detail-report_30.xsl
默认模板jmeter-results-detail-report_21.xsl 改为_30.xsl
打开ant bin 下的 文件 build.xml
<!--报告配置-->
<!-- html报告中Date report这里的时间没有正确显示出来,原因是未设定report.datestamp 属性值-->
<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-detail-report_30.xsl">
<param name="dateReport" expression="${report.datestamp}"/>
</xslt>
jmeter 下的extras build.xml 修改 并将该目录下的文件 替换为 jmeter-results-detail-report_30.xsl
<condition property="style_version" value="_30">
Jenkins 安装
插件下载中心
http://updates.jenkins-ci.org/download/plugins/
Jenkins实例似乎已离线处理办法 https://www.amd5.cn/atang_4222.html