接口测试:在MeterSphere 中实现单向认证经验分享

接口测试:在MeterSphere 中实现单向认证经验分享

  • 1.Python脚本关闭ssl实现登录
    • 1.1 代码
    • 1.2 MeterSphere前置Python脚本执行测试
    • 注意事项
  • 2.Beanshell脚本关闭ssl实现登录
    • 2.1 使用MeterSphere自动生成代码能力
    • 2.2 手动添加关闭代码
    • 2.3MeterSphere前置Beanshell脚本执行测试
    • 注意事项
  • 3.JavaScript脚本实现单向认证系统登录
    • 3.1 代码
    • 3.2MeterSphere前置JavaScript脚本执行测试
  • 总结

我们测试的多个被测系统都是单向认证的,最近在用MeterSphere做接口测试时,发现无论用Python脚本和beanshell脚本实现关闭SSL认证完成登录,有些系统是可以的,有些系统一直提示SSL认证错误。尝试很多方式后发现:使用JavaScript脚本完成登录,登录每个单向认识的系统都没有问题。如果大家在测试中也有这样的问题,可以试试用JavaScript完成单向认证系统的登录。
下面分享Python、beanshell关闭ssl登录脚本,以及JavaScript脚本完成单向认证系统登录脚本。

1.Python脚本关闭ssl实现登录

1.1 代码

import sys
import requests
import json

sys.path.append("/opt/metersphere/data/python/lib/python2.7/site-packages")

from requests.packages.urllib3.exceptions import InsecureRequestWarning

# 发起请求时忽略证书验证警告
requests.packages.urllib3.disable_warnings(InsecureRequestWarning)

#创建Session实例对象,然后保持状态
s = requests.session()

#设置请求头格式
headsers = {"Content-Type":"application/json"}
#设置登录接口请求参数
payload = { "username": "登录用户名",
            "password": "登录密码"
    }
res = s.post("https://你测试的环境地址",data=json.dumps(payload),verify=False,headers=headsers)
log.info(res.text)

1.2 MeterSphere前置Python脚本执行测试

接口测试:在MeterSphere 中实现单向认证经验分享_第1张图片
接口测试:在MeterSphere 中实现单向认证经验分享_第2张图片

注意事项

在 MeterSphere 前后置脚本中引用 Python 第三方库相关配置请查看下面官方手册:https://kb.fit2cloud.com/?p=105

2.Beanshell脚本关闭ssl实现登录

2.1 使用MeterSphere自动生成代码能力

在前置脚本中,选择“导入API”,直接导入登录接口,然后根据需求修改如何提取响应体即可。我这里使用的是:项目管理>>自定义代码片段:来测试的。
接口测试:在MeterSphere 中实现单向认证经验分享_第3张图片
接口测试:在MeterSphere 中实现单向认证经验分享_第4张图片
接口测试:在MeterSphere 中实现单向认证经验分享_第5张图片
接口测试:在MeterSphere 中实现单向认证经验分享_第6张图片

2.2 手动添加关闭代码

如果第一个方法执行不行,还是提示ssl错误,需要在代码中手动关闭。代码查考如下(不唯一,实现方式很多种)

import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.client.HttpClient;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.util.EntityUtils;

 // 创建HttpClient实例
 HttpClient httpClient = HttpClients.createDefault();
 log.info("创建HttpClient实例");

 // 创建HttpPost请求
 HttpPost httpPost = new HttpPost("https://被测地址");
 log.info("创建HttpPost请求");

// 关闭SSL认证
 HttpClientBuilder builder = HttpClientBuilder.create();
 builder.setSSLHostnameVerifier(NoopHostnameVerifier.INSTANCE);
 builder.setSSLContext(SSLContexts.custom().loadTrustMaterial(new TrustSelfSignedStrategy()).build());
 httpClient = builder.build();
log.info("关闭SSL认证");

// 设置请求参数
httpPost.setEntity("{\n  \"password\": \"密码\",\n  \"authenticate\": \"变量值\",\n  \"username\": \"用户名\"\n}");
 log.info("设置请求参数");

// 发送请求并获取响应
 HttpResponse response = httpClient.execute(httpPost);
log.info("发送请求并获取响应 ==  "+response.getStatusLine().getStatusCode());
            
 // 判断返回状态是否为200
if (response.getStatusLine().getStatusCode() == 200) {
    //String content = EntityUtils.toString(response.getEntity(), "UTF-8");
    // 读取响应内容
     HttpEntity entity = response.getEntity();
      String responseBody = EntityUtils.toString(entity, "UTF-8");
    log.info("登录响应体 字符串 ==  "+content);
}


 

2.3MeterSphere前置Beanshell脚本执行测试

接口测试:在MeterSphere 中实现单向认证经验分享_第7张图片

注意事项

需要在MeterSphere的文件管理地方上传依赖包
接口测试:在MeterSphere 中实现单向认证经验分享_第8张图片
接口测试:在MeterSphere 中实现单向认证经验分享_第9张图片

3.JavaScript脚本实现单向认证系统登录

3.1 代码


var urlStr = "https://你的测试地址"; // 请求地址
var requestMethod = "GET"; // 请求类型
var parameterData = ""; // 请求参数
var url = new java.net.URL(urlStr);
var conn = url.openConnection();
conn.setRequestMethod(requestMethod);
conn.setDoOutput(true);
conn.connect();

var res = "";
var rspCode = conn.getResponseCode();
if (rspCode == 200) {
var ipt = conn.getInputStream();
var reader = new java.io.BufferedReader(new java.io.InputStreamReader(ipt, "UTF-8"));
var lines;
while((lines = reader.readLine()) !== null) {
  res += lines;
}
}
log.info(res);

var json=JSON.parse(res);
// var obj = json.data;
// log.info(obj)

3.2MeterSphere前置JavaScript脚本执行测试

接口测试:在MeterSphere 中实现单向认证经验分享_第10张图片

总结

1、beanshell和Python脚本在关闭ssl单向认证时,都需要上传额外的依赖包,并且对有些环境测试会提示ssl没有关闭
2、根据测试结果,如果出现上述情况,建议都使用JavaScript脚本来实现

你可能感兴趣的:(metersphere)