java接口自动化基础知识(二)
二.HttpClient+testNG实现对接口的测试及校验
在上面第一篇中已经实现了基础配置和测试用例数据准备,本篇文章将以登录举例进行测试执行。
这是之前login接口的代码
@Test(groups = "loginTrue",description = "用户登录接口测试")
public void loginTrue() throws IOException {
SqlSession session = DatabaseUtil.getSqlsession();
LoginCase loginCase = session.selectOne("loginCase",1);
System.out.println(loginCase.toString());
System.out.println(TestConfig.loginUrl);
}
//接下来只需要进行两步:1.发送请求 2.验证返回结果
//第一步发送请求
String result = getResult(loginCase);
//第二步验证返回结果
Assert.assertEquals(loginCase.getExpected(),result);
getResult方法被我抽离出来了放在下面,原因是无论我是登录成功,或者登录失败,等会执行相同的操作,只是测试数据和校验部分会不一样。
这是getResult方法的具体代码:
private String getResult(LoginCase loginCase) throws IOException {
HttpPost post = new HttpPost(TestConfig.loginUrl);
//设置body部分
JSONObject param = new JSONObject();
param.put("userName",loginCase.getUserName());
param.put("password",loginCase.getPassword());
//设置header部分信息
post.setHeader("content-type","application/json");
StringEntity entity = new StringEntity(param.toString(),"utf-8");
post.setEntity(entity);
//测试执行
String result;
HttpResponse response = TestConfig.defaultHttpClient.execute(post);
result = EntityUtils.toString(response.getEntity(),"utf-8");
System.out.println(result);
TestConfig.store = TestConfig.defaultHttpClient.getCookieStore();
return result;
}
获取的结果会返回到result中,然后与mysql中存的预期值loginCase.getExpected()进行对比,如结果一样则测试通过。
三.Mybatis之Mapper接口的开发方式
该方式开发,不需要写dao层的实现类,而是mybatis根据映射文件等信息对接口进行jdk动态代理生成代理类来实现接口中的方法,因此,采用这种方式,我们只需要编辑接口,而不需要去写实现。
这里举一个例子来说明:
3.1.需求分析
根据id查询用户。
3.2.Mapper开发代理规范
1、mapper接口的全限定名要和mapper映射文件的namespace值一致。
2、mapper接口的方法名称要和mapper映射文件的statement,即sql中的id一致。
3、mapper接口的方法参数类型要和mapper映射文件的statement即sql中的parameterType的值一致,而且它的参数是一个。
4、mapper接口的方法返回值类型要和mapper映射文件的statement即sql中的resultType的值一致。
3.3.代码实现
准备po类:
@Data
public class User {
private Integer id;
private String username;
private Date birthday;
private String sex;
private String address;
//getter和setter方法省略,可以通过@Data注解自动添加get和set方法
}
Mapper接口:
public interface UserMapper {
public User findUserById(int id);
}
UserMapper.xml配置文件:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE mapper
PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
"http://mybatis.org/dtd/mybatis-3-mapper.dtd">
<!--
namespace:命名空间,它的作用就是对SQL进行分类化管理,可以理解为SQL隔离
注意:使用mapper代理开发时,namespace有特殊且重要的作用
-->
<configuration>
<typeAliases>
<package name=" com.lc.mybatis.mapper"/>
</typeAliases>
</configuration>
<mapper namespace="UserMapper">
<!-- 根据用户ID查询用户信息 -->
<!-- select:表示一个MappedStatement对象 -->
<!-- id:statement的唯一标识 -->
<!-- #{}:表示一个占位符?-->
<!-- #{id}:里面的id表示输入参数的参数名称,如果该参数为简单类型,那么#{}里面的参数可以任意 -->
<!-- parameterType:输入参数的java类型 -->
<!-- resultType:输出结果的所映射的java类型(单条结果所对应的java类型) -->
<select id="findUserById" parameterType="java.lang.Integer" resultType="com.lc.mybatis.po.User">
SELECT * FROM USER WHERE id = #{id}
</select>
</mapper>
在全局配置文件SqlMapperConfig中添加该映射文件
测试代码:
//也可通过集成springboot来管理mapper
@RunWith(SpringRunner.class)
@SpringBootTest
public class UserMapperTest {
@Resource
private
UserMapper userMapper;
//或者不使用springboot集成管理mapper,则需要加下面的setUp方法
private SqlSessionFactory sqlSessionFactory ;
@Before
public void setUp() throws IOException {
InputStream inputStream = Resources.getResourceAsStream("SqlMapConfig.xml");
sqlSessionFactory = new SqlSessionFactoryBuilder().build(inputStream);
}
@Test
public void testFindUserById() {
SqlSession sqlSession = sqlSessionFactory.openSession();
//获取UserMapper的代理类
UserMapper userMapper = sqlSession.getMapper(UserMapper.class);
User user = userMapper.findUserById(10);
System.out.println(user);
sqlSession.close();
//使用springboot集成
User user = userMapper.findUserById(10);
System.out.println(user);
}
}
四.jenkins集成httpclient项目并生成在线报告
本章主要讲解项目的业务代码在写完后,如何集成至jenkins实现自动构建执行。
在执行下面的流程之前,需要完成两件事:
1.将项目代码上传至git
2.安装tomcat
实现过程:
1. 新建自由风格项目
如何构建配置请参考-此篇文章
2.配置Tomcat并启动
因为jenkins一般是部署在linux上,生成的报告其他用户无法直接查看,tomcat作为一个web中间件,将jenkins生成的报告拷贝至tomcat服务上,用以让其他用户进行查看。
下载完成后,因为tomcat默认的端口号是8080,与jenkins冲突了,所以我们首先在conf文件下的server.xml文件中配置tomcat的默认端口号,将默认的8080修改为可用端口号,在这里我修改为8088,保存后退出。
切换至bin目录下,执行startup.sh文件,启动tomcat。
3.将jenkins生成的测试报告拷贝至tomcat
在jenkins的工程配置部分,shell中添加以下语句
//获取最后一次构建的id
result=$(curl -s http://ip:8080/job/JavaApiTest/lastBuild/buildNumber --user admin:admin)
//tomcat目录下新建文件用以保存测试报告
sudo mkdir /Applications/apache-tomcat-9.0.10/webapps/ROOT/$result
//将jenkins生成的目录拷贝至tomcat内
sudo cp /Users/Shared/Jenkins/test/ApiTest/test-output/index.html /Applications/apache-tomcat-9.0.10/webapps/ROOT/$result/index.html
然后构建项目,执行完,构建成功~
然后访问tomcat:http://ip:8088/65/index.html,可以看到生成的报告
在这里说明一下,为什么要用tomcat。如果不用tomcat,直接访问jenkins生成的报告也是可以的,但是一般jenkins会部署在linux服务器上,无法直接访问或者访问需要权限。tomcat作为一个web中间件,浏览权限是公开的。
java接口自动化基础知识(二)的更多相关文章
- java接口自动化基础知识(一)
一.TestNG+MySQL+MyBatis实现对测试用例数据的读取 本篇文章讲解TestNG+MySQL+MyBatis+ExtentReports实现对测试用例数据的读取,下面放出所有配置文件的目 ...
- java 基础知识二 基本类型与运算符
java 基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...
- Java JDBC的基础知识(二)
在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...
- Java面试题-基础知识
参考文章:Java面试题-基础知识 基础能力 什么是值传递和引用传递 线程状态有哪些,它们之间是如何转换的 进程与线程的区别,进程间如何通讯,线程间如何通讯? HashMap的数据结构是什么?如何实现 ...
- JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)
一:工具类 –不存储数据,而是在数据容器上,实现高效操作 • 排序 • 搜索 –Arrays类 –Collection类 二:Arrays类(处理数组) (一)基本方法 –排序:对数组排序, sort ...
- 【Java面试】基础知识篇
[Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...
- 第76节:Java中的基础知识
第76节:Java中的基础知识 设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat 折佣动态代理解决网站的字符集编码问题 使用request. ...
- JAVA核心技术I---JAVA基础知识(static关键字)
一:static特殊关键字用处 –变量 –方法 –类 –匿名方法 二:静态变量:类共有成员 –static变量只依赖于类存在(通过类即可访问),不依赖于对象实例存在. –所有的对象实例,对于静态变量都 ...
- Java JDBC的基础知识(三)
在前面的Java JDBC的基础知识(二)和(三)中,主要介绍JDBC的原理和简单的应用过程.尤其在(二)中,可以发现代码进行多次try/catch,还有在前面创建连接等过程中好多参数我都给写定了. ...
随机推荐
- 广师大学习笔记之文本统计(jieba库好玩的词云)
1.jieba库,介绍如下: (1) jieba 库的分词原理是利用一个中文词库,将待分词的内容与分词词库进行比对,通过图结构和动态规划方法找到最大概率的词组:除此之外,jieba 库还提供了增加自定 ...
- 【洛谷】【二分答案+最短路】P1462 通往奥格瑞玛的道路
在艾泽拉斯大陆上有一位名叫歪嘴哦的神奇术士,他是部落的中坚力量 有一天他醒来后发现自己居然到了联盟的主城暴风城 在被众多联盟的士兵攻击后,他决定逃回自己的家乡奥格瑞玛 题目背景 [题目描述:] 在艾泽 ...
- python的设计原则及设计模式
python的设计原则及设计模式 七大设计原则 单一职责原则 [SINGLE RESPONSIBILITY PRINCIPLE] 一个类负责一项职责. 里氏替换原则 [LISKOV SUBSTITUT ...
- Linux scp sudo
command line - scp to remote server with sudo - Super Userhttps://superuser.com/questions/138893/scp ...
- JVM中的垃圾回收算法GC
GC是分代收集算法:因为Young区,需要回收垃圾对象的次数操作频繁:Old区次数上较少收集:基本不动Perm区.每个区特点不一样,所以就没有通用的最好算法,只有合适的算法. GC的4大算法 1.引用 ...
- Linux 学习 (十一) 软件安装管理
Linux软件安装管理 学习笔记 软件包简介 软件包分类: 源码包 :脚本安装包 二进制包(RPM 包.系统默认包) 源码包的优点: 开源,如果有足够的能力,可以修改源代码 可以自由选择所需的功能 软 ...
- docker之常用命令、自定制镜像、公(私)仓库的上传和下载
一.docker命令 1.参数和命令汇总 1. 参数 Options: --config=~/.docker Location of client config files #客户端配置文件的位置 - ...
- GitHub最基本使用总结
GitHub最基本使用入门 入门必看博客:https://mp.weixin.qq.com/s/LbzSwl4dYwrSPze0w10l8w 一.Git Linux安装 Git Linux安装教程:h ...
- 【SPOJ】DIVCNTK min_25筛
题目大意 给你 \(n,k\),求 \[ S_k(n)=\sum_{i=1}^n\sigma_0(i^k) \] 对 \(2^{64}\) 取模. 题解 一个min_25筛模板题. 令 \(f(n)= ...
- node.js的基础知识
第一部分知识: .命令行窗口(小黑屏).CMD窗口.终端.shell - 开始菜单 --> 运行 --> CMD --> 回车 - 常用的指令: dir 列出当前目录下的所有文件 c ...