捞起月亮的渔民 發表於 2023-7-3 00:00:00

JMeter对数据库的查询操作步骤详解

<div id="navCategory"><h5 class="catalogue">目录</h5><ul class="first_class_ul"><li>
        1、使用“用户自定义变量”实现参数化</li><li>
        2、 在sql query中使用占位符传递参数</li><li>
        3、variables names参数的使用方法</li><li>
        4、result variable name参数使用方法</li><li>
        5、总结:</li></ul></div><p>
        提示:</p>
<p>
        关于jmeter如何连接mysql数据库,前面文章已经详解的讲解过了。因为配置数据库连接是比较固定的步骤,这里就不重复讲解了。</p>
<p>
        本篇文章主要详细说明,使用<code>jdbc request</code>组件,如何对数据库进行查询的各种操作。</p>
<p>
        jmeter中查询语句的操作步骤:</p>
<ul>
<li>
                添加测试计划。</li>
        <li>
                添加线程组,设置线程组的次数。</li>
        <li>
                添加<code>jdbc connection configuration</code>组件,配置数据库连接。</li>
        <li>
                添加<code>jdbc request</code>请求,编写sql语句,使用参数化。运行脚本,发送sql请求。</li>
        <li>
                添加察看结果树,查看结果。</li>
</ul>
<p class="maodian"></p><h2>
        1、使用“用户自定义变量”实现参数化</h2>
<p>
        即:在<code>sql query</code>使用参数化变量。</p>
<p>
        在jmeter中,有两个地方可以设置“用户自定义变量”。</p>
<p>
        一种是“测试计划”界面中设置“用户自定义变量”。</p>
<p>
        一种是添加配置元件中的“用户自定义变量”。</p>
<p>
        我们以“测试计划”为例。如下图:</p>
<p>
        (1)在“测试计划”界面中设置“用户自定义变量”。</p>
<p>
        我们添加了一个自定义变量用户id,如下图:</p>
<p>
        <img title="JMeter对数据库的查询操作步骤详解" alt="JMeter对数据库的查询操作步骤详解" loading="lazy" src="https://zhuji.jb51.net/uploads/img/202305/bb0f1edf57b716faead30d74668420ed.jpg"></p>
<p>
        (2)在<code>jdbc request</code>界面的<code>sql query</code>中,使用<code>${变量名}</code>的方式进行引用。</p>
<ol>
<li>
                我们在<code>varíable name</code>填写对应的数据库配置名称,与<code>jdbc connection configuration</code>组件中的<code>varíable name</code>对应。</li>
        <li>
                <code>query type</code>:选择<code>select statement</code>,因为我们只进行一条查询的sql语句。</li>
        <li>
                编写sql语句,并使用<code>${变量名}</code>方式引用参数化变量。</li>
</ol>
<p>
        如下图所示:</p>
<p>
        <img title="JMeter对数据库的查询操作步骤详解" alt="JMeter对数据库的查询操作步骤详解" loading="lazy" src="https://zhuji.jb51.net/uploads/img/202305/155b8015dbee47a369f7f3ddd64ee4ce.jpg"></p>
<p class="maodian"></p><h2>
        2、 在sql query中使用占位符传递参数</h2>
<p>
        传递的参数值有常量和变量之分。</p>
<p>
        (1)传递的参数值是常量</p>
<p>
        传递2个常量:用户id=3,用户名=孙悟空。</p>
<p>
        需要注意:</p>
<ol>
<li>
                如果我们需要发送带有占位符的sql语句,<code>query type</code>:需要选择<code>prepared select statement</code>。</li>
        <li>
                <code>parameter values</code>参数值和<code>parameter types</code>参数类型,都必须要填写(参数类型与表设计结构中的类型一致即可)。如果有多个占位符,就需要有多组数据,之间用逗号分隔。</li>
        <li>
                发送sql请求时,第一个参数会自动赋值给第一个占位符,以此类推,注意参数的编写顺序。</li>
</ol>
<p>
        如下图所示:</p>
<p>
        <img title="JMeter对数据库的查询操作步骤详解" alt="JMeter对数据库的查询操作步骤详解" loading="lazy" src="https://zhuji.jb51.net/uploads/img/202305/225cb21d8ffc74aec08edff98ac0aa40.jpg"></p>
<p>
        (2)传递的参数值是变量</p>
<p>
        也就是占位符所接收的参数是一个参数化变量。我们把对应常量的位置,变成参数化变量即可,其他同上。</p>
<p>
        如下图所示:</p>
<p>
        <img title="JMeter对数据库的查询操作步骤详解" alt="JMeter对数据库的查询操作步骤详解" loading="lazy" src="https://zhuji.jb51.net/uploads/img/202305/544acd4eba7cb95d17e238d0cdfc0f32.jpg"></p>
