banxia_momei 2024-04-28 15:07 采纳率: 0%
浏览 178

jmeter怎么能够让接口按照顺序执行

关于#压力测试#的问题: jmeter压测时怎么能够让接口按照顺序执行

  • 写回答

4条回答 默认 最新

  • 专家-赤兔[在线] 全栈领域优质创作者 2024-04-28 15:07
    关注

    引自免费微信小程序:皆我百晓生

    在JMeter中,通过默认设置,所有的请求都会并发执行,这可能并不是每次测试都需要的场景。如果你想要让接口按照特定的顺序执行,可以使用一个叫做“逻辑控制器(Logic Controllers)”的功能。这里推荐使用两种控制器来实现这个需求:

    1. 循环控制器(Loop Controller): 你可以将一系列请求放在一个循环控制器内,这样这些请求就会按照放入的顺序依次执行。

    2. 顺序控制器(Sequential Controller): 这个控制器会确保其子元素按照添加到控制器中的顺序执行。

    以下是详细的步骤:

    首先,打开你的JMeter测试计划,在测试计划的根目录下创建一个新的线程组(Thread Group)。然后,选择你需要的用户数、循环次数等参数配置好线程组。

    接下来,添加逻辑控制器。右键点击线程组,选择Add -> Logic Controller -> Loop ControllerSequential Controller。我们将以顺序控制器为例进行说明。

    1. 添加顺序控制器: 右键点击线程组,选择Add -> Logic Controller -> Sequential Controller

    2. 在顺序控制器内添加HTTP请求: 右键点击顺序控制器,选择Add -> Sampler -> HTTP Request,并为每个接口设置适当的URL、方法(GET、POST等)、参数等。

    3. 设置接口之间的依赖关系: 如果你想让某个请求在另一个请求之后执行,只需将它们正确地排列在顺序控制器内即可。JMeter会按照控制器内的顺序执行请求。

    4. 配置循环控制器(可选): 如果你想让整个序列重复执行,可以在顺序控制器外再添加一个循环控制器。同样,右键点击线程组,选择Add -> Logic Controller -> Loop Controller,并将循环控制器作为父级添加到顺序控制器上。然后,配置循环控制器的迭代次数。

    5. 执行测试计划: 完成上述步骤后,保存你的测试计划,然后从菜单栏选择Run -> Start 来运行你的测试计划。

    以下是一个简单的示例代码,展示了如何在JMX文件中配置顺序控制器和循环控制器:

    <?xml version="1.0" encoding="UTF-8"?>
    <jmeterTestPlan version="1.2" properties="2.13" jmeter="5.4.1">
        <hashTree>
            <ThreadGroup guiclass="ThreadGroupGui" testclass="ThreadGroup" testname="Thread Group" enabled="true">
                <stringProp name="ThreadGroup.on_sample_error">continue</stringProp>
                <elementProp name="ThreadGroup.main_controller" elementType="LoopController" guiclass="LoopControlPanel" testclass="LoopController" testname="Loop Controller" enabled="true">
                    <boolProp name="LoopController.continue_forever">false</boolProp>
                    <stringProp name="LoopController.loops">1</stringProp>
                </elementProp>
                <stringProp name="ThreadGroup.num_threads">1</stringProp>
                <stringProp name="ThreadGroup.ramp_time">1</stringProp>
                <longProp name="ThreadGroup.start_time">1647159000000</longProp>
                <longProp name="ThreadGroup.end_time">1647159300000</longProp>
                <boolProp name="ThreadGroup.scheduler">false</boolProp>
                <stringProp name="ThreadGroup.duration"></stringProp>
                <stringProp name="ThreadGroup.delay"></stringProp>
            </ThreadGroup>
            <HashTree>
                <LogicController guiclass="org.apache.jmeter.control.gui.SequenceControllerGui" testclass="org.apache.jmeter.control.SequenceController" testname="Sequence Controller" enabled="true"/>
                <HashTree>
                    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Request 1" enabled="true">
                        <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
                            <collectionProp name="Arguments.arguments"/>
                        </elementProp>
                        <stringProp name="HTTPSampler.domain">${server}</stringProp>
                        <stringProp name="HTTPSampler.port">${port}</stringProp>
                        <stringProp name="HTTPSampler.protocol">${protocol}</stringProp>
                        <stringProp name="HTTPSampler.path">${path_1}</stringProp>
                        <stringProp name="HTTPSampler.method">GET</stringProp>
                        <boolProp name="HTTPSampler.follow_redirects">true</boolProp>
                        <boolProp name="HTTPSampler.auto_redirects">false</boolProp>
                        <boolProp name="HTTPSampler.use_keepalive">true</boolProp>
                        <boolProp name="HTTPSampler.DO_MULTIPART_POST">false</boolProp>
                        <boolProp name="HTTPSampler.embedded_url_rewriter">false</boolProp>
                    </HTTPSamplerProxy>
                    <HTTPSamplerProxy guiclass="HttpTestSampleGui" testclass="HTTPSamplerProxy" testname="Request 2" enabled="true">
                        <elementProp name="HTTPsampler.Arguments" elementType="Arguments">
                            <collectionProp name="Arguments.arguments"/>
                        </elementProp>
                        <stringProp name="HTTPSampler.domain">${server}</stringProp>
                        <stringProp name="HTTPSampler.port">${port}</stringProp>
                        <stringProp name="HTTPSampler.protocol">${protocol}</stringProp>
                        <stringProp name="HTTPSampler.path">${path_2}</stringProp>
                        <stringProp name="HTTPSampler.method">POST</stringProp>
                        ...
                    </HTTPSamplerProxy>
                    <!-- 更多的HTTP请求... -->
                </HashTree>
            </HashTree>
        </hashTree>
    </jmeterTestPlan>
    

    在这个例子中,我们有一个线程组,里面包含了一个循环控制器和一个顺序控制器。顺序控制器里包含了两个HTTP请求,第一个是GET请求,第二个是POST请求。JMeter将会按照顺序执行这两个请求,并且根据循环控制器的配置,重复执行整个序列。

    注意:你需要替换上述代码中的${server}${port}${protocol}${path_1}${path_2} 等变量为你实际的服务器地址、端口、协议和路径信息。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 4月28日

悬赏问题

  • ¥15 35114 SVAC视频验签的问题
  • ¥15 impedancepy
  • ¥15 在虚拟机环境下完成以下,要求截图!
  • ¥15 求往届大挑得奖作品(ppt…)
  • ¥15 如何在vue.config.js中读取到public文件夹下window.APP_CONFIG.API_BASE_URL的值
  • ¥50 浦育平台scratch图形化编程
  • ¥20 求这个的原理图 只要原理图
  • ¥15 vue2项目中,如何配置环境,可以在打完包之后修改请求的服务器地址
  • ¥20 微信的店铺小程序如何修改背景图
  • ¥15 UE5.1局部变量对蓝图不可见