根据接口文档写接口测试用例-->添加接口自动化测试项目相关依赖(httpclient+testng+poi-ooxml+log4j+mail+mysql-connector-java)-->写接口测试方法-->执行测试

-- 接口测试
1.一个接口就是一个函数
2.我们要保证一个接口能够在url地址栏里面访问到,必须满足一下两个条件
一是这个接口首先是部署到服务器上的web容器中,
而是此接口必须实现了http协议
-- 接口文档
接口地址
请求方式
参数
变量名
类型
说明
备注

-- 接口测试工具:
soapui,jmeter,pastman,fiddler
都操作一次
soapui:准备url创建项目,根据接口文档确定提交的方式,准备传参,发送请求,获取接口返回数据

-- ui层面的功能测试跟接口测试的区别:
1.ui层面可以通过页面填写数据,传数据到后台,
但是接口测试没有页面,我们只能借助接口测试工具模拟页面去提交接口数据。
2.UI层面的功能测试会有后台接口返回的数据,并且数据会通过js以提示信息的方式显示在页面帮助用户或者测试人员去判断功能是否正常。
但是接口测试就没有页面提示信息,我们能看到的是接口返回的最原始的数据。

接口自动化实现:
java有专门的第三方框架可以提供了一套基于http协议的接口请求和处理技术。--httpclient

-- 环境搭建
创建maven项目-eclipse集成testng-集成testng框架
添加依赖
    <dependencies>
        <!-- 管理用例,提供多种测试场景实现 -->
        <dependency>
            <groupId>org.testng</groupId>
            <artifactId>testng</artifactId>
            <version>6.8.8</version>
            <scope>test</scope>
        </dependency>
        <!-- 接口提交(get/post) -->
        <dependency>
            <groupId>org.apache.httpcomponents</groupId>
            <artifactId>httpclient</artifactId>
            <version>4.5.2</version>
        </dependency>
        <!-- 解析excel文件 -->
        <dependency>
            <groupId>org.apache.poi</groupId>
            <artifactId>poi-ooxml</artifactId>
            <version>3.15</version>
        </dependency>
        <!-- 记录日志框架 -->
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <!-- 发送邮件框架 -->
        <dependency>
            <groupId>javax.mail</groupId>
            <artifactId>mail</artifactId>
            <version>1.5.0-b01</version>
        </dependency>
        <!-- jdbc技术,数据库驱动 -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>5.1.38</version>
        </dependency>
    </dependencies>

-- httpPost
1,以post方式提交请求到服务器
2,参数封装到请求体当中
3,数据长度是没有限制的
4,支持post方式提交的接口往往是吧数据提交到服务器
关键api函数
构造函数:
HttpPost post=new HttpPost(url);
创建一个post对象,以post方式提交接口请求
设置参数到请求体
post.setEntity(new UrlEncodedFormEntity(params));
通过此方法将接口参数设置到请求中

-- httpGet
1,以get方式提交请求到服务器
2,get参数不是封装在请求体当中的(由没有setEntify方法就可以看出)
3,数据长度是有限制的
4,支持get提交的接口一般都是从服务器拿下来数据
关键api函数
构造函数:
HttpGet httpGet=new HttpGet(interfacesurl);
创建一个get对象,以get方式提交接口请求
注意:如果以get提交的接口请求有需要传参,蚕食通常是直接拼接在url后面
例子
public class RegisterInterface {
    @Test
    public void test1() throws Exception{
        //准备url;
        String url="http://8080/lmcanon_web_auto/mvc/member/api/member/register";
        //接口提交的方式;
        HttpPost post=new HttpPost(url);
        //准备传参;
        List<NameValuePair>params=new ArrayList<NameValuePair>();
        params.add(new BasicNameValuePair("mobilephone", "13517315121"));
        params.add(new BasicNameValuePair("pwd", "e10adc3949ba59abbe56e057f20f883e"));
        //将参数设置到post请求中
        post.setEntity(new UrlEncodedFormEntity(params));
        //发送请求;
        CloseableHttpClient httpclient=HttpClients.createDefault();
        CloseableHttpResponse response=httpclient.execute(post);
        //获取接口返回数据.
        String jsonStr=EntityUtils.toString(response.getEntity());
        System.out.println(jsonStr);
    }}
    
    @Test
    public void get() throws Exception{
        //定义接口地址
        String interfacesurl="http://8080/futureload/mvc/api/member/list";
        //决定接口提交方式
        HttpGet httpGet=new HttpGet(interfacesurl);
        //直接提交接口请求,准备客户端
        CloseableHttpClient httpClient=HttpClients.createDefault();
        CloseableHttpResponse response=httpClient.execute(httpGet);
        //获取相应数据
        String jsonString=EntityUtils.toString(response.getEntity());
        System.out.println(jsonString);
    }}
    