<p>
        各种形式的参数化可以这样使用。关于参数化相关知识,前面文章有详细说明。</p>
<p class="maodian"></p><h2>
        3、variables names参数的使用方法</h2>
<p>
        <code>variables names</code>参数的作用是,把sql语句查询出来的数据保存到变量中。一般查询返回几个字段,就用几个变量来进行接收,不同的变量之间用逗号隔开。</p>
<p>
        jmeter官网给的解释是:如果给这个参数设置了值,它会保存sql语句返回的数据和返回数据的总行数。</p>
<p>
        假如,sql语句返回2行,3列的数据,且<code>variables names</code>中设置为<code>a,b,c</code>,那么如下变量会被设置为:</p>
<blockquote>
        <p>
                a_#=2     # a列的总行数<br>
                a_1=3     # a列的第一个数据,也就是第1列, 第1行的数据<br>
                a_2=4     # a列的第二个数据,也就是第1列, 第2行的数据<br>
                b_#=2     # b列的总行数<br>
                b_1=sunwukong@1268.com    # b列的第一个数据,也就是第2列, 第1行的数据<br>
                b_2=zhubajie@1268.com     # b列的第二个数据,也就是第2列, 第2行的数据<br>
                c_#=2     # c列的总行数<br>
                c_1=孙悟空    # c列的第一个数据,也就是第3列, 第1行的数据<br>
                c_2=猪八戒    # c列的第二个数据,也就是第3列, 第2行的数据</p>
</blockquote>
<p>
        说明:</p>
