Java接口自动化测试之HTTPClient学习(四)
pom.xml 文件中dependency
<dependencies>
<dependency>
<groupId>org.testng</groupId>
<artifactId>testng</artifactId>
<version>6.14.3</version>
</dependency>
<dependency>
<groupId>com.relevantcodes</groupId>
<artifactId>extentreports</artifactId>
<version>2.41.1</version>
</dependency>
<dependency>
<groupId>com.vimalselvam</groupId>
<artifactId>testng-extentsreport</artifactId>
<version>1.3.1</version>
</dependency>
<dependency>
<groupId>com.aventstack</groupId>
<artifactId>extentreports</artifactId>
<version>3.0.6</version>
</dependency>
<dependency>
<groupId>org.apache.httpcomponents</groupId>
<artifactId>httpclient</artifactId>
<version>4.1.2</version>
</dependency>
<dependency>
<groupId>com.alibaba</groupId>
<artifactId>fastjson</artifactId>
<version>1.2.47</version>
<scope>compile</scope>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>1.16.14</version>
</dependency>
</dependencies>
application.properties 文件, 配置一些常量, 例如:
# 请求URL
test.uri=http://localhost:8889
test.post.path1=/postDemo
test.post.path2=/postDemoWithCookie
test.get.path1=/getDemo?
test.get.path2=/getDemoWithCookie? # 请求头信息
header.accept=*/*
header.user.agent=Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/67.0.3396.79 Safari/537.36
header.content.type=application/json;charset=utf-8
header.accept.charset=utf-8
header.cookie=login=true
公共类的提取, 例如HttpUtils.java , ReadConfig.java
package com.testng.utils; import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpRequestBase;
import org.apache.http.entity.StringEntity;
import org.apache.http.impl.client.DefaultHttpClient;
import org.apache.http.util.EntityUtils; import java.io.IOException; public class HttpUtils { private static DefaultHttpClient defaultHttpClient = null; public static String doGet(String url) throws IOException {
String result;
defaultHttpClient = new DefaultHttpClient();
HttpGet get = new HttpGet(url);
setHeader(get);
result = EntityUtils.toString(defaultHttpClient.execute(get).getEntity(), "utf-8");
return result;
} public static String doPost(String url, String data) throws IOException {
String result;
HttpPost post = new HttpPost(url);
setHeader(post);
post.setEntity(new StringEntity(data, "utf-8"));
defaultHttpClient = new DefaultHttpClient();
result = EntityUtils.toString(defaultHttpClient.execute(post).getEntity(), "utf-8");
return result;
} private static void setHeader(HttpRequestBase httpRequestBase) {
httpRequestBase.setHeader("Accept", ReadConfig.ACCEPT);
httpRequestBase.setHeader("User-Agent", ReadConfig.USER_AGENT);
httpRequestBase.setHeader("Content-Type", ReadConfig.CONTENT_TYPE);
httpRequestBase.setHeader("Accept-Charset", ReadConfig.ACCEPT_CHARSET);
httpRequestBase.setHeader("Cookie", ReadConfig.COOKIE);
} }
package com.testng.utils; import lombok.Data; import java.util.Locale;
import java.util.ResourceBundle; @Data
public class ReadConfig { private static ResourceBundle bundle = ResourceBundle.getBundle("application", Locale.CHINA); public static String ACCEPT = bundle.getString("header.accept");
public static String USER_AGENT = bundle.getString("header.user.agent");
public static String CONTENT_TYPE = bundle.getString("header.content.type");
public static String ACCEPT_CHARSET = bundle.getString("header.accept.charset");
public static String COOKIE = bundle.getString("header.cookie");
public static String URI = bundle.getString("test.uri");
public static String POST_PATH1 = bundle.getString("test.post.path1");
public static String POST_PATH2 = bundle.getString("test.post.path2");
public static String GET_PATH1 = bundle.getString("test.get.path1");
public static String GET_PATH2 = bundle.getString("test.get.path2"); }
TestNG测试类
package com.testng.cases; import com.alibaba.fastjson.JSONObject;
import com.testng.utils.HttpUtils;
import com.testng.utils.ReadConfig; import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.Test; import java.io.IOException; public class DoPostTest { @Test
public void postTest() throws IOException {
String url = ReadConfig.URI + ReadConfig.POST_PATH1;
Reporter.log("请求地址" + url);
JSONObject param = new JSONObject();
param.put("name","zhangsan");
param.put("password","123456");
Reporter.log("请求体" + param.toString());
String result = HttpUtils.doPost(url, param.toString());
Reporter.log("请求结果" + result);
Assert.assertEquals(result, "{\"msg\":\"success\",\"status\":1011,\"token\":\"ZZZZZZZZZZZZZZZZZZZZZZ\"}");
} @Test
public void postTest2() throws IOException {
String url = ReadConfig.URI + ReadConfig.POST_PATH2;
Reporter.log("请求地址" + url);
JSONObject param = new JSONObject();
param.put("name","zhangsan");
param.put("password","1234567");
Reporter.log("请求体" + param.toString());
String result = HttpUtils.doPost(url, param.toString());
Reporter.log("请求结果" + result);
Assert.assertEquals(result, "{\"msg\":\"success\",\"status\":1011,\"token\":\"YYYYYYYYYYYYYYYYYYYYYYYY\"}");
} }
package com.testng.cases; import com.testng.utils.HttpUtils;
import com.testng.utils.ReadConfig;
import org.testng.Assert;
import org.testng.Reporter;
import org.testng.annotations.Test; import java.io.IOException; public class DoGetTest { @Test(description = "成功的案例")
public void getTest() throws IOException {
String uri = ReadConfig.URI + ReadConfig.GET_PATH1;
String param = "name=zhangsan&password=123456";
String url = uri + param;
Reporter.log("请求地址" + url);
String result = HttpUtils.doGet(url);
Reporter.log("请求结果" + result);
Assert.assertEquals(result, "{\"msg\":\"success\",\"status\":1011,\"token\":\"XXXXXXXXXXXXXXXX\"}");
} @Test(description = "失败的案例")
public void getTest2() throws IOException {
String uri = ReadConfig.URI + ReadConfig.GET_PATH2;
String param = "name=zhangsan&password=1234567";
String url = uri + param;
Reporter.log("请求地址" + url);
String result = HttpUtils.doGet(url);
Reporter.log("请求结果" + result);
Assert.assertEquals(result, "{\"msg\":\"success\",\"status\":1011,\"token\":\"AAAAAAAAAAAAAAAAAAAAAAAA\"}");
}
}
testng.xml
<?xml version="1.0" encoding="utf-8" ?>
<suite name="your suite name">
<test name="your test name1">
<classes>
<class name="com.testng.cases.DoGetTest"/>
<class name="com.testng.cases.DoPostTest"/>
</classes>
</test> <listeners>
<listener class-name="com.testng.config.ExtentTestNGIReporterListener"/>
</listeners> </suite>
运行testng.xml 后得到测试报告

Java接口自动化测试之HTTPClient学习(四)的更多相关文章
- Java接口自动化测试之TestNG学习(二)
在maven项目的pom.xml文件中导入TestNG <?xml version="1.0" encoding="UTF-8"?> <pro ...
- java 接口自动化测试之数据请求的简单封装
我们自己用java写接口自动化测试框架或者做个接口自动化测试平台的话,是需要自己进行相关的请求的,因此我们需要简单的封装下httpclient,我新建了一个http工具类,将get方法和post方法进 ...
- Java接口自动化测试之集成MyBatis和MySQL (五)
pom.xml新增dependency <dependency> <groupId>org.mybatis</groupId> <artifactId> ...
- Java接口自动化测试之TestNG测试报告ExtentReports的应用(三)
pom.xml导入包 <?xml version="1.0" encoding="UTF-8"?> <project xmlns=" ...
- 【转】JAVA接口自动化测试之一个测试方法对应多条测试数据的实现方式
一.痛点:一条测试数据对应一个测试方法 前面的章节中我们已经写代码实现了登录接口的处理调用,但是一个接口往往是需要多条测试用例才能完整的覆盖到每一种情况. 针对于单接口多条测试用例需要执行的情况,该如 ...
- Java接口自动化测试之Maven项目的创建(一)
这里使用Idea创建Maven项目, 过程非常简单, 装好JDK和Idea 1. 安装完后,打开Idea, 选择File→New→Project, 如图 2. 选择maven, 点击Next, 如图 ...
- Android自动化测试之Monkeyrunner学习笔记(一)
Android自动化测试之Monkeyrunner学习笔记(一) 因项目需要,开始研究Android自动化测试方法,对其中的一些工具.方法和框架做了一些简单的整理,其中包括Monkey.Monkeyr ...
- 接口自动化:HttpClient + TestNG + Java(二) - 第一个接口测试:get请求
在上一篇中,我们搭建好了HttpClient + TestNG + Java的自动化接口测试环境,这一篇我们就赶紧开始编写我们的第一个接口测试用例. 本篇会对问题解决的思路进行更详尽的阐述. 2.1 ...
- 接口自动化:HttpClient + TestNG + Java(一) - 接口测试概述+自动化环境搭建
1.1 接口测试简介 1.1.1 什么是接口测试 开始学习接口自动化测试之前,我们先要来了解什么是接口,以及什么是接口测试. 我们都知道,测试从级别上划分可以分为 组件测试 集成测试 系统测试 验收测 ...
随机推荐
- CF1098B/CF1099E Nice table
题目地址:CF1098B/CF1099E Nice table 显然,a nice table需要满足如下条件: 要么,每行都由两个字符交替组成,相邻两行的字符均不相同 要么,每列都由两个字符交替组成 ...
- Yarn vs npm: 你需要知道的一切
Yarn 是 Facebook, Google, Exponent 和 Tilde 开发的一款新的 JavaScript 包管理工具.就像我们可以从官方文档了解那样,它的目的是解决这些团队使用 npm ...
- 使用C++编写linux多线程程序
前言 在这个多核时代,如何充分利用每个 CPU 内核是一个绕不开的话题,从需要为成千上万的用户同时提供服务的服务端应用程序,到需要同时打开十几个页面,每个页面都有几十上百个链接的 web 浏览器应用程 ...
- oracle11g自动内存管理
Oracle一直不停的在为Orace数据库的自动化管理努力着,11G中的自动内存管理是Oracle数据库中又一新的里程碑,通过新参数MEMORY_TARGET 来代替PGA和SGA的配置,ORACLE ...
- $Django 虚拟环境,2.0、1.0路由层区别,Httprequest对象,视图层(fbv,cbv),文件上传
1 虚拟环境:解决问题同一台机器上可以运行不同版本的django, 1 用pychanrm创建--->files-->newproject--->选择虚拟环境 2 setting ...
- MySQL(介绍,安装,密码操作,权限表)
一.数据库介绍1.数据库相关概念 a.支持并发 b.锁的问题 c.对客户端请求进行认证 d.存取效率(降低IO次数) 数据库服务器(本质就是一个台计算机,该计算机之上安装 ...
- 前端 ----jQuery的文件操作
06-jQuery的文档操作*** 之前js中咱们学习了js的DOM操作,也就是所谓的增删改查DOM操作.通过js的DOM的操作,大家也能发现,大量的繁琐代码实现我们想要的效果.那么jQuery的 ...
- 切换目录查询目录 tcp
服务器 import socket import os import json sk = socket.socket() sk.bind(('127.0.0.1',8080)) sk.listen() ...
- java按照关键字指定的key删除redis(支持模糊删除)
pom依赖: <dependency> <groupId>redis.clients</groupId> <artifactId>jedis</a ...
- 基于ARM Cortex-M和Eclipse的SWO单总线输出
最近在MCU on Eclipse网站上看到Erich Styger所写的一篇有关通过SWD的跟踪接口SWO获取ARM Cortex-M相关信息的文章,文章结构明晰,讲解透彻,本人深受启发,特意将其翻 ...