GET请求(Maven)

一、 src/main/java

1、【地址--HOST】创建并设置配置文件(后缀名.properties的文本文件):存放接口请求的host地址

2、【地址】TestBase.java类,所有接口请求测试的父类,写一个构造方法,实现加载读取properties文件,配置文件的代码写在空参构造函数里,好处就是,每初始化这个类的对象就会执行构造函数的代码,即执行读取配置文件这么一个作用

3、【请求方式】RestClient.java类,实现get请求的代码,和得到相应状态码和响应头信息,以及响应主体的json内容

二、src/test/java

1、【报告】测试类:GetApiTest.java类,测试上面的get请求

其他大佬的实例

1、前提条件:

(1).本机环境安装了maven并配置环境变量,如果是idea不用安装,已经集成了

(2).本机环境安装了idea软件

(3).本机环境安装了Java jdk 8版本

(4).本机需要能连接上互联网

新建maven项目就不写了,前面ui自动化写过了

2、添加必要的依赖包:httpclient、httpcore、Fastjson、Testng

  1.  
    <dependency>
  2.  
    <groupId>org.apache.httpcomponents</groupId>
  3.  
    <artifactId>httpclient</artifactId>
  4.  
    <version>4.5.6</version>
  5.  
    </dependency>
  6.  
     
  7.  
    <dependency>
  8.  
    <groupId>org.apache.httpcomponents</groupId>
  9.  
    <artifactId>httpcore</artifactId>
  10.  
    <version>4.4.10</version>
  11.  
    </dependency>
  12.  
     
  13.  
    <dependency>
  14.  
    <groupId>org.testng</groupId>
  15.  
    <artifactId>testng</artifactId>
  16.  
    <version>6.10</version>
  17.  
    </dependency>
  18.  
     
  19.  
    <dependency>
  20.  
    <groupId>com.alibaba</groupId>
  21.  
    <artifactId>fastjson</artifactId>
  22.  
    <version>1.2.29</version>
  23.  
    </dependency>

Httpcore主要是网络相关的组件,我们使用Http请求就需要网络相关底层方法。Testng主要是是一个单元测试框架,方便我们编写接口自动化用例。Fastjson是阿里巴巴的一个json的开源的组件,据说是最快的json的组件,主要用来json序列化和反序列操作。

3、写一个get请求的例子

(1)打开网站:https://reqres.in/,往下拉看到如图所示:

通过这个图,我们能够获取这些信息

1)网站host地址:https://reqres.in/

2)用户展示请求方式是: Get

3)接口的url 是: /api/users

4)接口的响应状态码是200,还可以看到响应body的JSON内容。

有了这些信息我们可以在Jmeter或者postman上面来测试一下:

执行一下:

和网站图片上显示一样,说明测试通过了。

(2)开始写代码:

1)设计配置文件:在src/main/java下新建一个包:com.qa.config,然后在新包下新建一个config.properties文件,文件内容如下。

2)新建一个TestBase.java,在src/main/java下新建一个包:com.qa.base包,将这个类写在该包中,该类作为所有接口请求测试的父类,都需要继承这个父类。目前我们就写一个构造方法,实现加载读取properties文件:

  1.  
    package com.qa.base;
  2.  
     
  3.  
    import org.testng.TestException;
  4.  
     
  5.  
    import java.io.FileInputStream;
  6.  
    import java.io.FileNotFoundException;
  7.  
    import java.io.IOException;
  8.  
    import java.util.Properties;
  9.  
     
  10.  
    public class TestBase {
  11.  
    public Properties prop;
  12.  
     
  13.  
    public TestBase(){
  14.  
    try{
  15.  
    prop=new Properties();
  16.  
    FileInputStream fis=new FileInputStream(System.getProperty("user.dir")+"/src/main/java/com/qa/config/config.properties");
  17.  
    prop.load(fis);
  18.  
    }catch(FileNotFoundException e){
  19.  
    e.printStackTrace();
  20.  
    }catch(IOException e){
  21.  
    e.printStackTrace();
  22.  
    }
  23.  
    }
  24.  
    //mian函数主要是为了检测user.dir目录是否正确,执行结果:E:\Java_project\MavenProject_script正是当前项目的目录
  25.  
    public static void main(String[] args){
  26.  
    System.out.println(System.getProperty("user.dir"));
  27.  
    }
  28.  
     
  29.  
    }

上面我们把加载配置文件的代码写在空参构造函数里,好处就是,每初始化这个类的对象就会执行构造函数的代码,即执行读取配置文件这么一个作用

