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 什么是接口测试 开始学习接口自动化测试之前,我们先要来了解什么是接口,以及什么是接口测试. 我们都知道,测试从级别上划分可以分为 组件测试 集成测试 系统测试 验收测 ...
随机推荐
- Linux C 读取文件夹下所有文件(包括子文件夹)的文件名【转】
转自:https://www.cnblogs.com/xudong-bupt/p/3504442.html 本文:http://www.cnblogs.com/xudong-bupt/p/350444 ...
- ARMCC和GCC编译ARM代码的软浮点和硬浮点问题 【转】
转自:http://houh-1984.blog.163.com/blog/static/31127834201211112129167/ 本文介绍了ARM代码编译时的软浮点(soft-float)和 ...
- 解决ubuntu的gedit编辑器中文乱码的问题
hello,本人 sky 又和大家见面了很多人在使用ubuntu系统时发现打开windows系统下面写的文档的话会发现乱码,是因为编码格式的问题windows系统下面是用GB2312等编码格式进行中文 ...
- asyncio Queue的使用例子
import aiohttp import asyncio import async_timeout from urllib.parse import urljoin, urldefrag root_ ...
- $Django 路飞学城项目简介
- 基于极验实现动态验证码 - 在线视频播放:cc,HTML用的Flash - 基于Rest Framework实现 API接口 - 自定义rest认证token 认证 - 序列化以及自定义验证对请求 ...
- $Django 多表操作(增删改查,基于双下划线,对象的查询) 在Python脚本中调用Django环境
在Python脚本中调用Django环境. import osif __name__ == '__main__': os.environ.setdefault("DJANGO_SETTING ...
- OpenStack实践系列①openstack简介及基础环境部署
OpenStack实践系列①openstack简介及基础环境部署 一.OpenStack初探1.1 OpenStack简介 OpenStack是一整套开源软件项目的综合,它允许企业或服务提供者建立.运 ...
- ebs 12.1.1 单节点多用户安装
本次测试环境:操作系统 oracle linux 6.9 oracle ebs 12.1.1 192.168.20.210 erpapp1.hthorizon.com erpapp1 yum ...
- Ex4_21 最短路径算法可以应用于货币交易领域..._第十二次作业
(a) 建立一个有向图G(V,E),每个顶点表示一种货币,两个顶点之间的边权的大小ex[u][v]表示两种货币之间的汇率,若要找一个最有利的兑换序列,把货币s兑换成货币t,即在若干种兑换序列中选择 ...
- Python-递归、三元表达式列表生成式等
一.函数递归 1.什么是函数递归:函数的递归调用是函数嵌套的一种特殊形式,在调用一个函数的过程中又直接或者间接地调用该函数本身,称之为函数的递归调用 2.递归调用必须明确的两个阶段: 1.回溯:一次次 ...