接口自动化大牛养成记﹒分享﹒第一篇

  对于大多数未做过接口测试的同学来说,可能并不清楚接口到底是什么,甚至你去问很多做过接口测试的同学什么是接口,他们也说不出个所以然,大多数人可能知道接口大概是什么,也知道怎么测,但是不知道如何用专业的术语去描述出来。

  接口的本质:接口就是一个函数,通过将接口部署到web容器(tomcat,jboss,weblogic等),发布服务后,就可以通过一个url地址去访问到接口了。而接口文档里面描述的接口参数呢其实就是函数的参数,接口的返回数据就是函数的返回值。即:接口=函数,接口参数=函数参数,接口返回值=函数返回值。以如下接口项目中的“获取用户列表”接口为例:(http://116.23.246.159:8380/futureloan/mvc/api/member/list),它其实就对应了后台的一个这样的一个同名函数:

        /**
	 * 获取用户列表
	 *
	 * @return
	 */
	@RequestMapping
	public @ResponseBody Result list() {
		Result result = null;
		try {
			List<Member> members = memberService.list();
			result = new Result(true, Ret.MEMBER_LIST_SUCCESS.code(), members, Ret.MEMBER_LIST_SUCCESS.value());
		} catch (Exception e) {
			logger.error(e);
			result = new Result(false, Ret.MEMBER_LIST_FAIL.code(), Ret.MEMBER_LIST_FAIL.value());
		}
		return result;
	}

  接口测试跟ui测试的本质区别

UI测试更专注于ui页面,而不关注系统内部实现,一个功能模块是否有bug,所有的判断依据都直接来自于前端页面反馈,跟我们的预期对比,一样就测试通过,不一样就是bug。而接口不一样,需要借助某些客户端工具模拟前端页面发送接口请求,测试人员通过判断接口返回数据与预期是否一致,对测试人员的技术要求更高。

  接口测试到底是在项目哪个阶段去做?

接口测试可以在项目的任意阶段做,只要接口已经开发出来了,提前介入,就能提前发现问题,不管系统是不是已经将页面与后台接口集成了,项目时间充足的前提下都最好对接口进行一轮或者多轮测试,基于两点原因:1)某些请求如果绕过前端直接往接口发送非法数据,而接口也有相应处理措施,那么将最大限度的降低了系统的风险;2)后端控制好了,所有的问题就集中与前端这一块了。

  手工测试接口有哪些工具:Postman,jmeter,Soapui,Fiddler等主流的工具都能完成。

  什么是接口自动化? 通过代码驱动测试而非人工。

  为什么需要做接口自动化? 通过机器来替代人工,解放生产力。

  如何做接口自动化? 通过http技术处理接口调用。

  接口自动化环境如何搭建:

  1.创建maven项目,为什么用maven项目,最重要最直接的原因是希望maven来管理咱们的项目依赖,这样我们就不需要满世界的找各种jar包去下载了。

  2.集成HttpClient,在maven项目引入HttpClient-4.5.2这个框架的依赖,这个框架提供了一些http技术可以帮助咱们去发起接口调用并处理接口返回数据,以下是依赖描述。

<dependency>

<groupId>org.apache.httpcomponents</groupId>

<artifactId>httpclient</artifactId>

<version>4.5.2</version>

</dependency>

  3.集成testng,利用testng这个测试框架来帮助咱们来更好的管理测试类,以及它提供了丰富的注解,方便咱们去实现多场景测试设计。以下是依赖描述。

<dependency>

<groupId>org.testng</groupId>

<artifactId>testng</artifactId>

<version>6.8.8</version>

<scope>test</scope>

</dependency>

  4.至于项目的其他依赖在后面的接口自动化框架实现过程中再给大家补充,本节只为实现一个最简单的环境和一个接口调用案例。

  小试牛刀:通过http技术post一次接口请求,完成对于登录接口(login)的调用,并得到接口返回数据。代码如下

package com.lemonban;

import java.io.UnsupportedEncodingException;
import java.util.ArrayList;
import java.util.List;

