接口自动化测试
IntelliJ IDEA JDK 1.8.0
Json格式化工具: 浏览器chrome安装JSONHandler
Java+maven+TestNG+junit+rest-assured
抓包:charles
请求工具:postman
接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等接口测试相对容易实现自动化持续集成,且相对UI自动化也比较稳定,可以减少人工回归测试人力成本与时间,缩短测试周期,支持后端快速发版需求。
a.需求分析
b.根据需求梳理接口测试点(评估测试周期)
c.检查服务端接口入参和实参是否缺少参数(如果不正确需要服务端矫正)
d.进行接口测试(实际验证点1.接口的业务逻辑json解析,2.return code 3.message 4.字段类型 5.包装接口调用业务方源接口数据正确性)(自动化灰盒脚本)
e.接口测试报告输出)
(1)测试前置、开发自测:一个新的自动化接口测试案例开发完成后,直接发给接口对应的开发,安排在开发本地环境执行,一旦开发确认完成接口开发,就开始执行接口测试案例,基本上可以实时拿到测试结果,方便开发快速做出判断
(2)回归测试:开发本地测试通过后,或整个需求手工测试通过后,把自动化的接口测试案例做分类整理,挑选出需要纳入到回归测试中的案例,在持续集成环境重新准备测试数据,并把案例纳入到持续集成的job中来,这些用于回归的接口测试案例需要配置到持续集成平台自动运行tesNGt报告已钉钉方式通知。
1首先安装JDK 1.6以上,intellij IDEA,创建Maven工程New->NewProject->Maven->
勾选create from archetype
输入项目名称下一步下一步完成如下图所示,一个完整的maven项目如图所示目录结构!
接下需要project配置File->project Structure
Modeules导入项目模块:import modeules-选择项目pom.xml
Libraries导入maven jar包
artifact是一个工具包:web application exploded->form module
response.asString()--获取请求返回内容体
response.response.getContentType()--获取响应的内容类型
response.getStatusCode()--获取响应的状态代码
response.getHeaders()--获取所有响应头信息
response.getHeader(String name)-- 根据指定的header名称,获取对应的响应信息
response.getCookie(String name)-- 根据指定的cookie名称,获取对应cookie的值
response.getCookies()--获取所有cookies信息
response.getTime()--响应时间(单位:毫秒)
1.response.then().body("returncode", equalTo(0));--return code是否等于0
2.response.getBody().prettyPrint();//格式化打印JSON数据
3.given().param("p1", "0").param("p2", "1").get("www.baidu.com");-URL参数化(拼接成www.baidu.com/p1=0&p2=1);
4.when().get("www.baidu.com/p1=0&p2=1").then().time(lessThan(100L),TimeUnit.MILLISECONDS);//判断响应时间是否少于预期值。
5.assured断言数据处理:get("/lotto").then().body("lotto.lottoId", equalTo(5)); 这个判断lotto下面的lotto.lottoId节点是否是5
Assert.assertEquals(bmessage, "海报");---预期和实际值是否一致
get("/lotto").then().body("lotto.winners.winnerId", hasItems(23, 54));
/lotto下面lotto.winners.winnerId值是否包含23,54
6.given().param("name","clq").then().statusCode(200).body("id", equalTo(2),"content", containsString("Hello").when().get("/greeting");
(参数name,当我发送get请求之后,那么你给我返回响应码200,并且id=2,content为hello)。
7.rdposturl.startsWith("https://rdx")-确定此字符串实例的开头是否与指定的字符串匹配.
8. rdposturl.endsWith(".jpg")-确定此字符串实例的末尾是否是.jpg图片
9. JsonPath yloan = get(yurl).getBody().jsonPath().setRoot("result");-获取整个节点的数据
10.response.getBody().jsonPath().getString("returncode")--获取某一个节点的值(如:return code)
11. get(url).then().assertThat().statusCode(200);--判断url返回的code码是否为200等等
12. Assert.assertNotNull(res.getBody().jsonPath().getString("result.orderguid"));Assert.assertNotNull(res.getBody().jsonPath().get("result.orderno"));
(/以上两个是判断断言下面值不能为空)
13.privateLogger logger = LoggerFactory.getLogger(AskDealersPricePvid.class);--打印错误log日志方法
14. List
<dependency>
<groupId>io.rest-assuredgroupId>
<artifactId>json-schema-validatorartifactId>
<version>3.0.1version>
dependency>
<dependency>
<groupId>io.rest-assuredgroupId>
<artifactId>spring-mock-mvcartifactId>
<version>3.0.1version>
dependency>
junitjra包-->
<dependency>
<groupId>junitgroupId>
<artifactId>junitartifactId>
<version>RELEASEversion>
dependency>
打印日志依赖包-->
<dependency>
<groupId>log4jgroupId>
<artifactId>log4jartifactId>
<version>1.2.17version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-apiartifactId>
<version>1.7.5version>
dependency>
<dependency>
<groupId>org.slf4jgroupId>
<artifactId>slf4j-log4j12artifactId>
<version>1.7.5version>
dependency>
生成testng报告依赖包-->
<dependency>
<groupId>org.testnggroupId>
<artifactId>testngartifactId>
<version>6.8version>
<scope>testscope>
dependency>
默认的jdk版本来进行处理,这样就容易出现版本不匹配的问题,以至于可能导致编译不通过的问题. 例如代码中要是使用上了jdk1.7的新特性,但是maven在编译的时候使用的是jdk1.6的版本,那这一段代码是完全不可能编译成.class文件的-->
<plugin>
<artifactId>maven-compiler-pluginartifactId>
<version>3.3version>
<configuration>
<source>1.8source>
<target>1.8target>
configuration>
plugin>
dns实现更换测试环境jar-->
<dependency>
<groupId>io.leopardgroupId>
<artifactId>javahostartifactId>
<version>0.3version>
dependency>
d.开启第一个测试类Get请求:
import io.restassured.response.Response;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.testng.Assert;
import org.testng.annotations.Test;
import java.io.IOException;
import static io.restassured.RestAssured.get;
http://blog.csdn.net/wx19900503/article/details/54944841