教你如何在JMeter中调用Python代码N种方法!

在性能测试领域,JMeter已经成为测试专业人士的首选工具,用于模拟用户行为、测量响应时间、评估系统性能。而现在大部分接口都会涉及到验签、签名、加密等操作,为了满足特定需求,我们需要更多的灵活性,比如引入Python来进行特定操作或处理复杂逻辑。(特别是针对一些只会Python编程, 不擅长Java的)

在JMeter中调用Python方法有很多,今天给大家先推荐几种。

方法一:利用beanshell+Runtime.getRuntime().exec()方法

Runtime.getRuntime().exec() 方法是用于在 Java 应用程序中执行外部命令。它允许你调用操作系统的命令行工具或其他可执行程序。你可以将要执行的命令作为参数传递给 exec() 方法,并且它会返回一个 Process 对象,通过该对象你可以管理和控制外部进程的执行。需要注意的是,使用 exec() 方法执行外部命令时需要格外小心,以防止潜在的安全漏洞。

如下示例

String command = "cmd /c python D:\\training\\python_work\\common\\auth.py";

Runtime rt = Runtime.getRuntime();

Process pr = rt.exec(command);


pr.waitFor();

 

BufferedReader b = new BufferedReader(new InputStreamReader(pr.getInputStream()));

String line = "";

StringBuilder response = new StringBuilder();

while ((line = b.readLine()) != null) {

    response.append(line);

 

}

 

String response_data = response.toString();

 

System.out.println("获取到的token值:"+response_data);

b.close();

vars.put("token",response.toString()); //把结果赋值给变量 ID ,方便后面调用

获取接口token解密过程是在auth.py中实现的,利用 Runtime.getRuntime().exec()执行python脚本

PS: 也可以利用OS Process Sampler取样器,在OS Process Sampler中,可以直接执行系统命令,这也包括执行Python脚本以及其他乱七八糟的脚本或者文件。

方法二:利用JSR223 Sampler+jython

要在JMeter中调用Python代码,也可以使用JSR223 Sampler元素来执行Python脚本操作步骤:

1、在https://www.jython.org/download 下载jython-standaloneXXX.JAR

2、放到jmeter 的lib文件夹下,重启Jmeter。3、添加JSR223 Sampler (路径:Thread Group >Sampler>JSR223 Sampler

4、根据压测需求,编写python脚本即可。

示例:


"""该脚本用于加密登录信息"""

import hashlib

import sys

import time

import json


def password_srt(pubkey,  password):

    time_str = str(time.time())

    sign_str = str(pubkey) + time_str + str(password)

    sign = hashlib.md5(sign_str.encode('utf-8')).hexdigest()

    res = {'sign': sign, 'pubkey': pubkey, 'password': password}

    res = json.dumps(res)

    return res


result = password_srt(123456789,987654321)

log.info(result)

vars.put("secrity",result)

方法三:利用pymeter库

pymeter库允许你在Python中实现类似JMeter GUI操作性能测试一样的效果。

项目地址:

https://github.com/eldaduzman/pymeter

依赖条件:

安装:

pip install pymeter

使用示例:


"""unittest module"""

from unittest import TestCase, main


from pymeter.api.config import TestPlan, ThreadGroupWithRampUpAndHold

from pymeter.api.postprocessors import JsonExtractor

from pymeter.api.reporters import HtmlReporter

from pymeter.api.samplers import DummySampler, HttpSampler

from pymeter.api.timers import UniformRandomTimer



class TestTestPlanClass(TestCase):

    def test_1(self):

        json_extractor = JsonExtractor("variable", "args.var")

        timer = UniformRandomTimer(1000, 2000)

        http_sampler = HttpSampler(

            "Echo",

            "https://postman-echo.com/get?var=${__Random(0,10)}",

            timer,

            json_extractor,

        )

        dummy_sampler = DummySampler("dummy ${variable}", "hi dummy")

        tg = ThreadGroupWithRampUpAndHold(

            10, 1, 60, http_sampler, dummy_sampler, name="Some Name"

        )

        html_reporter = HtmlReporter()

        tp = TestPlan(tg, html_reporter)

        stats = tp.run()

        print(

            f"duration= {stats.duration_milliseconds}",

            f"mean= {stats.sample_time_mean_milliseconds}",

            f"min= {stats.sample_time_min_milliseconds}",

            f"median= {stats.sample_time_median_milliseconds}",

            f"90p= {stats.sample_time_90_percentile_milliseconds}",

            f"95p= {stats.sample_time_95_percentile_milliseconds}",

            f"99p= {stats.sample_time_99_percentile_milliseconds}",

            f"max= {stats.sample_time_max_milliseconds}",

            sep="\t",

        )

        self.assertLess(stats.sample_time_99_percentile_milliseconds, 2000)



if __name__ == "__main__":

    main()

执行后,自动生成output目录,并生成index.hmtl报告和.jtl结果文件。

最后感谢每一个认真阅读我文章的人,礼尚往来总是要有的,虽然不是什么很值钱的东西,如果你用得到的话可以直接拿走:

这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴上万个测试工程师们走过最艰难的路程,希望也能帮助到你!

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
jmeter可以通过执行python脚本来进行测试。具体的步骤如下: 1. 在jmeter设置参数,可以通过参数化来传递数据给python脚本使用。 2. 下载jython-standalone.jar包,并将其放置在jmeter的lib目录下,并重启jmeter。这个jar包是用来支持在jmeter执行python脚本的。 3. 创建一个py模板文件,并在其编写需要执行的python脚本代码。 4. 在jmeter使用BeanShell Sampler或者JSR223 Sampler来执行python脚本。在执行之前,可以通过jmeter修改py模板文件的参数,以便根据需要进行测试。 5. 执行python脚本后,可以获取脚本的执行输出结果,并将其设置为变量,以便后续的测试使用。 下面是一个示例的python脚本代码: ```python # 获取jmeter参数 param = vars.get("param") print("hello") # 设置响应信息 SampleResult.setResponseData("message") SampleResult.setResponseCode("502") SampleResult.setSuccessful(False) ``` 通过以上步骤,你可以在jmeter成功调用python脚本进行测试。\[1\]\[2\]\[3\] #### 引用[.reference_title] - *1* [jmeter-执行python脚本](https://blog.csdn.net/qq_28913223/article/details/125019029)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v4^insert_chatgpt"}} ] [.reference_item] - *2* *3* [Jmeter入门(三)调用python脚本(附案例)](https://blog.csdn.net/Makasa/article/details/107558789)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v4^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值