一、maven中引入httpclient、testng、poi依赖包

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion> <groupId>com.lemon</groupId>
<artifactId>interfaceDemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging> <name>interfaceDemo</name>
<url>http://maven.apache.org</url> <properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties> <dependencies>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.5.2</version>
</dependency>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.8.8</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.15</version>
</dependency>
</dependencies>
</project>

二、准备测试数据

三、poi读取Excel文件

package com.lemon;

import java.io.File;
import org.apache.poi.ss.usermodel.Cell;
import org.apache.poi.ss.usermodel.CellType;
import org.apache.poi.ss.usermodel.Row;
import org.apache.poi.ss.usermodel.Row.MissingCellPolicy;
import org.apache.poi.ss.usermodel.Sheet;
import org.apache.poi.ss.usermodel.Workbook;
import org.apache.poi.ss.usermodel.WorkbookFactory; public class ExcelUtil { public static Object[][] read(int startRow,int endRow,int startCell,int endCell){ Object [][] datas = new Object [endRow-startRow+1][endCell-startCell+1];
try {
//获取WorkBook对象
Workbook workbook = WorkbookFactory.create(new File("src/test/java/test.xlsx"));
//获取sheet,0表示第一个
Sheet sheet = workbook.getSheetAt(0);
for(int i = startRow; i <= endRow;i++){
//取出每一行
Row row = sheet.getRow(i-1);
for (int j = startRow; j <= endCell;j++){
//取出每一列,先指定不会返回空对象,防止单元格为空时,报空指针异常
Cell cell = row.getCell(j-1,MissingCellPolicy.CREATE_NULL_AS_BLANK);
//把每列当字符串处理,并取出字符串的值
cell.setCellType(CellType.STRING);
String value = cell.getStringCellValue();
datas[i-startRow][j-startCell] = value;
}
}
} catch (Exception e) {
e.printStackTrace();
}
return datas;
}
//测试
public static void main(String[] args) throws Exception {
Object[][] datas = read(2, 7, 2, 5);
for(Object[] objects:datas){
for(Object object:objects){
System.out.print("【"+object+"】");
}
System.out.println();
}
}
}

四、编写接口自动化脚本

package com.lemon;