<blockquote>
        <p>
                如果返回结果为0,那么<code>a_#</code>和<code>c_#</code>会被设置为0,其它变量不会设置值。</p>
        <p>
                如果第一次请求返回6行数据,第二次请求只返回3行数据,那么第一次那多的3行数据,在线程变量中会被清除。</p>
        <p>
                可以使用<code>${a_#}</code>、<code>${a_1}</code>来获取相应的值,作为参数化数据进行传递。</p>
        <p>
                可以添加<code>debug sampler</code>组件,来查看参数是否获取到了。</p>
</blockquote>
<p>
        示例:</p>
<p>
        (1)<code>jdbc request</code>组件界面内容</p>
<p>
        在<code>variable names</code>中定义接收数据的变量名,多个变量名之间用逗号分隔。</p>
<p>
        如下图所示:</p>
<p>
        <img title="JMeter对数据库的查询操作步骤详解" alt="JMeter对数据库的查询操作步骤详解" loading="lazy" src="https://zhuji.jb51.net/uploads/img/202305/54cf0447eaf9076474c869ed918b158d.jpg"></p>
<p>
        (2)查看结果</p>
<p>
        添加一个取样器<code>debug sampler</code>用来查看输出的结果。(<code>debug sampler</code>组件可以查看到jmeter脚本运行中所有的变量)</p>
<p>
        <code>jdbc request</code>请求结果,如下图所示:</p>
<p>
        <img title="JMeter对数据库的查询操作步骤详解" alt="JMeter对数据库的查询操作步骤详解" loading="lazy" src="https://zhuji.jb51.net/uploads/img/202305/7fe1c0447f55676b6d87dc9bd80587b6.jpg"></p>
<p>
        查看<code>debug sampler</code>中的输出结果,如下图所示:</p>
<p>
        <img title="JMeter对数据库的查询操作步骤详解" alt="JMeter对数据库的查询操作步骤详解" loading="lazy" src="https://zhuji.jb51.net/uploads/img/202305/edc88e2a02a0714580054fea7c531305.jpg"></p>
<p>
        我们从上图中可以看到,jmeter把从数据库中查询出来的数据,存储在线程变量中了。</p>
<p>
        提示:</p>
<p>
        <code>a</code>代表第一列所有的数据,<code>a_#</code>可以获取到第一列的行数。<code>a_n</code>可以获得第一列第n行的数据。<code>b</code>和<code>c</code>的功能类似, 假如我们只需要第一列和第三列的数据,可以写成<code>a,,c</code>,中间的<code>,</code>不可以省略。</p>
<p class="maodian"></p><h2>
        4、result variable name参数使用方法</h2>
<p>
        如果给这个参数设置值,它会创建一个对象变量,保存所有返回的结果。</p>
<p>
        示例:</p>
<p>
        (1)<code>jdbc request</code>组件界面内容</p>
<p>
        在<code>result variable name</code>中定义接收数据的变量名。</p>
<p>
        如下图所示:</p>
<p>
        <img title="JMeter对数据库的查询操作步骤详解" alt="JMeter对数据库的查询操作步骤详解" loading="lazy" src="https://zhuji.jb51.net/uploads/img/202305/546215aa5d088a2bbefb3cfbef54a09d.jpg"></p>
<p>
        (2)查看结果</p>
<p>
        添加一个取样器<code>debug sampler</code>用来查看输出的结果。(<code>debug sampler</code>组件可以查看到jmeter脚本运行中所有的变量)</p>
<p>
        <code>jdbc request</code>请求结果,如下图所示:</p>
<p>
        <img title="JMeter对数据库的查询操作步骤详解" alt="JMeter对数据库的查询操作步骤详解" loading="lazy" src="https://zhuji.jb51.net/uploads/img/202305/8e0a95c927e5554059c3d5c784527da8.jpg"></p>
<p>
        查看<code>debug sampler</code>中的输出结果,如下图所示:</p>
<p>
        <img title="JMeter对数据库的查询操作步骤详解" alt="JMeter对数据库的查询操作步骤详解" loading="lazy" src="https://zhuji.jb51.net/uploads/img/202305/f2b42625203cca0aae29d26cbf497f9a.jpg"></p>
<p>
        (3)数据处理</p>
<p>
        上面查看到的结果集,我们如何应用里面的数据呢?</p>
<p>
        我们可以创建一个<code>beanshell</code>取样器,也可以在<code>jdbc request</code>取样器下一级添加后置处理器<code>beanshell postprocessor</code>组件。</p>
<p>
        在里边编写如下代码,来获取需要的指定数据,提供给后面的接口请求使用。</p>
<p>
        <img title="JMeter对数据库的查询操作步骤详解" alt="JMeter对数据库的查询操作步骤详解" loading="lazy" src="https://zhuji.jb51.net/uploads/img/202305/6a08c709febf57a71331f99d11f3012d.jpg"></p>
<p>
        对象中具体数据的获取方法:<code>columnvalue = vars.getobject("resultobject").get(0).get("column name")</code></p>
<p class="maodian"></p><h2>
        5、总结:</h2>
<p>
        以上我们就把<code>parameter values</code>、<code>parameter types</code>、<code>variable names</code>、<code>result variable name</code>的使用方式进行了说明。</p>
<p>
        在日常工作中,可以举一反三,灵活使用。</p>
<p>
        6、注意事项:</p>
<p>
        (1)<code>the server time zone value</code>服务器时区异常</p>
<p>
        如果报错,如下:</p>
<blockquote>
        <p>
                cannot create poolableconnectionfactory (the server time zone value '???��������??��??' is unrecognized or represents more than one time zone. you must configure either the server or jdbc driver (via the servertimezone configuration property) to use a more specifc time zone value if you want to utilize time zone support.)</p>
</blockquote>
<p>
        解决方法:数据库连接url后面加 <code>servertimezone=gmt</code>或<code>servertimezone=gmt%2b8</code>,即可解决。</p>
<p>
        (2)执行多条sql语句</p>
<p>
        执行多条sql语句时,查询语句<code>select</code>和<code>update</code>、<code>insert</code>语句不能在同一个<code>jdbc request</code>组件中执行。</p>
<p>
        当执行多条sql 语句时,每条语句后面加<code>;</code>。</p>
<p>
        并且在 <code>database url</code> 后增加一个参数<code>allowmultiqueries=true</code>,否则将不能够执行多条语句,报错。</p>
<p>
        (3)更新操作中文乱码</p>
<p>
        需要在 <code>database url</code> 后增加一个参数<code>characterencoding=utf-8</code>,这样就可以解决更新操作时候的中文乱码了。</p>
<p>
        提示:一定要设置为utf-8编码吗?不一定,要跟你的数据库的编码保持一致,就不会中文乱码了。</p>
<p>
        (4)<code>datebase url</code>添加参数规则</p>
<p>
        <code>datebase url</code>后增加参数,在<code>dbname</code>后加<code>?</code>,如有多个参数,每个参数用<code>&amp;</code>隔开,如:</p>
<p>
        <code>jdbc:mysql://127.0.0.1:3306/guest?servertimezone=gmt&amp;useunicode=true&amp;characterencoding=utf-8&amp;allowmultiqueries=true</code></p>
<p>
        参考:https://www.cnblogs.com/linbo3168/p/6039489.html</p>
<p>
        以上就是jmeter对数据库的查询操作 的详细内容,更多关于jmeter数据库操作 的资料请关注其它相关文章!</p>
<p>
        原文链接:https://www.cnblogs.com/liuyuelinfighting/p/14886158.html</p>
頁: [1]
查看完整版本: JMeter对数据库的查询操作步骤详解