8.8. Jmeter性能测试常用方法

8.8.1. 从Jenkins中获取参数到jmeter脚本

在Jenkins中可以添加配置参数,会加入到临时的环境变量中,在Jenkins通过BeanShel脚本变可以获取到Jenkins的参数

8.8.1.1. 在Jenkins中添加参数,是你需要透传给jmeter的

../_images/j_userd_1.png

8.8.1.2. 在jmeter添加一个前置处理器,BeanShell PreProcessor,输入以下代码:

String DataId= System.getenv("data_id");
vars.put("DataId",DataId);

8.8.1.3. 在jmeter脚本脚本中通过 ${DataId},获取Jenkins中配置的data_id

8.8.2. beanshell断言,可以在报告中展示异常的response

在性能测试中,我们如果只使用了响应断言,那边在用例失败时,我们只知道响应里面没有需要的断言数据,但不知道实际响应了什么,这时候我们就可以把响应断言修改成以下的beanshell断言,这样失败时,FailureMessage就会出现在我们的报告中

../_images/j_userd_2.png
../_images/j_userd_3.png

代码如下:

String response = "";
String Str = "\"code\":0";
response = prev.getResponseDataAsString();
if (response == ""){
    Failure = true;
    FailureMessage = "系统无响应";

    // System.out.print( FailureMessage);
    }
else if((response.contains(Str)) == false){
    Failure = true;
    FailureMessage = "接口响应异常,接口实际响应内容为:" + response;
    // System.out.print(FailureMessage);
    }

多个字符串断言,如Str1和Str2两者存在其一即为通过,代码如下:

String response = "";
String Str1 = "assert_str1";
String Str2 = "assert_str2";
response = prev.getResponseDataAsString();
if (response == ""){
    Failure = true;
    FailureMessage = "系统无响应";
// System.out.print( FailureMessage);
}
else if(!(response.contains(Str1) || response.contains(Str2))){
    Failure = true;
FailureMessage = "接口响应异常,接口实际响应内容为:" + response;
// System.out.print(FailureMessage);
}

8.8.3. jmeter使用Beanshell预处理器从指定列表中获取随机值

新增beanshell前置处理器

代码如下:

//随机字符串
String[] nation = new String[]{"china", "US", "UK"};
Random random = new Random();
int i = random.nextInt(nation.length);
vars.put("mynation",nation[i]);
//随机数字
String[] num = new String[]{"8", "2", "1","7"};
Random r = new Random();
int j = r.nextInt(num.length);
vars.put("anum",num[j]);

然后在脚本中使用${mynation}或者${anum}变可以获取对应参数

Warning

数量较多时推荐使用csv,当然也可以使用随机函数,但是在性能测试中不推荐使用随机函数,部分随机函数生成时的性能较差,无法提供足够的负载

8.8.4. 仅一次控制器

在编写性能测试是,有时候部分场景我们只希望执行一次,如登录,这时候我们就可以使用【仅一次控制器】,将登录接口加入到仅一次控制器中。这样每个线程只会执行一次登录。

方法:在线程组中添加逻辑控制器,仅一次控制器