3)新建一个RestClient.java类,实现get请求的代码。在src/main/java下新建一个包:com.qa.restclient,最要实现:实现了get请求,和得到相应状态码和响应头信息,以及响应主体的json内容

  1.  
    package com.qa.restclient;
  2.  
     
  3.  
    import com.alibaba.fastjson.JSON;
  4.  
    import com.alibaba.fastjson.JSONObject;
  5.  
    import org.apache.http.Header;
  6.  
    import org.apache.http.client.ClientProtocolException;
  7.  
    import org.apache.http.client.methods.CloseableHttpResponse;
  8.  
    import org.apache.http.client.methods.HttpGet;
  9.  
    import org.apache.http.impl.client.CloseableHttpClient;
  10.  
    import org.apache.http.impl.client.HttpClients;
  11.  
    import org.apache.http.util.EntityUtils;
  12.  
     
  13.  
    import java.io.IOException;
  14.  
    import java.util.HashMap;
  15.  
     
  16.  
    public class RestClient {
  17.  
    //1. Get 请求方法
  18.  
    public void get(String url) throws ClientProtocolException, IOException {
  19.  
    //创建一个可关闭的HttpClient对象
  20.  
    CloseableHttpClient httpclient= HttpClients.createDefault();
  21.  
    //创建一个HttpGet的请求对象
  22.  
    HttpGet httpget=new HttpGet(url);
  23.  
    //执行请求,相当于jmeter上点击执行按钮,然后赋值给HttpResponse对象接收
  24.  
    CloseableHttpResponse httpResponse=httpclient.execute(httpget);
  25.  
    //拿到Http响应状态码,例如和200,404,500去比较
  26.  
    int respinseStatusCode=httpResponse.getStatusLine().getStatusCode();
  27.  
    System.out.println("response status code-->"+respinseStatusCode);
  28.  
    //把响应内容存储在字符串对象
  29.  
    String responseString= EntityUtils.toString(httpResponse.getEntity(),"UTF-8");
  30.  
    //创建Json对象,把上面字符串序列化成Json对象
  31.  
    JSONObject responseJson= JSON.parseObject(responseString);
  32.  
    System.out.println("respon json from API->"+responseJson);
  33.  
    //获取响应头信息,返回是一个数组
  34.  
    Header[] headerArray=httpResponse.getAllHeaders();
  35.  
    //创建一个hashmap对象,通过jmeter可以看到请求响应头信息都是Key和value得形式,所以我们想起了HashMap
  36.  
    HashMap<String,String> hm=new HashMap<String,String>();
  37.  
    //增强for循环遍历headerArray数组,依次把元素添加到hashmap集合
  38.  
    for(Header header:headerArray){
  39.  
    hm.put(header.getName(),header.getValue());
  40.  
    }
  41.  
    //打印HashMap
  42.  
    System.out.println("response headers-->"+hm);
  43.  
     
  44.  
     
  45.  
    }
  46.  
     
  47.  
    }

4)写一个测试类:GetApiTest.java类,在src/test/java下新建一个包:com.qa.tests。测试上面的get请求

  1.  
    package com.qa.tests;
  2.  
     
  3.  
    import com.qa.base.TestBase;
  4.  
    import com.qa.restclient.RestClient;
  5.  
    import org.apache.http.client.ClientProtocolException;
  6.  
    import org.testng.annotations.BeforeClass;
  7.  
    import org.testng.annotations.Test;
  8.  
     
  9.  
    import java.io.IOException;
  10.  
     
  11.  
     
  12.  
    public class GetApiTest extends TestBase {
  13.  
    TestBase testBase;
  14.  
    String host;
  15.  
    String url;
  16.  
    RestClient restClient;
  17.  
     
  18.  
    @BeforeClass
  19.  
    public void setUp(){
  20.  
    testBase =new TestBase();
  21.  
    host=prop.getProperty("HOST");
  22.  
    url=host+"/api/users";
  23.  
     
  24.  
    }
  25.  
    @Test
  26.  
    public void getAPITest() throws ClientProtocolException, IOException {
  27.  
    restClient=new RestClient();
  28.  
    restClient.get(url);
  29.  
    }
  30.  
     
  31.  
    }

运行结果:

  1.  
    status code-->200
  2.  
    respon json from API->{"per_page":3,"total":12,"data":[{"last_name":"Bluth","id":1,"avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/calebogden/128.jpg","first_name":"George"},{"last_name":"Weaver","id":2,"avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/josephstein/128.jpg","first_name":"Janet"},{"last_name":"Wong","id":3,"avatar":"https://s3.amazonaws.com/uifaces/faces/twitter/olegpogodaev/128.jpg","first_name":"Emma"}],"page":1,"total_pages":4}
  3.  
    response headers-->{Transfer-Encoding=chunked, Server=cloudflare, CF-RAY=459a199309239559-NRT, Access-Control-Allow-Origin=*, ETag=W/"1bb-D+c3sZ5g5u/nmLPQRl1uVo2heAo", Connection=keep-alive, Set-Cookie=__cfduid=d746298a777ed31a0deaa8ed5264067471536836319; expires=Fri, 13-Sep-19 10:58:39 GMT; path=/; domain=.reqres.in; HttpOnly, Date=Thu, 13 Sep 2018 10:58:39 GMT, Content-Type=application/json; charset=utf-8, X-Powered-By=Express, Expect-CT=max-age=604800, report-uri="https://report-uri.cloudflare.com/cdn-cgi/beacon/expect-ct"}

请求成功,目前的目录如下 :

