java http接口测试框架,接口自动化测试(httpclient)

使用的自动化框架

java + httpclient + log4j + json + mybatis + excel + testng

excel : API 管理

httpclient:接口请求

log4j:脚本log记录

json-lib:接口返回数据的解析

mybatis: 脚本与数据库的交互

testng:测试用例管理,断言

excel

5be17c54e244

httpclient ( get / post)

/** * get 形式请求API *

* @param uri url 和 对应参数

* @param @key key

* @return 返回相应信息

* @throws java.net.URISyntaxException

* @throws java.io.IOException

*/

public static JSON getAPI(URI uri) throws URISyntaxException, IOException {

CloseableHttpClient httpclient = HttpClients.createDefault();

try {

httpget = new HttpGet(uri);

log.info("执行API请求" + httpget.getRequestLine());

ResponseHandler responseHandler = new ResponseHandler() {

public String handleResponse(final HttpResponse response) throws ClientProtocolException, IOException {

int status = response.getStatusLine().getStatusCode();

if (status >= 200 && status < 300) {

HttpEntity entity = response.getEntity();

return entity != null ? EntityUtils.toString(entity) : null;

} else {

log.error("请求错误,状态码为:" + response.getStatusLine().getStatusCode());

throw new ClientProtocolException("意外的状态返回: " + status);

}

}

};

String responseBody = httpclient.execute(httpget, responseHandler);

JSONObject dataObject = JSONObject.fromObject(responseBody.trim());

return dataObject;

} finally {

httpclient.close();

}

}

/** * Post 形式请求API *

* @param uri url 和 对应参数

* @param @key key

* @return 返回相应信息

* @throws java.net.URISyntaxException

* @throws java.io.IOException

*/

public static JSON postAPI(URI uri) throws URISyntaxException, IOException {

CloseableHttpClient httpclient = HttpClients.createDefault();

try {

httpPost = new HttpPost(uri);

log.info("执行API接口请求" + httpPost.getRequestLine());

ResponseHandler responseHandler = new ResponseHandler() {

public String handleResponse(

final HttpResponse response) throws ClientProtocolException, IOException {

int status = response.getStatusLine().getStatusCode();

if (status >= 200 && status < 300) {

HttpEntity entity = response.getEntity();

return entity != null ? EntityUtils.toString(entity) : null;

} else {

throw new ClientProtocolException("意外的状态返回: " + status);

}

}

};

String responseBody = httpclient.execute(httpPost, responseHandler);

JSONObject dataObject = JSONObject.fromObject(responseBody);

return dataObject;

} finally {

httpclient.close();

}

}

log4g

###set output encoding###

log4j.appender.logfile.encoding=UTF-8

### set log levels ###

log4j.rootLogger = INFO , ERROR ,stdout , logfile

### 控制台输出 ###

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.Target = System.out

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %p %t [%c]%M(line:%L)%m%n

### save error log ###

log4j.appender.ERROR = org.apache.log4j.DailyRollingFileAppender

log4j.appender.ERROR.File = logs/error.log

log4j.appender.ERROR.Append = true

log4j.appender.ERROR.Threshold = ERROR

log4j.appender.ERROR.layout = org.apache.log4j.PatternLayout

log4j.appender.ERROR.layout.ConversionPattern =%-d{yyyy-MM-dd HH:mm:ss} %p %t [%c]%M(line:%L)%m%n

### write in log ###

log4j.appender.logfile = org.apache.log4j.DailyRollingFileAppender

log4j.appender.logfile.File=logs/debug.log

log4j.appender.logfile.Append = true

log4j.appender.logfile.Threshold = DEBUG

log4j.appender.logfile.layout=org.apache.log4j.PatternLayout

log4j.appender.logfile.layout.ConversionPattern=%-d{yyyy-MM-dd HH:mm:ss} %p %t [%c]%M(line:%L)%m%n

mybatis:跟mysql交互

根据表名创建各跟表名一样的类 例如Account_info表如下,并定义跟表结构一样的字段。

新建一个interface(如Account_infoDao) 创建一个方法,参数为mysql语句中你想通过什么查询的,例如下面我想通过account_id来查询出Accounts_info表的某行数据

实现接口interface(如Account_infoDaoImpl)

新建mapper文件(如新建个Accounts_infoMapper.xml文件)

