Jmeter二次开发实现rsa加密

jmeter函数助手提供了大量的函数,像 counter、digest、random、split、strLen,这些函数在接口测试、性能测试中大量被使用,但是大家在实际工作,形形色色的测试需求不同,导致jmeter自带或者扩展插件给我们提供的函数无法全部满足,这个时候我们就可以自己动手,对JMeter进行二次开发。
在这里插入图片描述

接下来我拿aes加密来说明如何实现JMeter二次开发。

首先需要将jmeter的core、functions两个jar包导入到项目工程中。

这两个jar包在jmeter的lib\ext目录下,包的完整名如下所示:

ApacheJMeter_core.jar

ApacheJMeter_functions.jar

接下来定义类,类名Rsa0706,继承抽象类AbstractFunction,

实现其中的4个方法execute()、setParameters()、getReferenceKey()、getArgumentDesc(),具体代码如下所示:
在这里插入图片描述

1、getReferenceKey方法实现
getReferenceKey()方法是用于返回自定义函数的名字,以下代码定义了类成员变量key,值为字符串“__rsa”,key 这个变量的值作为getReferenceKey()方法的返回值。
在这里插入图片描述

2,getArgumentDesc方法实现
getArgumentDesc()用来定义jmeter各入参的描述信息,

咱们要封装的jmeter的rsa加密函数有两个入参,分别是要加密的字符串(即明文),以及加密的公钥,如下代码所示,定义类成员变量desc,将两个入参的描述信息存到这个变量中,作为getArgumentDesc()方法的返回值。

在这里插入图片描述

3,setParameters方法实现
setParameters()方法用于获取JMeter函数的入参值,咱们rsa加密需要两个入参,分别是明文、公钥,参数个数是2,在setParameters()方法需要先检查入参个数的最大值、最小值是不是2,然后将参数集合Collection转成数组存到Object数组变量values中,并定义类成员变量MAX_PARA_COUNT、MIX_PARA_COUNT、plaintextCV、publicKeyCV,分别存最大变量个数、最小变量个数、明文、公钥。

4,execute方法实现
方法execute()里定义的是Jmeter自定义函数的主要逻辑代码,咱们这里放aes加密方法的业务逻辑实现
在这里插入图片描述

然后将调试好的项目打成jar包,拷贝到jmeter的lib\ext目录下。

启动jmeter,可以在jmeter的函数助手界面看到,自定义的__rsa函数,如下截图所示。
在这里插入图片描述

例如公钥:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClvArPDQsHpny6fNi1dVyjwz6GTtuKZ5hy8qb62ndCiGXgH5d9WSPeH6RIA14SMGwFwXAd2btntdmvs0CXtSDRP7cXiomEDgBSoDyNbjblQWFKKresjHuxka37rKUgwsDmsaCBE75nUVghJnqmZBhmZ/m9USdsfBbKPogpuVrNtwIDAQAB

1234567890这串明文经过rsa公钥加密之后,结果如下截图所示
在这里插入图片描述

b9U55CVXTK+LOWuJPscL/074YtDNTr7fQCitxr73Sq9y4/P7q+TY+lm/L5QpTI8cpnJc6Q6V2I6WSUHFsSFmibwsAacdlIWbvjGxIy2z7F+Y0Ymj32GsFpbi85ea4GFhvrvzYDKp1IRUqo4oCWSwx6zV43gD3NFQHaoKKaU91As=

在这里插入图片描述

然后将调试好的项目打成jar包,拷贝到jmeter的lib\ext目录下。

启动jmeter,可以在jmeter的函数助手界面看到,自定义的__rsa函数,如下截图所示。

在这里插入图片描述

例如公钥:

MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQClvArPDQsHpny6fNi1dVyjwz6GTtuKZ5hy8qb62ndCiGXgH5d9WSPeH6RIA14SMGwFwXAd2btntdmvs0CXtSDRP7cXiomEDgBSoDyNbjblQWFKKresjHuxka37rKUgwsDmsaCBE75nUVghJnqmZBhmZ/m9USdsfBbKPogpuVrNtwIDAQAB

1234567890这串明文经过rsa公钥加密之后,结果如下截图所示在这里插入图片描述

b9U55CVXTK+LOWuJPscL/074YtDNTr7fQCitxr73Sq9y4/P7q+TY+lm/L5QpTI8cpnJc6Q6V2I6WSUHFsSFmibwsAacdlIWbvjGxIy2z7F+Y0Ymj32GsFpbi85ea4GFhvrvzYDKp1IRUqo4oCWSwx6zV43gD3NFQHaoKKaU91As=

最后感谢每一个认真阅读我文章的人!作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,坚持几天便放弃的感受的话,在这里我给大家分享一些软件测试的学习资源,这些资料,对于【软件测试】的朋友来说应该是最全面最完整的备战仓库,希望能给你前进的路上带来帮助。如果你用得到的话可以直接拿走:

软件测试资料领取:[内部资源] 想拿年薪40W+的软件测试人员,这份资料必须领取~

软件测试面试刷题工具领取:软件测试面试刷题【800道面试题+答案免费刷】

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