import org.apache.http.NameValuePair;
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.annotations.Test;

public class HelloWorld {
	@Test
	public void test(){
		String restUrl = "http://116.23.246.159:8380/lmcanon/mvc/member/api/member/login";
		//1.决定接口提交的方式(post/get),此处以post为例
		HttpPost httpPost = new HttpPost(restUrl);
		//2.准备提交参数
		List<NameValuePair> params = new ArrayList<NameValuePair>();
		BasicNameValuePair basicNameValuePair1 = new BasicNameValuePair("nickname", "admin");
		BasicNameValuePair basicNameValuePair2 = new BasicNameValuePair("password", "d5149ce361d6ee80eeccc260795eb1d1");
		params.add(basicNameValuePair1);
		params.add(basicNameValuePair2);
		//3.参数封装到请求体当中
		try {
			httpPost.setEntity(new UrlEncodedFormEntity(params));
			//4.准备客户端(HttpClient)
			CloseableHttpClient httpClient = HttpClients.createDefault();
			//5.提交请求
			CloseableHttpResponse httpResponse = httpClient.execute(httpPost);
			String name = httpResponse.getFirstHeader("Set-Cookie").getName();
			String value = httpResponse.getFirstHeader("Set-Cookie").getValue();
			HttpUtils.addHeader(name, value);
			System.out.println("name="+name+",value="+value);
			//6.解析接口返回数据
			String result = EntityUtils.toString(httpResponse.getEntity());
			System.out.println("*********返回数据:"+result);
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
}

  代码执行结果

    

  总结:以上代码是一个简单的案例,离我们的接口自动化框架还差十万八千里。我们的最后的测试框架是针对于不同类型接口项目的自动化测试统一解决方案,因此兼容性,复用性都要达到最大化,而这些都需要好的设计思想去支撑,以下为我们在实现这个测试框架中需要去逐步解决的几个问题:

  下一篇专注于单接口测试到多接口的测试的过渡实现。大家敬请期待。

原文地址:https://www.cnblogs.com/nickjiang/p/9155016.html

时间: 2024-11-13 03:53:28

接口自动化大牛养成记﹒分享﹒第一篇的相关文章

uni.app实践---微信公众号h5开发记实-----第一篇

介绍:==uni-app== 是一个使用 Vue.js 开发所有前端应用的框架,开发者编写一套代码,可编译到iOS.Android.H5.以及各种小程序(微信/阿里/百度/头条/QQ)等多个平台. uni-app官网:传送门 uni-app插件市场:传送门 前一段时间因为个人了解到这个比较nb的多端开发框架,所以有兴趣自己去尝试了一下,从开始的搭建项目到微信公众号h5的登录-->微信支付都尝试了一遍.第一次尝试也踩了很多的坑.相信有很多小伙伴也遇到过这样的疑惑和问题.(大神略过),所以在这里写下

Java大牛养成记(6)——将订单提交到数据库出错(Could not insert)

背景:SSH视频真是个强大的视频,里面涉及的知识广,符合当今的网商趋势.视频里面的老师思路清晰,分析需求也相当了得.当然,跟着这个视频的思路走,自己很容易理解里面的内容.但是跟着走也能出错,我也是醉了,下面介绍一下我的奇葩经历. 一.问题出世 将订单提交到数据库的时候出现了下面的错误,说什么不能将数据插入到数据库中,刚开始的时候以为是自己写错了,反复查询多遍,但是从vo到dao到service到action,在就是JSP页面.applicationContext.xml和Struts.xml都没

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

在上一篇中,我们搭建好了HttpClient + TestNG + Java的自动化接口测试环境,这一篇我们就赶紧开始编写我们的第一个接口测试用例. 本篇会对问题解决的思路进行更详尽的阐述. 2.1 确定被测接口 首先一个现实的问题,我们要有一个待测接口来验证我们自动化方案的可行性. 我们可以选择在自己的本地去部署一套待测接口,当然也可以选择公网上的接口去进行测试,这里我们选择后者. 我选定的是apishop这个站点:https://www.apishop.net/ 这个站点提供非常多,种类齐全

Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇)

Python3中级玩家:淘宝天猫商品搜索爬虫自动化工具(第一篇) 一.前言 大家好,今天我要来讲讲一个比较实用的爬虫工具,抓取淘宝的关键字商品信息,即是: 输入关键字,按照价格等排序,抓取列出的商品信息以及下载图片,并且支持导出为Excel. 如果如下: 看完下面的讲解,Python语言就掌握得差不多,中级水平了,而且这个封装后的工具还是很好用的. 感觉自己萌萌哒~~ 二.原理 大家知道什么叫爬虫,它也叫网络蜘蛛,机器人等,意思就是说自动的程序,可以去抓取使用网络协议传输的内容. 目前来讲爬虫主

Python自动化基础【第一篇】:目录

本系列博文包含 Python基础.前端开发.Web框架.缓存以及队列等,希望可以给正在学习编程的童鞋提供一点帮助!!! Python自动化基础[第一篇]:目录 Python自动化基础[第二篇]:初识Python Python自动化基础[第三篇]:Python基本数据类型 Python自动化基础[第四篇]:Python基础之函数 Python自动化基础[第五篇]:Python基础之杂货铺 Python自动化基础[第六篇]:模块 Python自动化基础[第七篇]:面向对象 Python自动化基础[第

开博第一篇:记一个前端实现的“换一换”功能

需求的极简概要:实现“换一换”按钮的功能,点击之后,换另一批对应的品牌 刚开始的时候考虑使用ajax请求数据,之后通过js在页面上填充到指定位置,但是真是懒得给这个ajax请求单独再配一个请求映射了,干脆直接在后台把需要的内容全部拼成JSON字符串,直接在前台解析,分页. 页面比较简单,就不上html代码了,大概思路就是:两个“换一换”按钮分别对应两套数据,共用一个分页的方法,分别传入各自的页数,显示对应页数的内容.当然了,实现“换一换”的方法多种多样,我在此只是记录一下自己的思路,欢迎批评指教

Android自动化第一篇:Mac下的Eclipse+Pydev 环境搭建

开始了我的自动化之路 首先安装环境,参考下文 转自 http://www.51testing.com/html/46/n-848346.html http://www.51testing.com/html/46/n-848346-2.html 安装时出现问题解决: Mac环境下eclipse插件pydev安装失败的解决办法 1. 打开eclipse2. 选择install new software3. 输入pydev, http://pydev.org/updates/4. 根据向导安装5. 重

华为测试大牛Python+Django接口自动化怎么写的?

有人喜欢创造世界,他们做了开发者:有的人喜欢开发者,他们做了测试员.什么是软件测试?软件测试就是一场本该在用户面前发生的灾难提前在自己面前发生了,这会让他们生出一种救世主的感觉,拯救了用户,也就拯救者这个软件,避免了他们被卸载的命运. 最近被几个公司实习生整自闭了,没有基础,想学自动化又不知道怎么去学,没有方向没有头绪,说白了其实就是学习过程中没有成就感,所以学不下去.出于各种花里胡哨的原因,今天给大家整一个简单又有成就感的接口自动化学习吧. 不皮了,进入正题.本文中用到的技术点有:Python

阿里巴巴移动安全应用加固能力养成记

近些年来,移动APP数量呈现爆炸式的增长,黑产也从原来的PC端转移到了移动端,伴随而来的逆向攻击手段也越来越高明.在解决加固产品容易被脱壳的方案中,代码混淆技术是对抗逆向攻击最有效的方式之一.但目前的移动端加固技术真能抵御黑客的攻击吗? 本报告将分享阿里巴巴集团安全部应用加固能力养成记,重点介绍Android加固对于端上的业务风险控制是如何做到自动化部署和分析,更快捷的感知安全风险,以便快速做出响应,减少不必要的业务损失. 主讲人:阿里巴巴安全专家乱武. 今天讲的大的标题叫[APP加固新方向],