JMeter Advanced - Explicação detalhada da solicitação Java em operações de transação (com código-fonte)

 

Operação de transação do Jmeter

Eu escrevi um artigo antes, apresentando como o Jmeter chama as solicitações java, você pode consultar o artigo  para explicar o método de design das solicitações JMeter Java em detalhes

Mas há um problema neste artigo. No método public SampleResult runTest(JavaSamplerContext arg0), apenas uma API de uma classe é chamada. Se o requisito for chamar várias APIs de várias classes no jmeter, como conseguir isso? Os alunos dirão, simples, criamos várias classes e herdamos AbstractJavaSamplerClient, respectivamente! Claro que é possível fazer isso, mas vai criar muitas classes. O Jmeter fornece um método para implementar operações de transação, ou seja, criar uma transação em um método runTest e depois incluir várias solicitações em uma transação. Sem mais delongas, ir direto para o código

import org.apache.jmeter.config.Arguments;
import org.apache.jmeter.protocol.java.sampler.AbstractJavaSamplerClient;
import org.apache.jmeter.protocol.java.sampler.JavaSamplerContext;
import org.apache.jmeter.samplers.SampleResult;
public class DemoTransaction extends AbstractJavaSamplerClient {
private SampleResult sr;

public static final String PARAM_PARA1 = "para1";
public Arguments getDefaultParameters() {
Arguments params = new Arguments();
params.addArgument("para1", "");
return params;
}


public SampleResult runTest(JavaSamplerContext arg0) {

/**创建事务demo**/
this.sr = new SampleResult();
this.sr.setSampleLabel("demo ");
this.sr.sampleStart();

/**创建事务demo中的第一个子请求**/
SampleResult result1= new SampleResult();
result1.setSampleLabel("demo1");
result1.sampleStart();

/**写子请求的具体逻辑,这里用等待时间代替**/
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**写子请求的具体逻辑,这里用等待时间代替**/

this.sr.addSubResult(result1,false); //重点把子请求的测试结果放到事务中
result1.sampleEnd(); //子请求1结束


/**创建事务demo中的第二个子请求**/
SampleResult result2= new SampleResult();
result2.setSampleLabel("demo2");
result2.sampleStart();
/**写子请求的具体逻辑,这里用等待时间代替**/
try {
Thread.sleep(500);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
/**写子请求的具体逻辑,这里用等待时间代替**/

result2.setSuccessful(true);
this.sr.addSubResult(result2,false); //重点把子请求的测试结果放到事务中
result2.sampleEnd(); //子请求2结束

/**判断子请求是否都成功执行,如果其中一个失败,则认定事务执行失败**/

if( result1.isSuccessful() & result2.isSuccessful())
{
this.sr.setSuccessful(true);

}else {
this.sr.setSuccessful(false);

}
/**判断子请求是否都成功执行,如果其中一个失败,则认定事务执行失败**/

this.sr.sampleEnd(); //事务结束

return this.sr;
}

public void setupTest(JavaSamplerContext context) {
super.setupTest(context);

}

public void teardownTest(JavaSamplerContext context) {
super.teardownTest(context);
}
}

Usando a API do JMeter 5.x

O que precisa ser enfatizado aqui é o método addSubResult(result2, false ) Este método é fornecido apenas no jmeter 5.x (addSubResult(result2) em 4.x), o primeiro parâmetro é o valor do resultado recebido, o segundo parâmetro Se deve altere o nome do thread filho, a configuração maven do jmeter 5.x é a seguinte,

<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_core</artifactId>
<version>5.5</version>
</dependency>
<dependency>
<groupId>org.apache.jmeter</groupId>
<artifactId>ApacheJMeter_java</artifactId>
<version>5.5</version>
</dependency>

Use este método para obter - exibir o tempo de resposta e a capacidade de processamento de subsolicitações na transação no relatório agregado

Empacote o arquivo java no diretório \lib\ext, adicione o amostrador java, selecione a classe DemoTransaction e execute o teste. Os resultados são os seguintes:

Na exibição da árvore de resultados, você pode ver que a demonstração da transação inclui duas subsolicitações demo1 e demo2

 

No relatório de agregação, há apenas as informações gerais do demo. Podemos ver que demo1 e demo2 aguardam 1s e 0,5s respectivamente no exemplo, e a Média na figura abaixo é de 1500 milissegundos, o que prova que o tempo de resposta da transação é igual à soma dos dois pedidos

Plano de otimização do relatório de teste

O relatório agregado acima é falho, não lista o tempo de resposta e o poder de processamento de cada subsolicitação! No momento, não resolvi esse problema por meio de codificação, mas podemos alcançá-lo de outras maneiras, ou seja, durante o teste, grave os resultados do teste em um arquivo e abra o arquivo após o término do teste!

 enfatizar novamente! Para realizar esta função, você deve usar ApacheJMeter_java e ApacheJMeter_core do jmeter 5.x. Eu testei pessoalmente que esta função não pode ser realizada no jmeter 4.x!

Acho que você gosta

Origin blog.csdn.net/liwenxiang629/article/details/130480937
Recomendado
Clasificación