虚拟主机网站建设,linux 安装wordpress,分类信息的网站排名怎么做,网站建设的技术【超详细实战攻略】Jmeter逻辑控制器中if控制器、模块控制器、测试片段的使用方法 1 搭建测试对象1.1 禅道下载1.2 禅道安装1.3 运行禅道1.4 接口查看1.5 接口选择 2 Jmeter前置操作2.1 创建Jmeter线程组2.2 创建信息头管理器和请求默认值2.3 添加获取token接口2.4 添加监听器 … 【超详细实战攻略】Jmeter逻辑控制器中if控制器、模块控制器、测试片段的使用方法 1 搭建测试对象1.1 禅道下载1.2 禅道安装1.3 运行禅道1.4 接口查看1.5 接口选择 2 Jmeter前置操作2.1 创建Jmeter线程组2.2 创建信息头管理器和请求默认值2.3 添加获取token接口2.4 添加监听器 3 获取token并存入系统变量4 测试片段5 模块控制器6 if控制器6.1 需求分析6.2 if控制器说明6.3 获取系统变量6.4 添加获取用户列表接口6.5 提取账号和id6.6 if控制器-判断用户存在6.7 if控制器-判断用户不存在 7 测试计划效果 写作目的 1、本文主要是通过搭建禅道为测试对象然后介绍Jmeter的if控制器、模块控制器、测试片段的使用方法 2、仅作为简单的介绍不作为项目的实际参考依据具体的依据项目测试为准。 1 搭建测试对象
1.1 禅道下载
直接进入官网选择开源版进行下载根据自身电脑环境选择合适的版本本文是Windows版本 选择“Windows一键安装”下载即可。
1.2 禅道安装
下载后如下 双击运行选择安装目录我们安装在如下目录 点击Extract等待安装
1.3 运行禅道 安装完后在安装目录下有个exe文件双击打开 双击后会打开如下页面 点击“访问禅道”,或者输入http://127.0.0.1/index.php: 点击【开源版】进入登陆页面
1.4 接口查看
首次登录时登录信息如下
# 账号admin
# 密码123456首次登录需要修改密码修改成功后进入系统首页如下 点击左侧的导航栏中的【后台】点击【二次开发】 可以看到相关的API接口
1.5 接口选择
我们用以下几个接口来进行说明获取用户列表首先是获取登录token用于后续接口登录权限认证创建用户接口后获取用户的id删除用户接口时根据创建的用户id进行删除公共接口地址为
http://127.0.0.1/zentao/api.php/v1接口说明token获取/tokens创建用户/users删除用户/users/:id
2 Jmeter前置操作
2.1 创建Jmeter线程组 以此选择【测试计划】-【添加】-【线程用户】-【线程组】 命名为“线程组-登录获取token” 2.2 创建信息头管理器和请求默认值
创建http信息头管理器以此为【测试计划】-【添加】-【配置元件】-【HTTP信息头管理器】 创建后如下 点击底部的【添加】按钮添加头信息 创建http请求默认值以此为【测试计划】-【添加】-【配置元件】-【HTTP请求默认值】 创建后如下 设置协议、ip、端口等信息
2.3 添加获取token接口
在线程组下新建http请求以此为【线程组-登录获取token】-【添加】-【取样器】-【HTTP请求】 添加后如下并设置接口信息
2.4 添加监听器
在测试计划下添加监听器以此为【测试计划】-【监听器】-【查看结果树】 添加运行后如下
3 获取token并存入系统变量
在以上请求【HTTP请求-登录获取token】下创建【json提取器】以此为【HTTP请求-登录获取token】-【添加】-【后置处理器】-【JSON提取器】 提取规则如下目的是提取登录后返回的token值 添加后置处理器将提取的变量token加入系统变量以此为【HTTP请求-登录获取token】-【添加】-【后置处理器】-【BeanShell 后置处理程序】 写入如下内容将token加入系统变量中
${__setProperty(token,${token},)}4 测试片段 测试片段的作用类似分组的功能 我们可以把一些业务功能单元进行封装起来 比如这里创建一个名为【用户管理】的测试片段可以在模块控制器中进行调用 创建测试片段步骤以此为【线程组-登录获取token】-【添加】-【测试片段】-【测试片段】 创建后如下 注意创建的测试片段默认是禁止状态建议使用默认值只有当测试片段被模块控制器调用时才会执行不调用执行另外如果测试片段被启用那么它自身下的接口也会执行即使模块控制器没有调用测试片段。
5 模块控制器
以上创建了测试片段片段下可以放很多的接口数据那么如何让测试片段执行一种是启用测试片段不建议另一种就是通过模块控制器进行调用那模块控制器就是来调用测试片段的可以指定对应的测试片段进行执行我们创建一个模块控制器以此为【线程组-登录获取token】-【添加】-【逻辑控制器】-【模块控制器】 创建后要在下方选中执行的测试片段如下
6 if控制器
6.1 需求分析
前边基本把所有的步骤已经进行完了接下来就是添加需要执行的接口数据首先是获取登录后token传入接口的请求头这样才有权限这里获取token其实就是我们之前设置好的系统变量其次是添加需要执行的接口数据我们的逻辑是 ① 先判断创建的用户名是不是存在 ② 如果存在先调用删除用户接口 ③ 然后再调用创建用户接口 ④ 如果用户不存在直接调用创建用户接口。 6.2 if控制器说明
i控制器其实就是一个条件判断和代码中的if语句类似if控制器在这里的作用就是判断用户是否存在。
6.3 获取系统变量
在测试片段下添加请求头主要是获取系统变量token以此为【测试片段-用户管理】-【添加】-【配置元件】-【HTTP信息头管理器】 创建后点击下方的【添加】按钮获取系统变量token
6.4 添加获取用户列表接口
我们在测试片段下先获取用户列表以此为【测试片段-用户管理】-【添加】-【取样器】-【HTTP请求】 添加获取用户列表接口数据
6.5 提取账号和id
我们通过获取用户列表接口可以查看系统中有多少个用户比如运行上边的获取用户列表接口后可以看出有两个用户
admin、NoamaNelson用户列表接口的返回值如下
{page:1,total:2,limit:20,users:[{id:2,dept:0,account:NoamaNelson,realname:\u866b\u65e0\u6daf,role:,pinyin:,email:},{id:1,dept:0,account:admin,realname:admin,role:,pinyin:admin a,email:}]
}添加后置处理器提取账号和id提取的账号主要是用于判断这个账号是否存在提取id是如果账号存在后续通过id来删除用户以此为【HTTP请求-获取用户列表】-【添加】-【后置处理器】-【JSON提取器】 提取规则如下
$.users[?(.accountNoamaNelson)].account同样的方法添加提取器提取id
$.users[?(.accountNoamaNelson)].id6.6 if控制器-判断用户存在
添加if控制器假如用户存在以此为【测试片段-用户管理】-【添加】-【逻辑控制器】-【IF控制器】 控制器中添加如下内容
${__jexl3(${account} NoamaNelson)}如果用户存在我们先通过id删除用户以此添加删除用户的接口【IF 控制器-用户存在】-【取样器】-【HTTP请求】 添加删除接口数据 删除用户后再添加用户 添加用户数据为
{account:NoamaNelson,password:123456,realname:虫无涯
}6.7 if控制器-判断用户不存在 添加if控制器假如用户不存在以此为【测试片段-用户管理】-【添加】-【逻辑控制器】-【IF控制器】 注意这里的用户不存在判断依据就是提取的用户账号是error这个error描述是我们在提取用户账号的时候自己写的比如 那么如果用户用户存在就直接创建用户就行了
7 测试计划效果
通过以上我们就可以放心的去添加删除用户了使用if控制器在这里的好处是如果用户存在我们先删除后添加避免重复添加或报错的我们最后的整个测试计划如下 或者我们可以设计如下的效果 完整的脚本如下
?xml version1.0 encodingUTF-8?
jmeterTestPlan version1.2 properties5.0 jmeter5.6.3hashTreeTestPlan guiclassTestPlanGui testclassTestPlan testname测试计划elementProp nameTestPlan.user_defined_variables elementTypeArguments guiclassArgumentsPanel testclassArguments testname用户定义的变量collectionProp nameArguments.arguments//elementProp/TestPlanhashTreeHeaderManager guiclassHeaderPanel testclassHeaderManager testnameHTTP信息头管理器collectionProp nameHeaderManager.headerselementProp name elementTypeHeaderstringProp nameHeader.namecontent-type/stringPropstringProp nameHeader.valueapplication/json/stringProp/elementProp/collectionProp/HeaderManagerhashTree/ConfigTestElement guiclassHttpDefaultsGui testclassConfigTestElement testnameHTTP请求默认值stringProp nameHTTPSampler.domain127.0.0.1/stringPropstringProp nameHTTPSampler.protocolhttp/stringPropelementProp nameHTTPsampler.Arguments elementTypeArguments guiclassHTTPArgumentsPanel testclassArguments testname用户定义的变量collectionProp nameArguments.arguments//elementPropstringProp nameHTTPSampler.implementationHttpClient4/stringProp/ConfigTestElementhashTree/ResultCollector guiclassViewResultsFullVisualizer testclassResultCollector testname查看结果树boolProp nameResultCollector.error_loggingfalse/boolPropobjPropnamesaveConfig/namevalue classSampleSaveConfigurationtimetrue/timelatencytrue/latencytimestamptrue/timestampsuccesstrue/successlabeltrue/labelcodetrue/codemessagetrue/messagethreadNametrue/threadNamedataTypetrue/dataTypeencodingfalse/encodingassertionstrue/assertionssubresultstrue/subresultsresponseDatafalse/responseDatasamplerDatafalse/samplerDataxmlfalse/xmlfieldNamestrue/fieldNamesresponseHeadersfalse/responseHeadersrequestHeadersfalse/requestHeadersresponseDataOnErrorfalse/responseDataOnErrorsaveAssertionResultsFailureMessagetrue/saveAssertionResultsFailureMessageassertionsResultsToSave0/assertionsResultsToSavebytestrue/bytessentBytestrue/sentBytesurltrue/urlthreadCountstrue/threadCountsidleTimetrue/idleTimeconnectTimetrue/connectTime/value/objPropstringProp namefilename/stringProp/ResultCollectorhashTree/SetupThreadGroup guiclassSetupThreadGroupGui testclassSetupThreadGroup testnamesetUp 线程组-登录获取tokenintProp nameThreadGroup.num_threads1/intPropintProp nameThreadGroup.ramp_time1/intPropboolProp nameThreadGroup.same_user_on_next_iterationtrue/boolPropstringProp nameThreadGroup.on_sample_errorcontinue/stringPropelementProp nameThreadGroup.main_controller elementTypeLoopController guiclassLoopControlPanel testclassLoopController testname循环控制器stringProp nameLoopController.loops1/stringPropboolProp nameLoopController.continue_foreverfalse/boolProp/elementProp/SetupThreadGrouphashTreeHTTPSamplerProxy guiclassHttpTestSampleGui testclassHTTPSamplerProxy testnameHTTP请求-登录获取tokenstringProp nameHTTPSampler.path/zentao/api.php/v1/tokens/stringPropboolProp nameHTTPSampler.follow_redirectstrue/boolPropstringProp nameHTTPSampler.methodPOST/stringPropboolProp nameHTTPSampler.use_keepalivetrue/boolPropboolProp nameHTTPSampler.postBodyRawtrue/boolPropelementProp nameHTTPsampler.Arguments elementTypeArgumentscollectionProp nameArguments.argumentselementProp name elementTypeHTTPArgumentboolProp nameHTTPArgument.always_encodefalse/boolPropstringProp nameArgument.value{quot;accountquot;: quot;adminquot;, quot;passwordquot;: quot;Zb918110quot;}/stringPropstringProp nameArgument.metadata/stringProp/elementProp/collectionProp/elementProp/HTTPSamplerProxyhashTreeJSONPostProcessor guiclassJSONPostProcessorGui testclassJSONPostProcessor testnameJSON提取器-提取tokenstringProp nameJSONPostProcessor.referenceNamestoken/stringPropstringProp nameJSONPostProcessor.jsonPathExprs$.token/stringPropstringProp nameJSONPostProcessor.match_numbers1/stringPropstringProp nameJSONPostProcessor.defaultValueserror/stringProp/JSONPostProcessorhashTree/BeanShellPostProcessor guiclassTestBeanGUI testclassBeanShellPostProcessor testnameBeanShell 后置处理程序stringProp namefilename/stringPropstringProp nameparameters/stringPropboolProp nameresetInterpreterfalse/boolPropstringProp namescript${__setProperty(token,${token},)}/stringProp/BeanShellPostProcessorhashTree//hashTree/hashTreeThreadGroup guiclassThreadGroupGui testclassThreadGroup testname线程组-用户管理intProp nameThreadGroup.num_threads1/intPropintProp nameThreadGroup.ramp_time1/intPropboolProp nameThreadGroup.same_user_on_next_iterationtrue/boolPropstringProp nameThreadGroup.on_sample_errorcontinue/stringPropelementProp nameThreadGroup.main_controller elementTypeLoopController guiclassLoopControlPanel testclassLoopController testname循环控制器stringProp nameLoopController.loops1/stringPropboolProp nameLoopController.continue_foreverfalse/boolProp/elementProp/ThreadGrouphashTreeHeaderManager guiclassHeaderPanel testclassHeaderManager testnameHTTP信息头管理器collectionProp nameHeaderManager.headerselementProp name elementTypeHeaderstringProp nameHeader.nameToken/stringPropstringProp nameHeader.value${__property(token,,)}/stringProp/elementProp/collectionProp/HeaderManagerhashTree/ModuleController guiclassModuleControllerGui testclassModuleController testname模块控制器-用户管理collectionProp nameModuleController.node_pathstringProp name869052411测试计划/stringPropstringProp name869052411测试计划/stringPropstringProp name-578308503线程组-用户管理/stringPropstringProp name2078815177测试片段-用户管理/stringProp/collectionProp/ModuleControllerhashTree/TestFragmentController guiclassTestFragmentControllerGui testclassTestFragmentController testname测试片段-用户管理 enabledfalse/hashTreeHTTPSamplerProxy guiclassHttpTestSampleGui testclassHTTPSamplerProxy testnameHTTP请求-获取用户列表stringProp nameHTTPSampler.path/zentao/api.php/v1/users/stringPropboolProp nameHTTPSampler.follow_redirectstrue/boolPropstringProp nameHTTPSampler.methodGET/stringPropboolProp nameHTTPSampler.use_keepalivetrue/boolPropboolProp nameHTTPSampler.postBodyRawfalse/boolPropelementProp nameHTTPsampler.Arguments elementTypeArguments guiclassHTTPArgumentsPanel testclassArguments testname用户定义的变量collectionProp nameArguments.arguments//elementProp/HTTPSamplerProxyhashTreeJSONPostProcessor guiclassJSONPostProcessorGui testclassJSONPostProcessor testnameJSON提取器-提取账号stringProp nameJSONPostProcessor.referenceNamesaccount/stringPropstringProp nameJSONPostProcessor.jsonPathExprs$.users[?(.accountquot;NoamaNelsonquot;)].account/stringPropstringProp nameJSONPostProcessor.match_numbers1/stringPropstringProp nameJSONPostProcessor.defaultValueserror/stringProp/JSONPostProcessorhashTree/JSONPostProcessor guiclassJSONPostProcessorGui testclassJSONPostProcessor testnameJSON提取器-提取idstringProp nameJSONPostProcessor.referenceNamesid/stringPropstringProp nameJSONPostProcessor.jsonPathExprs$.users[?(.accountquot;NoamaNelsonquot;)].id/stringPropstringProp nameJSONPostProcessor.match_numbers1/stringPropstringProp nameJSONPostProcessor.defaultValueserror/stringProp/JSONPostProcessorhashTree//hashTreeIfController guiclassIfControllerPanel testclassIfController testnameIF 控制器-用户存在stringProp nameIfController.condition${__jexl3(quot;${account}quot; quot;NoamaNelsonquot;)}/stringPropboolProp nameIfController.evaluateAllfalse/boolPropboolProp nameIfController.useExpressiontrue/boolProp/IfControllerhashTreeHTTPSamplerProxy guiclassHttpTestSampleGui testclassHTTPSamplerProxy testnameHTTP请求-通过id删除用户stringProp nameHTTPSampler.path/zentao/api.php/v1/users/:${id}/stringPropboolProp nameHTTPSampler.follow_redirectstrue/boolPropstringProp nameHTTPSampler.methodDELETE/stringPropboolProp nameHTTPSampler.use_keepalivetrue/boolPropboolProp nameHTTPSampler.postBodyRawfalse/boolPropelementProp nameHTTPsampler.Arguments elementTypeArguments guiclassHTTPArgumentsPanel testclassArguments testname用户定义的变量collectionProp nameArguments.arguments//elementProp/HTTPSamplerProxyhashTree/HTTPSamplerProxy guiclassHttpTestSampleGui testclassHTTPSamplerProxy testnameHTTP请求-创建用户stringProp nameHTTPSampler.path/zentao/api.php/v1/users/stringPropboolProp nameHTTPSampler.follow_redirectstrue/boolPropstringProp nameHTTPSampler.methodPOST/stringPropboolProp nameHTTPSampler.use_keepalivetrue/boolPropboolProp nameHTTPSampler.postBodyRawtrue/boolPropelementProp nameHTTPsampler.Arguments elementTypeArgumentscollectionProp nameArguments.argumentselementProp name elementTypeHTTPArgumentboolProp nameHTTPArgument.always_encodefalse/boolPropstringProp nameArgument.value{quot;accountquot;: quot;NoamaNelsonquot;, quot;passwordquot;: quot;123456quot;, quot;realnamequot;: quot;虫无涯quot;}/stringPropstringProp nameArgument.metadata/stringProp/elementProp/collectionProp/elementProp/HTTPSamplerProxyhashTree//hashTreeIfController guiclassIfControllerPanel testclassIfController testnameIF 控制器-用户不存在stringProp nameIfController.condition${__jexl3(quot;${account}quot; quot;errorquot;)}/stringPropboolProp nameIfController.evaluateAllfalse/boolPropboolProp nameIfController.useExpressiontrue/boolProp/IfControllerhashTreeHTTPSamplerProxy guiclassHttpTestSampleGui testclassHTTPSamplerProxy testnameHTTP请求-创建用户stringProp nameHTTPSampler.path/zentao/api.php/v1/users/stringPropboolProp nameHTTPSampler.follow_redirectstrue/boolPropstringProp nameHTTPSampler.methodPOST/stringPropboolProp nameHTTPSampler.use_keepalivetrue/boolPropboolProp nameHTTPSampler.postBodyRawtrue/boolPropelementProp nameHTTPsampler.Arguments elementTypeArgumentscollectionProp nameArguments.argumentselementProp name elementTypeHTTPArgumentboolProp nameHTTPArgument.always_encodefalse/boolPropstringProp nameArgument.value{quot;accountquot;: quot;NoamaNelsonquot;, quot;passwordquot;: quot;123456quot;, quot;realnamequot;: quot;虫无涯quot;}/stringPropstringProp nameArgument.metadata/stringProp/elementProp/collectionProp/elementProp/HTTPSamplerProxyhashTree//hashTree/hashTree/hashTree/hashTree/hashTree
/jmeterTestPlan