在config.xml文件配置上mapper文件路径,如下Accounts_infoMapper.xml 路径

新建个类,用于接口需要时调用

接口需要处使用

public class Accounts_infoTest {

static Accounts_infoDao accountsDao = new Accounts_InfoDaoImpl();

/*** 通过account_id查询出 accounts_info表数据

* @param account_id 用户id

* @return account_info 表数据

*/

public static Accounts_Info byAccount_id(String account_id){

Accounts_info a = accountsDao.account_id(account_id);

return a;

}

Accounts_info accounts_info=Accounts_infoTest.byAccount_id(Integer.valueOf(account_id));

int coin_num_sql = accounts_info.getCoin();// 拿到数据库中 coin_num 字段

返回json解析

例1

// 拿到response_status对应的值success

String response_status = jsonObject .getString("response_status");

// 拿到post_enable的值1

String post_enable = json.getJSONObject("info").getJSONObject("data").getJSONObject("priv_option").getString("post_enable");

5be17c54e244

例2 返回的json是一组一组的

// 拿到list下多个组数据

JSONArray jsonArray = json.getJSONObject("info").getJSONObject("data").getJSONArray("list");

// 获取组数据中第一个数据(数组从0开始)并强制转成json格式

JSONObject jsonObject = (JSONObject) jsonArray.get(0);

String id = jsonObject.getString("id");// 获取强制转成json后的id

5be17c54e244

创建一个自动化API脚本的步骤

从api文档地址查找到对应api

配置对应api的 信息到 excel 表格

唯一标示(tid),协议(http),服务器地址与端口,api路径,api参数(0到多个)

新建个跟API 同名的类(例如LoginTest)

发起请求

JSONObject jsonObject = ApiEngine.taquAPI(唯一标识, Parameters.KEY,参数1的值,参数2的值);

Html例子

Document document= ApiEngine.XXXAPIHtml(tid, m, a, ticket_id);

log.info(jsonObject) 输出jsonObject 便于控制台查看结果

可能遇到的问题

控制台输出如下,可能你代码中的tid唯一标示在excel不存在或者excel编写后未能保存

5be17c54e244

控制台输入如下 可能原因 excel 配置的参数个数和代码发起请求是给的参数值的个数不一致通常发起请求代码给的参数个数大于excel配置的个数

5be17c54e244

错误提示 【x】【y】单元格为空,请。。。。 类似问题基本上解决方案是打开excel 找到第X+1 行 第Y+1 列,随便数据数据,保存,右键清空数据

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园整体解决方案是响应国家教育信息化政策,结合教育改革和技术创新的产物。该方案以物联网、大数据、人工智能和移动互联技术为基础,旨在打造一个安全、高效、互动且环保的教育环境。方案强调从数字化校园向智慧校园的转变,通过自动数据采集、智能分析和按需服务,实现校园业务的智能化管理。 方案的总体设计原则包括应用至上、分层设计和互联互通,确保系统能够满足不同用户角色的需求,并实现数据和资源的整合与共享。框架设计涵盖了校园安全、管理、教学、环境等多个方面,构建了一个全面的校园应用生态系统。这包括智慧安全系统、校园身份识别、智能排课及选课系统、智慧学习系统、精品录播教室方案等,以支持个性化学习和教学评估。 建设内容突出了智慧安全和智慧管理的重要性。智慧安全管理通过分布式录播系统和紧急预案一键启动功能,增强校园安全预警和事件响应能力。智慧管理系统则利用物联网技术,实现人员和设备的智能管理,提高校园运营效率。 智慧教学部分,方案提供了智慧学习系统和精品录播教室方案,支持专业级学习硬件和智能化网络管理,促进个性化学习和教学资源的高效利用。同时,教学质量评估中心和资源应用平台的建设,旨在提升教学评估的科学性和教育资源的共享性。 智慧环境建设则侧重于基于物联网的设备管理,通过智慧教室管理系统实现教室环境的智能控制和能效管理,打造绿色、节能的校园环境。电子班牌和校园信息发布系统的建设,将作为智慧校园的核心和入口,提供教务、一卡通、图书馆等系统的集成信息。 总体而言,智慧校园整体解决方案通过集成先进技术,不仅提升了校园的信息化水平,而且优化了教学和管理流程,为学生、教师和家长提供了更加便捷、个性化的教育体验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值