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中间件,浏览权限是公开的。

转载于:https://www.cnblogs.com/Aaron-007/p/10407843.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值