【亲测】Java 接口自动化步骤的更多相关文章

  1. java接口自动化(一) - 接口自动化测试整体认知 - 开山篇(超详解)

    简介 了解什么是接口和为什么要做接口测试.并且知道接口自动化测试应该学习哪些技术以及接口自动化测试的落地过程.其实这些基本上在python接口自动化的文章中已经详细的介绍过了,不清楚的可以过去看看.了 ...

  2. java接口自动化(三) - 手工接口测试到自动化框架设计之鸟枪换炮

    1.简介 上一篇宏哥介绍完了接口用例设计,那么这一章节,宏哥就趁热打铁介绍一下,接口测试工具.然后小伙伴们或者童鞋们就可以用接口测试工具按照设计好的测试用例开始执行用例进行接口手动测试了.关于手动测试 ...

  3. 想在java接口自动化里用上Python的requests?这样做就可以了

    相信现在很多的公司自动化测试重点都在接口层,因为接口测试更加接近代码底层,相对于UI自动化,接口自动化有着开发更快.覆盖更全.回报率高等优点. 接口自动化代码实现不难,本质上就是代码模拟发送请求,然后 ...

  4. Java接口自动化测试之集成MyBatis和MySQL (五)

    pom.xml新增dependency <dependency> <groupId>org.mybatis</groupId> <artifactId> ...

  5. java接口自动化(二) - 接口测试的用例设计

    1.简介 在这篇文章里,我们来学习一下接口测试用例设计,主要是来学习一些用例设计要点.其实说白了,接口用例设计和功能用例设计差不多,照猫画虎即可.不要把它想象的多么高大上,多么的难,其实一样,以前怎么 ...

  6. java接口自动化基础知识(二)

    二.HttpClient+testNG实现对接口的测试及校验 在上面第一篇中已经实现了基础配置和测试用例数据准备,本篇文章将以登录举例进行测试执行. 这是之前login接口的代码 @Test(grou ...

  7. java接口自动化基础知识(一)

    一.TestNG+MySQL+MyBatis实现对测试用例数据的读取 本篇文章讲解TestNG+MySQL+MyBatis+ExtentReports实现对测试用例数据的读取,下面放出所有配置文件的目 ...

  8. Java接口自动化测试之TestNG测试报告ExtentReports的应用(三)

    pom.xml导入包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...

  9. java 接口自动化测试之数据请求的简单封装

    我们自己用java写接口自动化测试框架或者做个接口自动化测试平台的话,是需要自己进行相关的请求的,因此我们需要简单的封装下httpclient,我新建了一个http工具类,将get方法和post方法进 ...

随机推荐

  1. 不应该使用String.valueOf的场景

    今天在接口中接收参数转换String时遇到一个巨大的坑,也是自己疏忽大意所致---- 事情是这样的,项目中接口的公共入参对象为Map<String,Object>,而sql中需要的参数为S ...

  2. ServletContext、ServletRequest和HttpSession的生命周期

    学习web的Listener监听器的时,监听域对象创建的监听器.通过监听器重新分析着三个对象的生命周期,清晰明了. 首先域对象的监听器有三个ServletContextListene.ServletR ...

  3. centos下源码编译安装MySQL

    解压下载的软件压缩包  tar xzvf mysql-5.1.63.tar.gz 进入解压的目录  cd mysql-5.1.63/ 安装需要的依赖包  yum install gcc gcc-c++ ...

  4. The 19th Zhejiang University Programming Contest Sponsored by TuSimple (Mirror)

    http://acm.zju.edu.cn/onlinejudge/showContestProblems.do?contestId=391 A     Thanks, TuSimple! Time ...

  5. impdp如何杀掉job

    今天刚执行一个impdp操作发现,硬盘空间可能不够了,赶紧按了Ctrl+C,结果发现磁盘空间仍然在减少.问了一下部门oracle专家,Ctrl+C是无法停止impdp的job的.需要将job进行att ...

  6. AJAX实现注册

    先添加点击事件: <input type="button" id="submittt" value="注册"/> 展示提示消息: ...

  7. opendistro 试用

    以前转载过一篇别人的关于opendistro的文章,还好使用docker-compose 运行,很方便,所以自己也跑下 环境准备 docker-compose 文件 version: '3' serv ...

  8. log4j根据包名 日志输出到不同文件中 , service层无法输出日志问题

    1. service 层因为要配置事务,使用了代理 <aop:config proxy-target-calss=''true"> <aop:pointcut id=&qu ...

  9. Window服务项目脚手架

    本人最近工作用到window服务程序,于是尝试分享下经验,开源了一个window服务脚手架项目,把window服务程序必不可少的组件集成进去,如日志组件log4net,window服务挂在后台,用日志 ...

  10. win10自动更新后SQLServer无法启动的问题排查

    今天中午windows提示更新系统补丁并重启后发现,本地的SQL Server服务器没有正常启动,手工启动sqlserver也失败了,报错:找不到ERRORLOG文件及相应目录. 很是奇怪.强制创建该 ...