--httpRequeste
接口类型,表示是从客户端发送服务端请求
HttpGet和httpPost都是httpRequest实现类,属于子类对象

-- httpResponse    
接口类型,表示是从服务端到客户端的响应
从响应对象中获取返回数据:getEntity()
从响应对象中获取响应状态:getStatusLine()
从响应对象中获取响应头信息:getAllHeaders()
从响应对象中设置响应头信息:setHeader

-- 93框架实现步骤
1,testng管理用例
2,实现httpUtil类提供公共的方法处理post和get请求
3,设计测试用例
4,实现数据驱动(获取url,接口类型,传参,封装成方法)
5,接口测试数据回写
6,日志集成
7,报表集成
8,jenkins集成

--get和post公共方法
public static String getResultStringByPost(String uri,List<NameValuePair>params){
        //调用函数StringUtils.isEmpty(uri),对uri是否为空的处理
        if(StringUtils.isEmpty(uri)){
            return "";
            }
        //创建httpPost对象
        HttpPost httpPost=new HttpPost(uri);
        String resultString="";
        //设置参数到httpPost对象中
        try {
            httpPost.setEntity(new UrlEncodedFormEntity(params));
            //准备httpclient客户端
            CloseableHttpClient httpClient= HttpClients.createDefault();
            //发送请求
            CloseableHttpResponse response=httpClient.execute(httpPost);
            //解析数据
            resultString=EntityUtils.toString(response.getEntity());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return resultString;
        
    }
    /**get请求通用处理函数
     * @param uri:接口地址
     * @param params:提交参数
     * @return:接口响应数据
     */
    public static String getResultStringByGet(String uri,List<NameValuePair>params){
        //调用函数StringUtils.isEmpty(uri),对uri是否为空的处理
        if(StringUtils.isEmpty(uri)){
            return "";
            }
        if(params==null){
            return "";
        }
        for (int i=0;i<params.size();i++) {
            NameValuePair nameValuePair=params.get(i);
            if(i==0){
            uri+=("?"+nameValuePair.getName()+"="+nameValuePair.getValue());
            }else{
                uri+=("&"+nameValuePair.getName()+"="+nameValuePair.getValue());
            }
        }
        //创建httpGet对象
        HttpGet httpGet=new HttpGet(uri);
        String resultString="";
        //设置参数到httpPost对象中
        try {
//            httpGet.setEntity(new UrlEncodedFormEntity(params));
            //准备httpclient客户端
            CloseableHttpClient httpClient= HttpClients.createDefault();
            //发送请求
            CloseableHttpResponse response=httpClient.execute(httpGet);
            //解析数据
            resultString=EntityUtils.toString(response.getEntity());
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return resultString;
        
    }
//StringUtils判空方法
public class StringUtils {
    public static boolean isEmpty(String content){
        boolean isEmpty=(content==null||content!=null&&content.trim().length()==0);
        return isEmpty;
    }
}

转载于:https://www.cnblogs.com/AIME/p/8907207.html

2018-04-22接口自动化测试学习心得(1)相关推荐

  1. Java学习笔记——从零开始(2018.04.22已更新)

    2018.04.08 --Java开发入门-- -计算机基本概念- •什么是计算机 计算机是一种能够按照程序运行,自动.高速处理海量数据的现代化智能电子设备.由硬件和软件所组成,没有安装任何软件的计算 ...

  2. 接口自动化测试学习整理

    接口自动化测试 一.接口测试的必要性和意义 接口,即API,应用程序编程接口 接口测试分类.方法介绍http://www.cnblogs.com/imyalost/p/5832672.html 接口测 ...

  3. 工作7年,一位已婚妹子UI自动化测试学习心得

    本文来自一位90后,已婚(3岁小孩的妈妈)妹子的投稿 本文妹子 大家好,我是罗春南,来自海南,工作7年,已是一位3岁孩子妈妈的,90后妹子(已婚,仍可撩).首先,很荣幸能收到公号作者对我的投稿邀请.我 ...

  4. Yapi接口自动化测试学习记录(ISSUES)

    文章目录 一.调用一次登录接口后,获取Cookie并且自动添加到后续所有接口的Header上的方法 二.在一个具体的项目中,接口已经录入完成,但在项目中设置了接口基本路径,而登录接口(用于获取Cook ...

  5. 芋道源码的周八(2018.04.22)

    点击上方"芋道源码",选择"置顶公众号" 技术文章第一时间送达! 源码精品专栏 中文详细注释的开源项目 Java 并发源码合集 RocketMQ 源码合集 Sh ...

  6. 转贴: wolfenstein工作室-eMule源代码学习心得

    1, eMule源代码学习心得(1):eMule代码的总体风格和其它相关工程 eMule的官方首页上写着:2002年05月13日 一个叫做 Merkur 的人,他不满意原始eDonkey2000客户端 ...

  7. 接口自动化测试_Python自动化测试学习路线之接口自动化测试「模块四」

    01.接口自动化测试概念 (接口测试的定义与意义;接口测试的实现方式和接口自动化的实现流程) 02.HTTP协议 (通信协议原理;HTTP与HTTP协议详解(请求,响应,请求方法,状态码).sessi ...

  8. Java接口自动化测试框架学习

    Java接口自动化测试框架学习 高级软件测试,性能测试,功能测试,自动化测试,接口测试,移动端测试,手机测试,WEB测试,渗透测试,测试用例设计,黑盒测试,白盒测试,UFT高级测试,Android测试 ...

  9. BT源代码学习心得(五):统一网络服务接口--RawServer -- 转贴自 wolfenstein (NeverSayNever)

    BT源代码学习心得(五):统一网络服务接口--RawServer author:wolfenstein 以后的部分都需要网络服务(种子文件的生成在本地就可以完成,但是通过这些种子文件下载实际的内容和提 ...

最新文章

  1. 沧州学计算机设计大赛,沧职两学子全国工业机器人技能大赛获奖
  2. Leetcode 904.水果成蓝(滑动窗口,哈希容器map
  3. Python技巧——list comprehension 与 functools.reduce
  4. c++字符串string操作全解
  5. 求最长XX序列的两种方法
  6. 《机器学习实战》完整读书笔记
  7. 关于s19赛季服务器维修,王者荣耀S19赛季版本更新问题及解决办法一览
  8. vue小案例---cnode
  9. AutoCAD2015官方原版软件下载
  10. 微信淘宝客机器人分享
  11. 元宇宙大杀器来了!小扎祭出4款VR头显,挑战视觉图灵测试
  12. android 发送短信的两种方式
  13. python猜拳游戏编程代码_Python实现猜拳小游戏
  14. R语言length()和lengths()的区别
  15. 用于服务器的芯片 i7,上海云服务器i7
  16. Python爬虫—爬取网易云音乐【热歌榜】歌曲的精彩评论(写入txt文本文件或者MySQL数据库)
  17. mysql去掉两个最高分_excel去掉两个(多个)最低分、最高分,求总(平均)分...
  18. 微信支付报错:用户传入的appid不正确,请联系商户处理
  19. 汇编语言中常用进制数据输出的程序实现
  20. Experiment01初始Matlab语言及编程环境

热门文章

  1. 笑郭网络验证3.8研究笔记(内有视频教程)
  2. tensorflow中的Supervisor
  3. 命令行下使用curl,采集数据遇到的问题。
  4. 怎样用u盘linux安装ntp协议,电脑中怎么配置NTP服务
  5. AUTOSAR从入门到精通100讲(二十六)-AutoSar之微控制器抽象层MCAL
  6. 魅蓝android底层是什么,魅蓝E2的手机系统是什么
  7. php 避免xss_PHP防止XSS注入
  8. Java tree set_Java TreeSet tailSet()方法
  9. 教你玩转CSS Position(定位)
  10. 某小型校园网规划与设计要点(课程报告)