*** 作步骤:
2、从 API 文档提取接口清单
3、编写测试用例并设计测试数据
4、编写测试脚本并导入测试数据
5、执行脚本并逐条比对每条测试数据的实际结果与预期结果是否一致
各步骤主要实现:
1、指定接口功能测试相关测试计划
对程序不同模块进行任务划分,一般包括: 模块以及相关描述,指定该模块主要责任人,工期,预期产出以及当前进度等
2、从 API 文档提取接口清单
API 文档对各个接口实现具有完整且详细的流程说明,以及举例,但是对于我们测试而言,内容相对冗余,测试前期,一般会对API文档的各个接口,进行简化,压缩,提取接口测试时必须数据,以提高接口测试效率,其中简化压缩的结果就是接口清单
3、编写测试用例并设计测试数据
功能测试时,模拟用户的多样性 *** 作设计测试数据是核心实现之一,该过程大致通过两步骤实现:
步骤1: 设计测试用例,该过程是抽象的非具体的实现,是要声明预期使用那些类型的测试数据,而不设计具体数据,设计测试用例时原则主要有如下几点:
a)、覆盖所有必选参数
b)、组合可选参数
c)、设计边界值数据
d)、设计超出范围的数据
e)、覆盖所有枚举值
f)、设计错误数据
g)、设计特殊符号数据
另外,设计时需要在测试用例中声明该接口访问的 URL,请求方式以及预期结果等
步骤2: 根据测试用例声明的数据类型,设计具体的测试数据,此过程为具体非抽象的实现,最终设计的数据一般会被保存在csv文件中
4、编写测试脚本并导入测试数据
功能测试时,需要针对同一功能脚本提交多条不同的测试数据,此实现中,一般使用 CSV Data Set Config 来读取批量数据,动态的参数化的获取并设置测试数据,可以提高测试效率
5、执行脚本并逐条比对每条测试数据的实际结果与预期结果是否一致
步骤4批量 *** 作完毕,要将提交的每条测试数据的执行结果与测试用例中对应的执行结果,相比对,如果预期与实际结果一致,一般无 BUG,不一致时,则可能有 BUG,当然对具体实现有疑议,可以写入备注
以上内容均来自传智播客论坛,还有相关配套视频课程。找不到就官网对话框领取。
在进行网页或应用程序后台接口开发时,一般要及时测试开发的接口能否正确接收和返回数据,对于单次测试,Postman插件是个不错的>
■ 为什么要关联
在客户端与服务器通信过程中,多个请求/响应间的数据会有相互依赖的关系。比如上一个请求返回的某些响应数据在后续的请求中需要用到。
下面是一些典型的例子:
1)比如第一次访问网站获取的session id在后续的请求都会将其传给网站;
2)服务器生成token返回给用户,在后续的请求中要带上token;
3)根据条件查询某记录,在查询结果集中选择记录进行 *** 作(比如删除)
但是有些通信协议是无状态的,不存在上下文相关性。多个请求/响应之间的数据不能直接进行传递;并且每次服务器返回的数据不是一成不变的,传递的数据不能通过硬编码(写死)保存来解决。
比如上面三种情况都会产生动态变化的数据:
1)session id的生命周期一般在关闭浏览器时就结束了,每次打开浏览器访问返回的session id并不相同;
2)token也有生命周期,一般也是随机,无状态的;
3)若查询条件参数化了或服务器返回的查询结果集改变了,后续的 *** 作可能会失败。在这些情况下,可以考虑将服务器返回的动态变化的数据保存到某个参数中,需要时再从中取出。
■ 关联原理
举个例子,看**,看**过程有如下步骤:
1购票
2验票
3观影
每个步骤可以看做一个请求/响应。观众相当于客户端,影院方相当于服务器。
过程如下图所示:
观众购买的**票可以看成服务器返回的响应数据,要验票通过才能入场观影。
观众购票相当于一个请求,验票是下一个请求,这需要将上一个请求返回的响应数据(**票)放在下一个请求中发送给服务器处理。
假设这部**非常精彩,想重新再看一次,因为**票只能使用一次,观众必须重新购票,才能验票通过入场;使用第一次购买的**票入场肯定会被拒之门外。
为了解决这个问题,可以考虑做如下假设:
每次将购买的**票放入随身携带的LV钱包,并且在放入之前将使用过的票丢弃,以防止入场时掏错票;入场的时候,从钱包中取出票来验票,这样就万无一失了。
将**票放入钱包中,相当于将服务器返回的数据保存起来了,这里钱包就是保存关联数据的参数。
■ 关联的定义
将服务器返回的数据包中满足条件的数据保存到一个参数中的过程。
怎样将服务器返回的数据保存起啦,JMeter中可以使用后置处理器来处理关联数据,常见的方法有:
1正则表达式提取器
2JSON提取器
■ 需要关联数据的特征
怎样确定哪些数据是需要做关联的,可以从关联数据的特征来识别出这些数据。关联数据有如下三个特征:
1服务器返回
需要关联的数据一定是从服务器返回的。
客户端输入的数据不需要进行关联,比如输入的用户名与密码。此特征是必选的。
2数据会再次发送给服务器处理
保存上一个请求响应的数据,其目的是为了将其用于下一个请求中,否则保存起来没有意义。此特征是可选特征,也就是说不再次发送也是可以保存数据进行关联的。
3数据动态变化
上一个请求响应的数据若不会动态变化,完全可以写死在脚本中,不需要花力气额外保存再次取出。正是由于每次返回的数据动态变化,我们需要根据某种规则将这些动态变化的数据找出来保存,然后会取出实际返回的数据。但此特征也是可选的。不动态变化一样可以保存进行关联,但意义不大。
JMeter通过内嵌的Apache Jakarta ORO软件来解析处理正则表达式。
Jakarta-ORO是用于处理文本的一组Java类,是目前功能最全性能最好的正则表达式API之一,它提供兼容Perl5类型的正则表达式。
■ 单行模式与多行模式
■ 元字符
■ 扩展正则表达式
■ 配置项
Apply to:
与响应断言中用法一致,不再赘述。
Field to check:
○ Body
Response Body,比如>
不需要这么麻烦,jmeter配置文件中可以设置自动保存cookie变量,具体如下:
在bin目录下的jmeterproperties,搜CookieManagersavecookies,把后面的值改为true,去掉行首的#号,然后保存后重启jmeter。
在需要取Cookie的线程里添加一个>
经过上述 *** 作,执行线程之后,获取到的cookie就会被保存在线程变量里,具体的格式为COOKIE_xxxx,其中xxxx为具体的实际cookie名;这样在同一个线程内其它 *** 作组件都是可以直接通过${COOKIE_xxxx}来获取的。你可以尝试用Debug Sample来测试${COOKIE}值是不是有取到等候后cookie 中保存的jsession值。
meter中,接口自动化的关键在于参数关联。比如需要登录的接口,如何调用登录口令一个增删改查的闭环,如何将接口参数上下传递下面就以实际的例子来仔细说一说
1:登录接口
这里有一个实际的登录接口,在响应中返回了一串token,如下图
那么我们在接下来的接口-经验库列表中,就必须带入这一串token,否则响应报错,如下图所示
如何获取登录的口令呢这里详细说明一下,如图所示
观察请求头,发现传入了一串token,并且响应结果正确
自此,一个完整的登录关联就结束了。后续接口直接调用该token就可以。我们接下来继续说其它的参数关联
比如一个增删改查流程,想要做自动化检验就必须形成一个闭环,那么删除-修改-查看就必须调用同一个必填参数,例如唯一性的id。
先新增一个经验库,可以看到结果中返回了一个id,我在后续接口中都必须调用此唯一性的id
接下来写一个正则将其取出,注意与之前token正则的不同之处
后续接口可以调用此参数,并正确响应
好了,一个完整的登录-查看-删除的流程到这里就可以结束了
引用名称: 定义一个变量,供后续请求引用
一般(+)和()能够满足我们80%的使用场景。所以,一般的正则表达式都可以写成下面这2种
左边界(+)右边界
左边界()右边界
left对应匹配目标的起始字符
right对应匹配目标的结束字符
正则表达式: 利用正则将需要的数据提取出来
() 括起来的部分就是需要提取的,对于你要提的内容需要用小括号括起来
点号表示匹配任何字符串
? 在找到第一个匹配项后停止
模板 :用$$引用起来,如果在正则表达式中有多个正则表达式(多个括号括起来),则可以是 等,表示提取第N个括号里面的值
匹配数字 -1: 表示取所有返回值,此时提取结果是一个数组,其余正整数代表第几个匹配的内容提取出来。如果匹配数字选择的是-1,后续还可以通过 {XXX_2}来取第2个匹配的内容。
匹配数字1:表示取第一个返回值
匹配数字0:表示随机取一个返回值
缺省值 :正则匹配失败时取的值
例1:提取第一个Name
例2:提取全部Name
例3:表达式同时提取Name和population,并传出两个参数
例4:条件判断取值
提取population=800的城市
加入“后置处理器”->“正则表达式提取器”:引用名称即使用的参数名;填入正则表达式;模板选取匹配的组;匹配数字为匹配的个数,负数表示全部匹配;缺省值为没有匹配到时的取值。示例中用正则表达式匹配出产品id作为后续使用的参数。提取到的参数,调用时用${product_id_1},${product_id_2},${product_id_3}……;如果想要得到匹配出的参数的个数,用${product_id_matchNr};如果想随机选取其中一个,只需将匹配数字设为0,使用${product_id}调用即可。可以一次匹配多组;示例中只匹配了一个,假如正则表达式为name="chkProductIds" id="chk(+)" value="(+)",就会有两组参数;想获得匹配到的组个数用${product_id_g};模板针对的是匹配到的字符串再做组的区分,比如希望${product_id}取出的是第二组参数的值,用$2$。
以上就是关于请问Jmeter进行接口功能测试 *** 作步骤是怎样的全部的内容,包括:请问Jmeter进行接口功能测试 *** 作步骤是怎样的、使用Jmeter进行http接口性能测试、JMeter关联之正则表达式提取器等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)