MeterSphere接口请求及响应内容中的脚本处理

文章介绍了在MeterSphere中进行接口测试时,如何通过脚本处理Unicode编码转为中文的问题,以及响应内容为文件时的处理方法。同时,讲解了如何在请求头中添加或修改逻辑性参数,以及获取请求的域名或host信息。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

MeterSphere在做接口测试过程中,某些请求内容及响应内容需要特殊处理,才能达到期望的测试结果,而这些处理需要通过灵活性更强的脚本进行,所以本文针对部分情况,利用脚本进行对应的处理以达到目的。

一、响应内容

1.1 请求响应结果时Unicode编码转为中文

当响应内容为Unicode时,在MeterSphere上显示的内容为乱码,此时就需要通过后置脚本将响应内容转化为UTF-8,以便于正常显示:

在对应接口下添加一个后置脚本,粘贴如下代码即可:

String s=new String(prev.getResponseData(),"UTF-8");
        char aChar;
        int len= s.length();
        StringBuffer outBuffer=new StringBuffer(len);
        for(int x =0; x <len;){
            aChar= s.charAt(x++);
            if(aChar=='\\'){
                aChar= s.charAt(x++);
                if(aChar=='u'){
                    int value =0;
                    for(int i=0;i<4;i++){
                        aChar= s.charAt(x++);
                        switch(aChar){
                            case'0':
                            case'1':
                            case'2':
                            case'3':
                            case'4':
                            case'5':
                            case'6':
                            case'7':
                            case'8':
                            case'9':
                                value=(value <<4)+aChar-'0';
                                break;
                            case'a':
                            case'b':
                            case'c':
                            case'd':
                            case'e':
                            case'f':
                                value=(value <<4)+10+aChar-'a';
                                break;
                            case'A':
                            case'B':
                            case'C':
                            case'D':
                            case'E':
                            case'F':
                                value=(value <<4)+10+aChar-'A';
                                break;
                            default:
                                throw new IllegalArgumentException(
                                        "Malformed   \\uxxxx  encoding.");}}
                    outBuffer.append((char) value);}else{
                    if(aChar=='t')
                        aChar='\t';
                    else if(aChar=='r')
                    aChar='\r';
                    else if(aChar=='n')
                    aChar='\n';
                    else if(aChar=='f')
                    aChar='\f';
                    outBuffer.append(aChar);}}else
                outBuffer.append(aChar);}
prev.setResponseData(outBuffer.toString());
String s=new String(prev.getResponseData(),"UTF-8");

1.2 针对接口响应内容为文件时,MeterSphere显示为乱码的文件内容

此种方式对于测试人员不太友好,所以可以通过后置脚本将响应的文件内容写入实际的文件到服务器,然后从服务器上的目录下进行拿取(或者写入可访问的文件服务器)

import java.io.*;

byte[] result = prev.getResponseData();
String file_name = "/opt/metersphere/data/xxxx.xxx";
File file = new File(file_name);
FileOutputStream out = new FileOutputStream(file);
out.write(result);
out.close();

二、请求内容

2.1 如何添加或者修改请求头信息内容?

针对某些接口请求头需要进行逻辑性的参数添加及修改,常规的函数或者变量无法达到要求,此时可以通过前置脚本进行处理,具体如下:

import org.apache.jmeter.protocol.http.control.HeaderManager;
import org.apache.jmeter.protocol.http.control.Header;

// 获得请求头信息
HeaderManager headers = sampler.getHeaderManager();
// 打印全部请求头信息
log.info("添加前" + headers.getHeaders().getStringValue());
// new一个Header对象
myHeader = new Header("x-parse-session-token", "123456432");
// 添加Header到请求头管理器
headers.add(myHeader);
// 打印全部请求头信息
log.info("添加后" + headers.getHeaders().getStringValue());

2.2 获取请求中的域名或者host信息

某些场景需要通过前置脚本针对不同的域名或者请求host进行逻辑处理,就需要通过如下脚本获取信息

import org.apache.jmeter.config.Arguments;
import java.util.Map.Entry;
 
Arguments args = sampler.getArguments();
//获取域名或者host信息
log.info("domain: "+sampler.getDomain());
//获取请求参数
Map map = args.getArgumentsAsMap();
Iterator itor = map.entrySet().iterator();
while(itor.hasNext()){
  Entry entry = (Entry) itor.next();
  log.info("==========key:"+entry.getKey());  
}

待持续补充。。。。

MeterSphere是一个强大的接口测试工具,它基于RESTful风格,并支持API契约式驱动开发。在MeterSphere中,你可以创建测试计划并定义测试场景,然后按照API文档或契约(Contract Testing)来进行自动化测试。下面是一个简单的MeterSphere接口测试教程示例: 1. **安装与初始化**: 首先,你需要在项目中集成MeterSphere,如果你使用的是Spring Boot,可以在pom.xml文件中添加依赖。 ```xml <dependency> <groupId>io.meterstick</groupId> <artifactId>meterstick-spring-boot-starter</artifactId> <version>{latest_version}</version> </dependency> ``` 2. **创建测试合约**: 定义API契约,例如在`src/main/resources/metersphere`目录下创建`contract.json`文件,描述预期的HTTP请求响应: ```json { "request": { "method": "GET", "url": "/users" }, "response": { "status": 200, "headers": {"Content-Type": "application/json"}, "body": { "type": "array", "items": { "$ref": "#/definitions/User" } } }, "definitions": { "User": { "type": "object", "properties": { "id": { "type": "integer", "format": "int64" }, "name": { "type": "string" } } } } } ``` 3. **编写测试脚本**: 使用MeterSphere的DSL(Domain Specific Language)编写测试用例,比如在`src/test/java`下的`MyTest.java`中: ```java import io.meterstick.test.http.HttpRequest; import io.meterstick.test.http.HttpStatus; import io.meterstick.test.http.MeterStickSpec; import static org.springframework.restdocs.mockmvc.MockMvcRestDocumentation.document; public class MyTest { @MeterStickSpec("/users") public void getUsers(HttpRequest request) throws Exception { // 调用实际的接口 mockMvc.perform(request.get()) .andExpect(status().isOk()) // 根据契约验证响应 .andExpect(jsonPath("$", hasSizeGreaterThan(0))) .andDo(document("get-users")); } } ``` 4. **运行测试**: 最后,在`src/main/resources/application.yml`或其他配置文件中启用MeterSphere,并通过命令行或IDE执行测试。 上述就是一个基础的MeterSphere接口测试教程示例,实际使用中,你还可以设置断言、处理异常等复杂情况。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值