二.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接口自动化基础知识(二)的更多相关文章

  1. java接口自动化基础知识(一)

    一.TestNG+MySQL+MyBatis实现对测试用例数据的读取 本篇文章讲解TestNG+MySQL+MyBatis+ExtentReports实现对测试用例数据的读取,下面放出所有配置文件的目 ...

  2. java 基础知识二 基本类型与运算符

    java  基础知识二 基本类型与运算符 1.标识符 定义:为类.方法.变量起的名称 由大小写字母.数字.下划线(_)和美元符号($)组成,同时不能以数字开头 2.关键字 java语言保留特殊含义或者 ...

  3. Java JDBC的基础知识(二)

    在我的上一篇Java JDBC的基础知识(一)中,最后演示的代码在关闭资源的时候,仅仅用了try/catch语句,这里是有很大的隐患的.在程序创建连接之后,如果不进行关闭,会消耗更多的资源.创建连接之 ...

  4. Java面试题-基础知识

    参考文章:Java面试题-基础知识 基础能力 什么是值传递和引用传递 线程状态有哪些,它们之间是如何转换的 进程与线程的区别,进程间如何通讯,线程间如何通讯? HashMap的数据结构是什么?如何实现 ...

  5. JAVA核心技术I---JAVA基础知识(工具类Arrays和Collections类)

    一:工具类 –不存储数据,而是在数据容器上,实现高效操作 • 排序 • 搜索 –Arrays类 –Collection类 二:Arrays类(处理数组) (一)基本方法 –排序:对数组排序, sort ...

  6. 【Java面试】基础知识篇

    [Java面试]基础知识篇 Java基础知识总结,主要包括数据类型,string类,集合,线程,时间,正则,流,jdk5--8各个版本的新特性,等等.不足的地方,欢迎大家补充.源码分享见个人公告.Ja ...

  7. 第76节:Java中的基础知识

    第76节:Java中的基础知识 设置环境,安装操作系统,安装备份,就是镜像,jdk配置环境,eclipse下载解压即可使用,下载tomcat 折佣动态代理解决网站的字符集编码问题 使用request. ...

  8. JAVA核心技术I---JAVA基础知识(static关键字)

    一:static特殊关键字用处 –变量 –方法 –类 –匿名方法 二:静态变量:类共有成员 –static变量只依赖于类存在(通过类即可访问),不依赖于对象实例存在. –所有的对象实例,对于静态变量都 ...

  9. Java JDBC的基础知识(三)

    在前面的Java JDBC的基础知识(二)和(三)中,主要介绍JDBC的原理和简单的应用过程.尤其在(二)中,可以发现代码进行多次try/catch,还有在前面创建连接等过程中好多参数我都给写定了. ...

随机推荐

  1. Static Sushi AtCoder - 4118 (技巧枚举)

    Problem Statement "Teishi-zushi", a Japanese restaurant, is a plain restaurant with only o ...

  2. 想要开发自己的PHP框架需要那些知识储备?

    作者:安正超链接:https://www.zhihu.com/question/26635323/answer/33812516来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注明 ...

  3. Python——Tk控件说明

    控件 描述 具体说明 Button 按钮  点此链接 Canvas 提供绘图形状的功能,包含图像和位图  点此链接 Checkbutton 多选框  点此链接 Entry 单行文本框  点此链接 Fr ...

  4. 设置 sql_mode

    MySQL 的 sql_mode 合理设置 sql_mode 是个很容易被忽视的变量,默认值是空值,在这种设置下是可以允许一些非法操作的,比如允许一些非法数据的插入.在生产环境必须将这个值设置为严格模 ...

  5. 【并发编程】【JDK源码】CAS与synchronized

    线程安全 众所周知,Java是多线程的.但是,Java对多线程的支持其实是一把双刃剑.一旦涉及到多个线程操作共享资源的情况时,处理不好就可能产生线程安全问题.线程安全性可能是非常复杂的,在没有充足的同 ...

  6. centos7虚拟机下python3安装matplotlib遇到的一些问题

    1.安装位置 centos7虚拟机+python3.6 2.问题 2.1如果是使用的python2版本可以使用如下方式, #yum search matplotlib 返回如下: 已加载插件:fast ...

  7. 这可能是最为详细的Docker入门吐血总结

    这可能是最为详细的Docker入门吐血总结  https://www.cnblogs.com/ECJTUACM-873284962/p/9789130.html Docker是什么? 在计算机技术日新 ...

  8. CF1059D Nature Reserve

    原题链接 网络不好的可以到洛谷上去QwQ 题目大意 有N个点,求与y=0相切的,包含这N个点的最小圆的半径 输入输出样例 输入: 2 0 1 1 1 输出 0.625 感觉最多是蓝题难度? 首先无解的 ...

  9. Memcached介绍

    Memcached介绍 Memcached是一种免费的.开源的.高性能的.分布式对象缓存系统,通过缓解数据库压力,来提高动态web页面的速度. Memcached是一种内存级别的键值对存储,用来存放数 ...

  10. epoll ET(边缘触发) LT(水平触发)

    EPOLL事件有两种模型: Edge Triggered (ET) 边缘触发只有数据到来,才触发,不管缓存区中是否还有数据.Level Triggered (LT) 水平触发只要有数据都会触发. 首先 ...