在JMeter中开发自定义函数是一个常见的需求,允许我们扩展JMeter的功能以适应特定的测试需求。自定义函数可以用来处理数据,生成输出,或者执行特定的运算。通过JMeter函数二次开发可以帮我们解决实际测试过程中造数难的问题

用过JMeter的同学对JMeter内置的函数助手不陌生,使用函数助手可以帮我们非常高效生成一些数据满足我们的接口测试的要求。比如我们想要生成随机的手机号码,可以使用RandomString函数,具体做法:设置手机号码前缀区段(比如189、138、177)这些,然后再使用RandomString函数帮我们生成后8位的随机数,然后拼接成手机号码:

图片

但是有时候测试需求中的手机号码区段并不是固定的,如果想要手机号码区段也能够满足随机的要求(并且符合运营商开放的区段),又或者是生成合法的随机身份证号码,这类需求该如何实现呢?JMeter的内置函数满足不了,此时我们可以对JMeter函数进行二次开发。

JMeter二次开发实现逻辑

自定义函数必须继承于JMeter的AbstractFunction类

并需要重写该类的4个方法:

execute,函数执行逻辑,必需,自定义函数的核心逻辑,并返回经过处理后的内容

getReferenceKey,函数名称,必需,返回一个字符串,表示在JMeter中使用自定义函数的函数名,一般以双下划线开头,如__IDNumber

setParameters,设置函数接收参数值,如果自定义函数有参数,用于接收调用时传递过来的参数,注意使用时,字符串参数不要加双引号

getArgumentDesc,函数参数描述,如果自定义函数有参数,用于返回函数参数说明

JMeter二次开发具体步骤

1、创建Java Maven项目

选择从maven-archetype-quickstart模板创建

在pom.xml中添加依赖ApacheJMeter_java、ApacheJMeter_core,注意与使用的JMeter版本保持一致

  1. <!--引入JMeter依赖-->

  2. <dependency>

  3. <groupId>org.apache.jmeter</groupId>

  4. <artifactId>ApacheJMeter_java</artifactId>

  5. <version>5.4.3</version>

  6. </dependency>

  7. <dependency>

  8. <groupId>org.apache.jmeter</groupId>

  9. <artifactId>ApacheJMeter_core</artifactId>

  10. <version>5.4.3</version>

  11. </dependency>

2、自定义函数类继承AbstractFunction

创建functions子包,在已有包中,添加一个名为functions子包

添加自定义函数, 在functions子包下,添加自定义函数类,并继承AbstractFunction类,并实现该类的4个抽象方法:

在execute方法中添加插件逻辑

在getReferenceKey方法中返回自定义名称函数

如果函数有参数,在setParameters方法获取传递过来的参数

如果函数有参数,在getArgumentDesc中描述接收的参数

  1. public class IDNumber extends AbstractFunction {

  2. //参数

  3. private String area;

  4. /**

  5. * 函数执行逻辑,自定义函数的核心逻辑,并返回经过处理后的内容

  6. *

  7. * @param sampleResult

  8. * @param sampler

  9. * @return

  10. * @throws InvalidVariableException

  11. */

  12. public String execute(SampleResult sampleResult, Sampler sampler) {

  13. //调用身份证生成逻辑,使用了第三方的业务逻辑

  14. String idNumber = IdNumberGenerateUtil.generate(area);

  15. return idNumber;

  16. }

  17. /**

  18. * 设置函数接收参数值,接收JMeter界面用户传递过来的参数

  19. *

  20. * @param parameters

  21. * @throws InvalidVariableException

  22. */

  23. public void setParameters(Collection<CompoundVariable> parameters) throws InvalidVariableException {

  24. //检查参数个数

  25. checkParameterCount(parameters, 0, 1);

  26. //获取参数

  27. Object[] params = parameters.toArray();

  28. //获取区域

  29. if (params.length > 0) {

  30. CompoundVariable cvArea = (CompoundVariable) params[0];

  31. this.area = cvArea.execute();

  32. }

  33. }

  34. /**

  35. * 函数名称,JMeter界面函数的名称

  36. *

  37. * @return

  38. */

  39. public String getReferenceKey() {

  40. return "__IDNumber";

  41. }

  42. /**

  43. * 函数参数描述,JMeter界面显示的参数说明

  44. *

  45. * @return

  46. */

  47. public List<String> getArgumentDesc() {

  48. List<String> desc = new ArrayList<String>();

  49. desc.add("城市名");

  50. return desc;

  51. }

  52. }

3、将代码打包成jar文件

方式一:项目没有第三方依赖,直接使用右侧Maven菜单的Lifecyle->package打包,直接使用jar包

图片

方式二:项目有第三方依赖,需要按照如下步骤操作:

在pom.xml文件的build->plugins配置节下添加如下内容

 
  1. <build>

  2. <plugins>

  3. <!--将依赖打包到jar包-->

  4. <plugin>

  5. <groupId>org.apache.maven.plugins</groupId>

  6. <artifactId>maven-assembly-plugin</artifactId>

  7. <version>2.5.5</version>

  8. <configuration>

  9. <descriptorRefs>

  10. <descriptorRef>jar-with-dependencies</descriptorRef>

  11. </descriptorRefs>

  12. </configuration>

  13. </plugin>

  14. <plugin>

  15. <artifactId>maven-compiler-plugin</artifactId>

  16. <version>3.8.1</version>

  17. <configuration>

  18. <source>1.8</source>

  19. <target>1.8</target>

  20. <encoding>UTF-8</encoding>

  21. </configuration>

  22. </plugin>

  23. </plugins>

  24. </build>

使用右侧Maven菜单的Plugins->assembly->assemble:assembly打包,会生成一个带-jar-with-dependencies后缀的jar包,直接使用此xxxx–jar-with-dependencies.jar包

图片

4、将jar文件部署到JMeter中

将上一步的xxx.jar文件拷贝到JMeter安装目录的lib/ext目录中

图片

重启JMeter,打开函数助手即可使用自定义的函数:

图片

 

 感谢每一个认真阅读我文章的人!!!

作为一位过来人也是希望大家少走一些弯路,如果你不想再体验一次学习时找不到资料,没人解答问题,坚持几天便放弃的感受的话,在这里我给大家分享一些自动化测试的学习资源,希望能给你前进的路上带来帮助。

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

 

          视频文档获取方式:
这份文档和视频资料,对于想从事【软件测试】的朋友来说应该是最全面最完整的备战仓库,这个仓库也陪伴我走过了最艰难的路程,希望也能帮助到你!以上均可以分享,点下方小卡片即可自行领取。

更多推荐