import java.io.UnsupportedEncodingException;
import java.util.*;
import java.util.regex.Matcher;
import java.util.regex.Pattern; import org.apache.http.client.entity.UrlEncodedFormEntity;
import org.apache.http.client.methods.CloseableHttpResponse;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.utils.URLEncodedUtils;
import org.apache.http.impl.client.CloseableHttpClient;
import org.apache.http.impl.client.HttpClients;
import org.apache.http.message.BasicNameValuePair;
import org.apache.http.util.EntityUtils;
import org.testng.Assert;
import org.testng.annotations.DataProvider;
import org.testng.annotations.Test; public class Demo { @Test(dataProvider="datas")
public static void test(String url,String mobileCode,String userID,String type,String response) throws Exception { System.out.println("url:"+url+",mobileCode:"+mobileCode+",userID:"+userID+",type:"+type);
if("post".equalsIgnoreCase(type)){
String resp = doPost(url,mobileCode,userID);
Assert.assertEquals(resp, response);
}else {
String resp = doGet(url,mobileCode,userID);
Assert.assertEquals(resp, response);
}
} @DataProvider
public static Object [][] datas(){ /* Object [][] datas = {
{"http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo","15578581","","post"},
{"http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo","18381485","","get"},
{"http://ws.webxml.com.cn/WebServices/MobileCodeWS.asmx/getMobileCodeInfo","15084258","","post"}
}; */ Object[][] datas = ExcelUtil.read(2, 5, 2, 6);
return datas;
} /*
* 实现get类型接口的调用
*/
private static String doGet(String url,String mobileCode,String userID) throws Exception {
//准备参数
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
BasicNameValuePair mobile = new BasicNameValuePair("mobileCode",mobileCode);
BasicNameValuePair ID = new BasicNameValuePair("userID",userID);
params.add(mobile);
params.add(ID);
String paramsString = URLEncodedUtils.format(params, "UTF-8");
url += "?" + paramsString;
//创建get对象
HttpGet get = new HttpGet(url);
//创建Httpclient对象
CloseableHttpClient httpclient = HttpClients.createDefault();
//提交请求
CloseableHttpResponse response = null;
try {
response = httpclient.execute(get);
//获取状态码及响应数据
int status = response.getStatusLine().getStatusCode();
System.out.println("状态码为:" + status);
String result = EntityUtils.toString(response.getEntity());
System.out.println("响应数据为:" + result);
//创建Pattern对象
Pattern pat = Pattern.compile(">(.*)</");
//创建matcher对象
Matcher m = pat.matcher(result);
if (m.find( )){
return m.group(1);
}
} catch (Exception e) {
e.printStackTrace();
}finally {
if (response != null) {
response.close();
}
//相当于关闭浏览器
httpclient.close();
}
return null;
}
/*
* 实现post类型接口的调用
*/
private static String doPost(String url,String mobileCode,String userID) throws Exception {
//创建post对象
HttpPost post = new HttpPost(url);
//准备参数
List<BasicNameValuePair> params = new ArrayList<BasicNameValuePair>();
BasicNameValuePair mobile = new BasicNameValuePair("mobileCode",mobileCode);
BasicNameValuePair ID = new BasicNameValuePair("userID",userID);
params.add(mobile);
params.add(ID);
//将参数封装到请求体当中
post.setEntity(new UrlEncodedFormEntity(params));
//创建httpclient对象发送请求
CloseableHttpClient httpclient = HttpClients.createDefault();
CloseableHttpResponse response = null;
try { response = httpclient.execute(post);
//获取状态码及响应数据
int status = response.getStatusLine().getStatusCode();
System.out.println("状态码为:" + status);
String result = EntityUtils.toString(response.getEntity());
System.out.println("响应数据为:" + result);
// 创建 Pattern对象
Pattern pat = Pattern.compile(">(.*)</");
// 现在创建 matcher对象
Matcher m = pat.matcher(result);
if (m.find( )) {
return m.group(1);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}finally {
if (response != null) {
response.close();
}
//相当于关闭浏览器
httpclient.close();
}
return null;
}
}

五、执行测试套

六:执行结果

Java + maven + httpclient + testng + poi实现接口自动化的更多相关文章

  1. 接口测试框架开发(三):maven+restAssured+Excel(jxl)+testng+extentreports的接口自动化

    1.http://www.cnblogs.com/lin-123/p/7151031.html 2.http://www.cnblogs.com/lin-123/p/7151046.html 3.ht ...

  2. Java+maven+selenium3+testng 自动化测试环境IDEA

    idea .java环境变量jdk maven安装及环境变量配置这里就不多说了,网上有很多教程 这里我们只检测一下java.maven环境是否安装成功 win+R,运行cmd命令行:mvn -v   ...

  3. java maven项目testng执行时使用的是test-classes下的文件,共享main下方resource的配置

    在pom.xml中配置 <build> <testResources> <testResource> <directory>${project.base ...

  4. 接口自动化:HttpClient + TestNG + Java(二) - 第一个接口测试:get请求

    在上一篇中,我们搭建好了HttpClient + TestNG + Java的自动化接口测试环境,这一篇我们就赶紧开始编写我们的第一个接口测试用例. 本篇会对问题解决的思路进行更详尽的阐述. 2.1 ...

  5. 接口自动化:HttpClient + TestNG + Java(一) - 接口测试概述+自动化环境搭建

    1.1 接口测试简介 1.1.1 什么是接口测试 开始学习接口自动化测试之前,我们先要来了解什么是接口,以及什么是接口测试. 我们都知道,测试从级别上划分可以分为 组件测试 集成测试 系统测试 验收测 ...

  6. 接口自动化框架(java)--5.通过testng.xml生成extentreport测试报告

    这套框架的报告是自己封装的 由于之前已经通过Extentreport插件实现了Testng的IReport接口,所以在testng.xml中使用listener标签并指向实现IReport接口的那个类 ...

  7. Java接口自动化测试之HTTPClient学习(四)

    pom.xml  文件中dependency <dependencies> <dependency> <groupId>org.testng</groupId ...

  8. 接口测试 java+httpclient+testng+excel

    最近项目不忙,研究了下java实现接口自动化,借助testng+excel实现数据驱动 目前只用post方式测试,返回结果列没有通过列名去找 另外,请求参数是转义之后的,接口之间的依赖也是个问题,批量 ...

  9. 接口自动化框架(java)--1.项目概述

    项目github地址: https://github.com/tianchiTester/API_AutoFramework 这套框架的报告是自己封装的 1.测试基类TestBase: 接口请求的te ...

随机推荐

  1. python获取响应某个字段值的三种方法

    近期将要对两个接口进行测试,第一个接口的响应值是第二个接口的查询条件.为了一劳永逸,打算写个自动化测试框架.因为请求和响应都是xml格式的,遇到的问题就是怎么获取xml响应的某一个值.尝试了很多博客的 ...

  2. svnsync笔记

    svnsync从库配置 1.创建空的从库 root@test: /svn # svnadmin create test 2.从库用户配置 修改authz : [groups] sync = sync ...

  3. ValueError: Unknown label type: 'continuous'

    说明:SVM训练的标签列必须为整型数值,不能为float.y = np.array(y, dtype=int)或y.astype('int')

  4. 如何使用捷映App制作朋友圈九宫格视频图片合集

    在刷朋友圈的过程中,看到九宫格的视频图片合集,带有酷炫的音效和动效,展现效果非常好,那么我们该如何制作呢?下面我为大家介绍. 第一步,我们需要在各大应用市场搜索[捷映视频制作]App,点击[安装]. ...

  5. MapStruct 解了对象映射的毒

    前言 MVC模式是目前主流项目的标准开发模式,这种模式下框架的分层结构清晰,主要分为Controller,Service,Dao.分层的结构下,各层之间的数据传输要求就会存在差异,我们不能用一个对象来 ...

  6. 直播软件开发如何使用FFMPEG推流并保存在本地

    最近开发了基于C#的直播软件开发推流器一直不大理想,终于在不懈努力之后研究了一点成果,这边做个笔记:本文着重在于讲解下如何使用ffmpeg进行简单的推流,看似简单几行代码没有官方的文档很吃力.并获取流 ...

  7. Android Google官方文档解析之——Application Fundamentals

    Android apps are written in the java programming language.The Android SDK tools compile your code-al ...

  8. 运维告警排班太复杂?试试Cloud Alert智能告警排班

    前言: 之前的几篇文章有说过,通过智能告警平台Cloud Alert,将指定条件的告警以多样化的通知方式,通知到指定的人,其中的通知的方式包含电话.短信.邮件.微信.APP.钉钉等. 本篇文章就来说下 ...

  9. sed1

    Linux sed命令 Linux 命令大全Linux sed命令是利用script来处理文本文件.sed可依照script的指令,来处理.编辑文本文件.Sed主要用来自动编辑一个或多个文件:简化对文 ...

  10. 线程范围内的环境变量---ThreadLocal

    package cn.itcast.heima2; import java.util.HashMap; import java.util.Map; import java.util.Random; p ...