<think>嗯,用户需要关于接口测试设计方案的最佳实践、指南和示例。首先,我得回忆一下接口测试的基本概念和步骤。接口测试主要是验证不同系统或组件之间的通信是否正确,确保数据传递和功能调用符合预期。那用户可能是在开发过程中遇到了接口集成的问题,或者他们正在准备进行系统测试,想要确保接口的可靠性和稳定性。 接下来,用户提到了最佳实践,所以我需要整理一些常见的有效方法。比如,测试用例设计应该覆盖正常场景、异常场景和边界条件。这可能包括输入合法参数、非法参数、超长字符串、特殊字符等。此外,数据准备也很重要,可能需要使用模拟数据或真实数据,并结合数据驱动测试来提高效率。 然后,用户需要指南,可能希望了解具体的步骤或流程。例如,需求分析阶段要明确接口的功能和业务逻辑,设计测试用例时要考虑不同的HTTP方法(GET、POST等),执行测试时使用自动化工具,比如Postman或JMeter,以及持续集成中的自动化测试流程。 示例部分,用户可能需要看到实际的代码或配置。比如,用Postman发送请求的例子,或者使用Python的requests库编写测试脚本。这时候,我需要确保代码示例正确,并且符合用户的技术栈,比如是否使用Python或其他语言。同时,可能需要提到常见的断言方法,比如检查状态码、响应结构、数据准确性等。 另外,用户提供的引用中有提到接口设计原则、API调用、Spring Boot应用运行和三方接口调用的安全性。这些可能需要整合到回答中,比如引用[4]中的敏感数据加密和幂等性问题处理,这些都是接口测试中需要考虑的安全和可靠性方面的问题。还有引用[2]提到的调用外部API的指导,可能涉及如何模拟或测试第三方接口的调用。 还要注意用户提到的系统级指令,比如数学公式的格式要求,但在这个问题中可能不太涉及数学公式,所以可能不需要处理这部分。不过需要确保回答结构清晰,分点说明,使用中文,并正确引用提供的参考资料。 可能用户没有明确说出来的深层需求是希望有一个全面的接口测试方案,不仅包括技术实现,还有流程管理和团队协作的建议,比如持续集成、文档维护和团队协作工具的使用。因此,在回答中需要涵盖这些方面,确保用户能够从零开始构建一个有效的接口测试框架,并应用到实际项目中。 最后,需要生成相关问题,帮助用户进一步探索接口测试的其他方面,比如自动化框架选择、性能测试、安全测试等,或者如何处理特定的测试场景,比如高并发下的接口表现。这些问题应该与用户的需求紧密相关,并引导他们深入学习和解决问题。</think>### 接口测试设计方案最佳实践指南 #### 一、核心设计原则 1. **覆盖性** - 确保接口功能覆盖所有业务场景,包括: - 正常流程(如合法参数输入) - 异常流程(如空值、越界参数) - 边界条件(如最大值/最小值) - 安全验证(如鉴权失败、加密数据解密失败)[^4] - 示例:登录接口需测试密码错误、超时、重复请求等场景。 2. **可维护性** - 使用数据驱动测试(DDT),将测试数据与脚本分离 - 采用模块化设计,封装公共方法(如请求构造、响应断言) 3. **自动化集成** - 结合持续集成工具(如Jenkins),实现接口测试自动化流水线[^3] - 建议每日定时执行核心接口回归测试 --- #### 二、关键实施步骤 1. **需求分析** - 明确接口定义文档,包含: - URL路径和HTTP方法 - 请求/响应格式(JSON/XML) - 状态码定义 - 超时要求和性能指标 2. **测试用例设计** ```markdown | 测试类型 | 用例示例 | 预期结果 | |----------|---------------------------|------------------------| | 功能测试 | POST /user 传完整合法参数 | 返回201 Created | | 异常测试 | GET /order?id=非数字字符 | 返回400 Bad Request | | 性能测试 | 并发100次查询请求 | 平均响应时间<500ms | ``` 3. **工具选择建议** - **基础验证**:Postman(手工测试)+ Newman(命令行执行) - **自动化框架**:Python+Requests+Pytest 或 Java+RestAssured - **性能测试**:JMeter/LoadRunner --- #### 三、安全与可靠性设计 1. **敏感数据处理** - 请求/响应中的敏感字段(如密码、token)需加密传输[^4] - 测试案例需包含: ```python # 加密测试示例 def test_encrypted_request(): plain_data = {"cardno": "6225880123456789"} encrypted = rsa_encrypt(plain_data) # 非对称加密 response = post("/payment", data=encrypted) assert response.status_code == 200 ``` 2. **幂等性验证** - 对写操作(如支付接口)需验证重复请求处理 - 测试方法: ```python def test_idempotent(): order_id = create_order() # 第一次请求 response1 = post(f"/pay/{order_id}") # 相同请求第二次 response2 = post(f"/pay/{order_id}") assert response2.json()["code"] == "ALREADY_PAID" ``` --- #### 四、示例代码(Python实现) ```python import requests import pytest class TestUserAPI: BASE_URL = "https://api.example.com/v1" @pytest.fixture def auth_header(self): # 获取鉴权token resp = requests.post(f"{self.BASE_URL}/login", json={ "username": "testuser", "password": "加密后的密码" # 实际应使用加密传输[^4] }) return {"Authorization": f"Bearer {resp.json()['token']}"} def test_create_user(self, auth_header): """测试用户创建接口""" payload = { "name": "测试用户", "email": "testuser@example.com" } response = requests.post( f"{self.BASE_URL}/users", json=payload, headers=auth_header ) assert response.status_code == 201 assert "id" in response.json() ``` ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值